Мне нужен пользователь Amazon S3 с полным доступом к одному ведру
У меня есть пользователь foo со следующими привилегиями (он не является членом какой-либо группы):
{
"Statement": [
{
"Sid": "Stmt1308813201865",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::bar"
}
]
}
Однако этот пользователь не может загружать или делать что-либо еще, пока я не предоставил полный доступ к аутентифицированным пользователям (что может быть применимо ко всем). Это все еще не позволяет пользователю изменять разрешение как boto выдает ошибку после загрузки при попытке сделать key.set_acl('public-read')
.
В идеале у этого пользователя будет полный доступ к ведру bar
и ничего другого, что я делаю неправильно?
Ответы
Ответ 1
Вам необходимо предоставить разрешение s3: ListBucket самому ведро. Попробуйте следующую политику.
{
"Statement": [
{
"Effect": "Allow",
"Action": "S3:*",
"Resource": "arn:aws:s3:::bar/*",
"Condition": {}
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::bar",
"Condition": {}
}
]
}
Ответ 2
Выбранный ответ не сработал у меня, но этот:
{
"Statement": [
{
"Action": "s3:*",
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
]
}
],
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "arn:aws:s3:::*"
}
]
}
Кредит: http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-using-amazon-iam/
Ответ 3
Знаете ли вы AWS Policy Generator?
Ответ 4
Существует официальная документация AWS по адресу Написание политик IAM: предоставление доступа к ведро Amazon S3
Просто скопируйте и вставьте соответствующее правило и измените ключ "Ресурс" на ARX вашего ведра во всех заявлениях.
Для программного доступа политика должна быть:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::bar"]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"
],
"Resource": ["arn:aws:s3:::bar/*"]
}
]
}
И для доступа доступа к консоли должен быть:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListAllMyBuckets"
],
"Resource": "arn:aws:s3:::bar*"
},
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::bar"]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"
],
"Resource": ["arn:aws:s3:::bar/*"]
}
]
}
Ответ 5
Это работает для меня:
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:ListBucketMultipartUploads",
"s3:ListBucketVersions"
],
"Resource": "arn:aws:s3:::bucket_name_here"
},
{
"Effect": "Allow",
"Action": [
"s3:*Object*",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload"
],
"Resource": "arn:aws:s3:::bucket_name_here/*"
}
]
}
Ответ 6
Если вы вытаскиваете волосы, потому что не можете понять, почему Cyberduck не может устанавливать ACL-объекты объекта, но он работает с другим клиентом (например, Panic Transmit), вот решение:
Вам нужно добавить s3:GetBucketAcl
в список действий, например:
{
"Statement": [
{
"Sid": "Stmt1",
"Action": [
"s3:GetBucketAcl",
"s3:ListBucket",
"s3:DeleteObject",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::your-bucket-name"
}
]
}
Конечно, вам не нужно это делать, если вы менее ограничиваетесь s3:*
, но я думаю, что это хорошо знать.
Ответ 7
@cloudberryman ответ правильный, но мне нравится делать вещи как можно короче. Этот ответ можно уменьшить до:
{
"Statement":[
{
"Effect":"Allow",
"Action":"S3:*",
"Resource":[
"arn:aws:s3:::bar",
"arn:aws:s3:::bar/*"
]
}
]
}
Ответ 8
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListAllMyBuckets"
],
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::YOUR-BUCKET",
"arn:aws:s3:::YOUR-BUCKET/*"
]
}
]
}