はじめに
エラー
Resource handler returned message: "User: arn:aws:sts::XXXXX:assumed-role/cfn-sr-XXXXX-test-click-bucket-dev/AWSCloudFormation is not authorized to perform: s3:PutBucketWebsite on resource: "arn:aws:s3:::XXXXX-test.click" because no identity-based policy allows the s3:PutBucketWebsite action (Service: S3, Status Code: 403, Request ID: WMQNEBSCNF62DRTP, Extended Request ID: Sz0e360yMbwUusDlug6J5g9j43tIvSPzi1Lbdrjvub1OM+0W5svXX20VCO1kxuQkddHHl8wqwYMeGx2ij2n9ihAi7fODMbdTKMibWKYErpg=) (SDK Attempt Count: 1)" (RequestToken: f8aba594-fbc5-e198-41ee-480353b70684, HandlerErrorCode: GeneralServiceException)
うーん、相手に伝える気あるのか?
中身を分解するとこう👇
- User: arn:aws:sts::XXXXX:assumed-role/cfn-sr-XXXXX-test-click-bucket-dev/AWSCloudFormation is not authorized
ユーザ(role)のcfn-sr-XXXXX-test-click-bucket-devは許可されていない
- to perform: s3:PutBucketWebsite on resource: "arn:aws:s3:::XXXXX-test.click"
バケットでs3:PutBucketWebsiteを実行することを
- because no identity-based policy allows the s3:PutBucketWebsite action
なぜならs3:PutBucketWebsiteアクションを実行するポリシーがないため
- (Service: S3, Status Code: 403, Request ID: WMQNEBSCNF62DRTP, Extended Request ID: Sz0e360yMbwUusDlug6J5g9j43tIvSPzi1Lbdrjvub1OM+0W5svXX20VCO1kxuQkddHHl8wqwYMeGx2ij2n9ihAi7fODMbdTKMibWKYErpg=) (SDK Attempt Count: 1)" (RequestToken: f8aba594-fbc5-e198-41ee-480353b70684, HandlerErrorCode: GeneralServiceException)
この辺はエラーコードが書いてある
対処1
s3:PutBucketWebsite
アクションを実行するポリシーをアタッチしてあげればよい
では、そのポリシーはなんだ?
アクション名はほぼ権限名らしい。
なので、ポリシーにs3:PutBucketWebsite
を追加すれば良い。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CreateBucket",
"Effect": "Allow",
"Action": [
"s3:CreateBucket"
],
"Resource": [
"*"
]
},
{
"Sid": "ManageBuckets",
"Effect": "Allow",
"Action": [
"s3:DeleteBucket",
"s3:PutBucketOwnershipControls",
"s3:PutBucketPublicAccessBlock",
"s3:PutEncryptionConfiguration",
"s3:GetEncryptionConfiguration",
"s3:PutBucketTagging",
"s3:GetBucket*",
"s3:ListBucket",
"s3:PutBucketWebsite" <<<<< 追加
],
"Resource": [
"arn:aws:s3:::XXXX-test.click"
]
}
]
}
対処2
結果からいうと、権限はあと3つ不足している。
実行すればエラーが出て不足権限名を表示してくれるが、その前になんとかしたい。
なんとかならないだろうか?そこでIAM Policy Simulatorというものがある。(なんとかはならない)
IAM Policy Simulator
https://policysim.aws.amazon.com/home/index.jsp
初期状態
"Action": [
"s3:DeleteBucket",
"s3:PutBucketOwnershipControls",
"s3:PutBucketPublicAccessBlock",
"s3:PutEncryptionConfiguration",
"s3:GetEncryptionConfiguration",
"s3:PutBucketTagging",
"s3:GetBucket*",
"s3:ListBucket"
],
"s3:PutBucketWebsite"を追加して実行
画面には3項目記入する。
左上:S3
その右にはPutBucketWebsite
bucketにはbucketのarnを入れて
Run Simulationを実行する。allowになればOK
その後stackを再実行したら次のエラーが出た。次のエラーがここで出ることを期待していたがそうはならなかった。次のエラーはstack実行しないとわからない。それが嫌ならマニュアルをきっちり読めば必要なポリシーは書いてあるらしい。(嫌だ)
ポリシー最終系
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CreateBucket",
"Effect": "Allow",
"Action": [
"s3:CreateBucket"
],
"Resource": [
"*"
]
},
{
"Sid": "ManageBuckets",
"Effect": "Allow",
"Action": [
"s3:DeleteBucket",
"s3:PutBucketOwnershipControls",
"s3:PutBucketPublicAccessBlock",
"s3:PutEncryptionConfiguration",
"s3:GetEncryptionConfiguration",
"s3:PutBucketTagging",
"s3:GetBucket*",
"s3:ListBucket",
"s3:PutBucketWebsite"
],
"Resource": [
"arn:aws:s3:::XXXXX-test.click"
]
}
]
}
ちなみに
"s3:PutBucketWebsite"を追加したら、stack削除するときに"s3:DeleteBucketPolicy"も必要となるので追加しておけばOK
注意
AWSにログインした状態じゃないとdenyになる。しれっとログアウトしているときがあるので注意。