Разрешения AWS S3: привязка представления к домену
Я пытаюсь заблокировать просмотр ресурсов S3 - на самом деле только изображений - в домене моего веб-приложения. Например, если кто-то заходит на мой сайт, скажем, example.com, и там есть ссылка src на изображение, я хочу, чтобы его можно было просмотреть. Но если кто-то щелкнет правой кнопкой мыши и откроет изображение прямо в новой вкладке, он не сможет этого сделать.
В сети есть тонны, но я просто не могу найти правильную комбинацию или разрешения. И в большинстве руководств обычно не говорится о настройках «Блокировать общий доступ», и я не уверен, как это подходит.
Вот политика, которую я пытаюсь:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Allow get requests originating from example.com",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::my-bucket",
"Condition": {
"StringLike": {
"aws:Referer": [
"https://www.example.com/*"
]
}
}
},
{
"Sid": "Do not allow requests from anywhere else.",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::my-bucket",
"Condition": {
"StringNotLike": {
"aws:Referer": [
"https://www.example.com/*"
]
}
}
}
]
}
Это, кажется, ничего не делает. Если включена функция «блокировать общий доступ», блокируются оба. Если он выключен, отображаются оба. То есть, несмотря на то, что у меня есть явный список «Запретить» выше, переход прямо к изображению в этом сегменте в браузере работает нормально.
Я также могу редактировать CORS, но тогда я все равно задаюсь вопросом, почему список запрещенных здесь не позаботится об этом сам. Наконец, после реализации политики я сам теряю множество возможностей, таких как настройка CORS, даже при использовании учетной записи пользователя root. Я, вероятно, могу просто сделать что-то в другом порядке, чтобы это произошло, но я хотел бы по-прежнему иметь возможность управлять своими разрешениями после отправки политики.
Спасибо.
1 ответ
Шаг 1. Блокировка всего общего доступа должна быть отключена, чтобы применить параметры политики корзины. Вы можете заблокировать все общедоступные параметры, как показано на изображении выше.
Шаг 2: Организуйте все изображения вашего веб-сайта в одну папку, например «изображения».
Шаг 3: Настройте политику корзины, как показано ниже. В нем два утверждения. Заявление 1 запрещает доступ к папке с изображениями всем, кроме вашего домена. Утверждение 2 позволяет все. Поскольку запрещение перезаписей разрешено, оператор 1 имеет большую силу, чем оператор 2, поэтому он блокирует изображения, которые вызываются из-за пределов вашего домена.
{
"Version": "2012-10-17",
"Id": "http referer policy example",
"Statement": [
{
"Sid": "Deny get requests not originating from www.example.com and example.com.",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:Get*",
"Resource": "arn:aws:s3:::your-bucket/images/*",
"Condition": {
"StringNotLike": {
"aws:Referer": [
"http://www.example.com/*",
"http://www.example.com/"
]
}
}
},
{
"Sid": "Allow get requests",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:Get*",
"Resource": "arn:aws:s3:::your-bucket/*"
}
] }
Шаг 4: Вам нужно немного изменить код внешнего интерфейса, везде, где вы используете теги изображений, вам нужно добавить «referrerpolicy», установленный в «origin», если вы не установите это поле, заголовок реферера не будет перенаправлен. S3 и оценка правила не удались, и произойдет ошибка 403.
Пример:
<img src="images/pic_trulli.jpg" alt="Trulli" width="500" height="333" referrerpolicy="origin">
Это решение проверено и работает. Если вам также нужен CORS, вы также можете включить CORS в корзине S3. Но эта политика достаточно хороша, чтобы справиться.
При вызове с доменом -->
При вызове с URL-адресом S3 -->
Если это решение поможет вам, отметьте его как ответ.