Amazon S3 — ограничение доступа реферера

#amazon-web-services #amazon-s3

#amazon-веб-сервисы #amazon-s3

Вопрос:

У меня есть политика корзины для ограничения доступа к файлам с «—original» в имени файла, но она работает только в том случае, если вы вводите URL-адрес непосредственно в браузер. Если вы нажмете «открыть изображение на новой вкладке», оно отобразится просто отлично (я полагаю, потому что http-реферер действительно с этого сайта). Мне нужно предоставить доступ к веб-сайту, чтобы показать изображение, но если на новой вкладке или при попытке загрузки он не получает доступа. Нужно ли мне вводить какое-то перенаправление?

Вот моя политика корзины:

 {
    "Version": "2012-10-17",
    "Id": "Deny file access",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": "arn:aws:s3:::examplebucket/*--original*",
            "Condition": {
                "StringNotLike": {
                    "aws:Referer": [
                        "https://examplebucket.com*",
                        "https://examplebucket.dev*"
                    ]
                }
            }
        }
    ]
}
  

Комментарии:

1. Есть ли причина, по которой вы хотите ограничить возможность пользователя открывать изображение на новой вкладке?

Ответ №1:

Управление доступом через referer не очень безопасно. Его можно легко подделать. Не используйте его для защиты конфиденциальной информации.

Вместо этого ваше приложение должно генерировать предварительно подписанные URL-адреса Amazon S3, которые предоставляют ограниченный по времени доступ к закрытому объекту.

Ответ №2:

По умолчанию все ресурсы S3 являются частными. Поэтому, если в политике нет разрешающего правила, оно будет отклонено по умолчанию. И если существует какое-либо правило запрета, которое соответствует запросу, тогда запрос будет отклонен, даже если запрос разрешен другими правилами.

Попробуйте выполнить следующее:

 {
    "Version": "2012-10-17",
    "Id": "Deny file access",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": "arn:aws:s3:::examplebucket/*"
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": "arn:aws:s3:::examplebucket/*--original*",
            "Condition": {
                "StringNotLike": {
                    "aws:Referer": [
                        "https://examplebucket.com*",
                        "https://examplebucket.dev*"
                    ]
                }
            }
        }
    ]
}