
AWS S3でウェブサイトのホスティング設定やアクセス権限の調整を行う際、バケットポリシーを編集しようとして、下記図「バケットポリシーの変更を保存できません」という赤いエラーメッセージに遭遇したことはありませんか?

このエラーは、S3のアクセス制御を設定する上で比較的一般的な問題ですが、原因がいくつか考えられるため、少し戸惑うかもしれません。
今回は、この「バケットポリシーが保存できない」エラーが発生する主な原因と、それぞれの具体的な解決策を分かりやすく解説していきます。
エラーメッセージ
表示されるエラーメッセージは、主に以下の内容を示しています。(画像内の「パケット」は「バケット」の誤りと思われます)
バケットポリシーの変更を保存できません
バケットポリシーを編集する許可がない、またはバケットポリシーがパブリックアクセスのブロック設定と競合するレベルのパブリックアクセスを付与しています。バケットポリシーを編集するには、
s3:PutBucketPolicy
許可が必要です。有効になっているパブリックアクセスのブロック設定を確認するには、アカウントとバケットの設定を表示します。詳細については、Amazon S3 での Identity and Access Managementをご覧ください。
このメッセージから、エラーの主な原因が2つあることがわかります。
エラーが発生する主な原因
原因1:IAM権限不足 (s3:PutBucketPolicy)
エラーメッセージにある通り、バケットポリシーを編集(保存)するには、操作を実行しているIAMユーザーまたはIAMロールに s3:PutBucketPolicy
というアクションを許可するIAMポリシーがアタッチされている必要があります。
この権限がないユーザーがポリシーを保存しようとすると、「許可がない」という理由でエラーが発生します。
原因2:パブリックアクセスブロック設定との競合
S3には、意図しないバケットやオブジェクトの公開を防ぐための「パブリックアクセスブロック」設定があります。これはアカウントレベル、またはバケット単位で設定できます。
このブロック設定が有効になっている状態で、「すべてのユーザー(Principal: "*"
など)からのアクセスを許可する」ような内容のバケットポリシーを保存しようとすると、「ブロック設定と競合するレベルのパブリックアクセスを付与しようとしている」と判断され、エラーが発生します。
例えば、「パブリックポリシーによるバケットへのパブリックアクセスをブロック」が有効な場合に、"Effect": "Allow", "Principal": "*"
を含むポリシーを保存しようとすると、この競合が発生します。
具体的な対処法
原因が分かれば、解決策も見えてきます。以下の手順で確認・対処していきましょう。
対処法1:IAMユーザー/ロールに権限を追加する
まず、バケットポリシーを編集しようとしているIAMユーザーまたはロールに必要な権限が付与されているか確認します。
- AWSマネジメントコンソールにログインし、IAMサービスを開きます。
- 左側のナビゲーションペインから「ユーザー」または「ロール」を選択し、該当するユーザー/ロールをクリックします。
- 「許可 (Permissions)」タブを開き、アタッチされているポリシーを確認します。
s3:PutBucketPolicy
アクションを許可するポリシー(例:AmazonS3FullAccess
や、より限定的なカスタムポリシー)がアタッチされているか確認します。- 権限が不足している場合は、「許可を追加」ボタンから、必要な権限を持つポリシーをアタッチするか、既存のカスタムポリシーに
s3:PutBucketPolicy
アクションを追加します。
対処法2:パブリックアクセスブロック設定を確認・調整する
次に、S3のパブリックアクセスブロック設定を確認します。この設定はセキュリティ上非常に重要です。変更する場合は、その影響を十分に理解した上で行ってください。
- AWSマネジメントコンソールでS3サービスを開きます。
- アカウントレベルの設定確認: 左側のナビゲーションペインで「パブリックアクセスブロック (アカウント設定)」を選択し、現在のアカウント全体のブロック設定を確認します。
- バケットレベルの設定確認: バケット一覧から対象のバケットを選択し、「アクセス許可 (Permissions)」タブを開きます。「パブリックアクセスをブロック (バケット設定)」セクションで、このバケット固有の設定を確認します。
- 設定の調整:
- もし、バケットポリシーで意図的にパブリックアクセスを許可する必要がある場合(例: 静的ウェブサイトホスティングなど)は、競合しているブロック設定(例: 「パブリックポリシーによる~アクセスをブロック」)を無効にする必要があります。アカウントレベルとバケットレベルの両方を確認し、必要に応じて編集(無効化)します。
- 意図せずパブリックアクセスを許可するポリシーを保存しようとしていた場合は、ブロック設定は変更せず、後述の「対処法3」に進んでポリシーの内容を見直してください。
▼ パブリックアクセスブロックの詳細はこちら
Amazon S3 ストレージへのパブリックアクセスのブロック
対処法3:バケットポリシーの内容を見直す
パブリックアクセスブロック設定が意図した通り有効になっている場合、エラーの原因はバケットポリシーの内容自体にある可能性が高いです。
- ポリシー内の
Principal
要素を確認し、意図せず"*"
(すべてのユーザー)や、特定のAWSアカウント全体など、広範な対象にアクセス許可を与えていないか確認します。 - ポリシーの
Condition
要素を使って、特定のIPアドレスからのみ許可するなど、アクセスをより厳密に制限できないか検討します。
意図しないパブリックアクセス許可を与えている箇所を修正し、再度ポリシーの保存を試みてください。
それでも解決しない場合は?
上記の対処法を試してもエラーが解決しない場合は、以下の点を試してみてください。
- ポリシー構文エラー: JSON形式のバケットポリシーの構文(括弧の閉じ忘れ、カンマの不足など)が間違っている可能性もあります。ポリシーエディタの構文チェック機能などを活用しましょう。
- AWS CloudTrailの確認: APIエラーの詳細なログがCloudTrailに残っている場合があります。エラー発生時のログを確認することで、より具体的な原因究明の手がかりが得られることがあります。
- AWSサポートへの問い合わせ: どうしても解決しない場合は、AWSサポートに問い合わせることも検討しましょう。
最後に
S3の「バケットポリシーの変更を保存できません」エラーは、主に ①IAM権限不足 または ②パブリックアクセスブロック設定との競合 が原因です。
エラーメッセージをよく読み、今回紹介した手順でIAM権限とブロック設定、そしてポリシーの内容自体を確認・修正すれば、多くの場合解決できるはずです。特にパブリックアクセスブロック設定の変更はセキュリティに直結するため、慎重に行ってください。
この記事が、S3バケットポリシー設定時のトラブルシューティングの一助となれば幸いです。
最後までお読みいただき、ありがとうございました。
コメント