У меня есть следующая политика IAM для пользователя
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1395161912000",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucketname"
]
},
{
"Sid": "list",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
Цель состоит в том, чтобы позволить пользователю загружать файлы в корзину, но не перезаписывать или удалять. Это для резервного копирования. Я начал с ListBucket
и PutObject
, но добавил *
как это не сработало. Даже не *
позволяет пользователю загружать файлы, просто получая Access Denied
.
Когда я пробую Симулятор, он возвращается Denied - Implicitly denied (no matching statements found).
для ListBucket
, что кажется странным, поскольку я неявно допустил это.
Я пробовал и Cyberduck, и 3Hub в качестве клиентов S3.
Есть идеи, что случилось?
При крафте Amazon IAM политика для Amazon S3, вам нужно знать разницу между Операции на Сервисе (например. ListAllMyBuckets), Операции с бакетами (например. ListBucket) и Операции с объектами (например. GetObject).
В частности, Resource
спецификация вашей политики должна адресовать соответствующие целевые объекты в соответствии со следующими шаблонами (см., например, различные Примеры политик для Amazon S3):
arn:aws:s3:::*
arn:aws:s3:::<bucket>
arn:aws:s3:::<bucket>/<object>
Вы сталкиваетесь Access Denied
, поскольку вы указали ресурс уровня сегмента для PutObject
, который требует спецификации ресурса уровня объекта, например arn:aws:s3:::<bucket>/*
- соответственно, следующая политика должна охватывать ваш пример использования:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucketname"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::bucketname/*"
]
}
]
}