1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

S3 のバケットポリシーの設定をミスりマネジメントコンソールから S3 の操作ができなくなった件

Last updated at Posted at 2025-10-31

目次

1.はじめに
2.構成図
3.マネジメントコンソールから S3 を操作できなくなった原因
4.対応策
5.まとめ

1.はじめに

「VPC上の特定のエンドポイントからのみS3バケットにアクセスさせたい」という要件は結構あると思います。
私はある案件で、S3のバケットポリシー上で上記のようなポリシーを作成した結果、マネジメントコンソールからS3操作ができなくなった経験がありますので、自分への戒めとしてブログに残します。

2.構成図

実際の案件で作成した構成はもっと複雑なものになりますが、分かりやすいように簡素化しております。
EC2(Amazon Linux) から VPC ゲートウェイエンドポイント経由で S3 へアクセスする構成です。

{9DABC06E-5F69-4B55-8048-0F43218CC262}.png

3.マネジメントコンソールから S3 を操作できなくなった原因

S3 バケットで以下のようなバケットポリシーを設定しました。
(VPC エンドポイントを経由しない場合は、すべての操作を拒否するバケットポリシーです。)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyAccessIfNotFromSpecificVPCE",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::<S3バケット名>",
                "arn:aws:s3:::<S3バケット名>/*"
            ],
            "Condition": {
                "StringNotEquals": {
                    "aws:sourceVpce": "<VPCエンドポイントのID>"
                }
            }
        }
    ]
}

結果、「オブジェクトを一覧表示するアクセス許可が不十分です」というメッセージが表示されるようになり、S3 の設定値の確認や変更ができなくなりました。

{8737F60B-1BD0-4D72-82D1-FA4F9C5AA2AE}.png

4.対応策

VPC エンドポイント経由であれば、S3 に対しての Put 権限があるため、バケットポリシーを記載した json ファイルを S3 にアップロードすることを考えました。

① 以下のコマンドを実行し、vi エディタを開きます。

vi Bucket-Policy.json

② vi エディタが開くので、以下のバケットポリシーを記述して保存します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowAllS3ActionsOnSpecificBucket",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                    "arn:aws:s3:::<S3バケット名>",
                "arn:aws:s3:::<S3バケット名>/*"
            ]
        }
    ]
}

③ 以下のコマンドを実行し、バケットポリシーを記載した json ファイルを S3 にアップロードします。

aws s3api put-bucket-policy --bucket <your-bucket-name> --policy file://Bucket-Policy.json

⇒ 結果、バケットポリシーを設定する権限がないと言われました。

An error occurred (AccessDenied) when calling the PutBucketPolicy operation: User: arn:aws:sts::<Account ID>:assumed-role/PutS3Role/<インスタンス ID> is not authorized to perform: s3:PutBucketPolicy on resource: "arn:aws:s3:::<S3バケット名>" because no identity-based policy allows the s3:PutBucketPolicy action

⇒ そのため、EC2 にアタッチしている IAM ロールに対して一時的に AdministratorAccess ポリシーを追加します。

リトライ(1回目)

① 再度以下のコマンドを実行し、バケットポリシーを記載した json ファイルを S3 にアップロードします。

aws s3api put-bucket-policy --bucket <your-bucket-name> --policy file://Bucket-Policy.json

⇒ 結果、パブリックアクセスと思われ拒否された模様。

An error occurred (AccessDenied) when calling the PutBucketPolicy operation: User: arn:aws:sts::<Account ID>:assumed-role/PutS3Role/<インスタンス ID> is no
t authorized to perform: s3:PutBucketPolicy on resource: "arn:aws:s3:::<S3バケット名>" because public policies are blocked by the BlockPublicPolicy block publ
ic access setting.

⇒ なので、パブリックアクセスブロックを無効化してみます。

② 以下のコマンドを実行し、vi エディタを開きます。

vi Public-Access.json

③ vi エディタが開くので、以下の設定を記述して保存します。

{
    "BlockPublicAcls": true,
    "IgnorePublicAcls": true,
    "BlockPublicPolicy": false,
    "RestrictPublicBuckets": true
}

④ 以下のコマンドを実行し、パブリックアクセスブロックを無効にします。

aws s3api put-public-access-block \
    --bucket <S3バケット名> \
    --public-access-block-configuration file://Public-Access.json

リトライ(2回目)

① 再度以下のコマンドを実行し、バケットポリシーを記載した json ファイルを S3 にアップロードします。

aws s3api put-bucket-policy --bucket <your-bucket-name> --policy file://Bucket-Policy.json

⇒ 今回はエラーなし!

② マネジメントコンソールに戻り、リロードしてみると「オブジェクトを一覧表示するアクセス許可が不十分です」というメッセージが表示されなくなりました。(よかった)

{4582BCE2-8569-4AB2-95CA-AF6B7CFE7637}.png

5.まとめ

今回はバケットポリシーの設定ミスによって、マネジメントコンソールから S3 の操作が行えなくなった際の対処方法を記載しました。
私の場合は、エンドポイント経由での S3 操作権限があったので何とかなりましたが、そうでない場合はルートユーザーを利用するなどして対応する必要があるかと思います。

バケットポリシーを設定する際は気を付けましょう。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?