Как запретить просматривать все файлы в Amazon s3?
Столкнулся с такой проблемой: загрузил картинку по адресу *****.eu-1.amazonaws.com/_st/image.png, если перейти по адресу *****.eu-1.amazonaws.com все увидят это:
Как это скрыть?
В Bucket policy настроил так:
{
"Version": "2012-10-17",
"Id": "Policy163577444641",
"Statement": [
{
"Sid": "Stmt16655774458",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::04966640544:user/user"
},
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::aws-st3/*"
}
]}
Access control list (ACL) Настроил так:

AWS s3 использую для хранилища файлов
Ответы (1 шт):
Ты настроил Everyone (public access) = List Какой ещё эффект ты ожидал?
S3 самый старый сервис, поэтому там много легаси-умолчаний, которые в более новых сервисах они уже не делали.
- ACL
Это старый подход, уходящий корнями в имитирование файловой системы. Его стоит использовать только когда ты хочешь дать доступ всем. В остальных сценариях он не обеспечивает ни гибкости ни лёгкости
- Bucket policy
В общем случае, в AWS доступ Principal --(action)--> Resource должен разрешаться на обоих концах стрелки.
В случае S3 это сделано по другому. Правый конец стрелки разрешён по умолчанию для всех принципалов из того же самого аккаунта. Так что если arn:aws:iam::04966640544:user/user находится в том же аккаунте, то Allow для него не имеет никакого смысла - этот юзер (как и все другие принципалы) и так имеет доступ к этой корзине, если этот доступ разрешён в Principal policy (левый конец стрелки).
Чтобы настроить ограниченный доступ к корзине (правый конец стрелки), надо достаточно сильно потрудиться - написать Deny инструкции для всех, кому хочешь запретить. К счастью, можно писать с инверсией - Deny для всех кроме ххх, что слегка облегчает жизнь.
Из твоего поста непонятно, какую цель ты преследуешь. Если цель дать доступ к корзине только одному юзеру, то надо
- Убрать публичный доступ к корзине
- Вообще все ACL сбросить к заводским настройкам и не трогать их никогда
- Написать Bucket Policy, которая запрещает доступ всем, кроме определённого юзера
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::aws-st3/*",
"arn:aws:s3:::aws-st3"
],
"Condition": {
"StringNotLike": {
"aws:arn": [
"arn:aws:iam::04966640544:user/user"
]
}
}
}
]
}
- В principal policy юзеру
arn:aws:iam::04966640544:user/userвписать разрешение наarn:aws:s3:::aws-st3