Необходимые разрешения s3cmd S3 для PUT/Sync
При переходе на AWS EC2 я хочу ограничить права доступа к своим экземплярам по уважительной причине. Одна вещь, которую нужно делать, это доступ к файлам на S3 и запись там файлов. Тем не менее, я не могу найти никакого способа достичь этого, не предоставляя все разрешения этому пользователю.
s3cmd позволяет мне называть "ls" и "du" в ведрах s3, на которые я давал разрешение политики, но всегда с ошибкой 403 при попытке выполнить PUT/sync с одной из этих папок. Если я использую свои корневые учетные данные, передача идет прямо.
Итак, я не понимаю, почему, если я даю все разрешения пользователю для указанных ведер, он не может PUT, но если я дам ему arn: aws: s3: * (все ковши), то он может. Не имеет смысла для меня.
Кто-нибудь еще когда-либо занимался этим раньше?
Ответы
Ответ 1
Попробуйте что-то вроде этого. Я думаю, проблема в том, что вам нужны s3: ListAllMyBuckets и s3: ListBuckets для работы s3cmd. Не уверен, почему, но он не будет работать, если он не сможет получить список ведер. У меня была та же проблема, когда я впервые использовал разрешения с s3cmd, и это было решением.
{
"Statement": [
{
"Action": [
"s3:ListAllMyBuckets"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::*"
},
{
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::bucket/path",
"arn:aws:s3:::bucket/path/*"
]
}
]
}
Редактировать Я добавил действие s3:PutObjectAcl
которое требуется для новых версий s3cmd, как указано Will Jessop ниже.
Ответ 2
Ответ на bwight почти прав (он, вероятно, использовался для более старых версий s3cmd), но мне нужно добавить s3:PutObjectAcl
чтобы заставить его работать:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt123456",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Sid": "Stmt123457",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::bucketname",
"arn:aws:s3:::bucketname/*"
]
}
]
}
Ответ 3
Я пытался делать большие загрузки файлов, и политика не работала хорошо для меня, я закончил добавлять следующую политику к пользователю:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1397834652000",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Sid": "Stmt1397834745000",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:GetBucketLocation",
"s3:AbortMultipartUpload",
"s3:GetObjectAcl",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:GetObject",
"s3:PutObjectAcl",
"s3:PutObject",
"s3:GetObjectVersionAcl"
],
"Resource": [
"arn:aws:s3:::my_bucket",
"arn:aws:s3:::my_bucket/*"
]
}
]
}
где my_bucket - это ведро, где мне нужно управлять файлами, хотя s3cmd
Ответ 4
В случае, если вы предоставляете доступ к подпапке (как в исходном ответе /bucket-name/path/), а не ко всему ведру, действие ListBucket требует немного большей специфичности:
{
"Sid": "AllowListingOfFilesInFolder",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucket-name"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"path/*"
]
}
}
}
Я считаю, что он работает также с оригинальным ответом, если вы обеспечиваете доступ ко всему ковшу.