#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*"
]
}
}
}
]
}