私は次の特権を持つユーザーfooを持っています(それはどのグループのメンバーでもありません):
_{
"Statement": [
{
"Sid": "Stmt1308813201865",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::bar"
}
]
}
_
ただし、そのユーザーは、認証されたユーザー(すべてのユーザーに適用される可能性があります)にフルアクセスを許可するまで、アップロードしたり、ほとんど何もできません。 boto がkey.set_acl('public-read')
を実行しようとすると、アップロード後にエラーがスローされるため、これでもユーザーは権限を変更できません。
理想的には、このユーザーはbar
バケットへの完全なアクセス権を持ち、それ以外には何もありません。何が問題なのですか?
s3:ListBucket権限をバケット自体に付与する必要があります。以下のポリシーをお試しください。
{
"Statement": [
{
"Effect": "Allow",
"Action": "S3:*",
"Resource": "arn:aws:s3:::bar/*",
"Condition": {}
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::bar",
"Condition": {}
}
]
}
選択した答えは私にはうまくいきませんでしたが、これはうまくいきました:
{
"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/
AWS Policy Generator をご存知ですか?
IAMポリシーの書き込み:Amazon S3バケットへのアクセスを許可する方法 に公式のAWSドキュメントがあります
適切なルールをコピーして貼り付け、すべてのステートメントで「リソース」キーをバケットのARNに変更するだけです。
programamtic accessの場合、ポリシーは次のようになります。
{
"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/*"]
}
]
}
{
"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/*"
]
}
]
}
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:*
の制限が少ない場合は、これを行う必要はありませんが、知っておくと良いと思います。
@cloudberrymanの答えは正しいですが、私は物事を可能な限り短くしたいです。この答えは次のように減らすことができます:
{
"Statement":[
{
"Effect":"Allow",
"Action":"S3:*",
"Resource":[
"arn:aws:s3:::bar",
"arn:aws:s3:::bar/*"
]
}
]
}
リソースで以下のように言及することにより、バケットの内部フォルダーを許可します。また、すべてのバケットにリスト権限を与える必要があります。以下のサンプルポリシーを確認してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::example-bucket",
"arn:aws:s3:::example-bucket/*"
]
},
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "arn:aws:s3:::*"
}
]
}
これについての詳細を知るには、これを見つけてください 記事 。
それは私にとってはうまくいきます:
{
"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/*"
}
]
}