僕がお手伝いしているAWS環境でバケットポリシーが保存できないとの連絡を受けました。原因の特定に少し手間取ってしまったのでメモっておきます。
事象
AWSコンソールマネジメントから、すでに作成していたS3バケットポリシーを追記編集して、保存しようとすると以下のエラーで保存できないとのこと。
バケットポリシーを編集するアクセス許可がありません
お客様または AWS 管理者が s3:PutBucketPolicy アクションを許可するようにアクセス許可を更新したら、[Save changes] を選択します。
API レスポンス Access Denied
作業をしているIAMユーザーには管理者権限のAdministratorAccessが割り当てられており、権限は充分な状態でした。
原因と対応
パブリックアクセスをすべてブロックが有効になっている状態のまま(アクセス許可 → ブロックパブリックアクセスの設定がオン)、以下のようなパブリックアクセスを許可しているバケットポリシーを追記編集で保存しようとしたためでした。
{
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucketname/*"
},
{
... 以降追記した内容
]
}
どうやらパブリックアクセスのブロック設定とポリシーの間で、矛盾が発生してバケットポリシーの保存ができなくなっていたようです。(おそらく最初にこのポリシーを作成したときには、パブリックアクセスブロックを無効にしていたと思われます)
担当者に確認したところ、バケットポリシーのパブリックアクセスを許可している箇所は不要とのことだったので、それを削除したら正常にバケットポリシーを保存できるようになりました。
エラーメッセージからてっきりIAMやSCPなどの権限まわりだと思い込んでいたため余計な時間を食ってしまいました。
今回は以上です〜ノシ
参考
(´・ω・`)ゞアリガトゴザイマス.。.・゚
Amazon S3 ストレージへのパブリックアクセスのブロック
ウェブサイトアクセスのアクセス許可の設定
リンク
リンク