ユーザーに対して次の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
_を取得します。
シミュレータを試してみると、ListBucket
に対してDenied - Implicitly denied (no matching statements found).
が返されますが、暗黙的に許可しているので奇妙に見えます。
私はS3クライアントとしてCyberduckと3Hubの両方を試しました。
何が間違っているのでしょうか?
Amazon IAMAmazon S のポリシーを作成する場合、 サービスの操作 の違いに注意する必要があります(例 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/*"
]
}
]
}