プログラマでありたい

おっさんになっても、プログラマでありつづけたい

AdministratorAccess権限を持ったIAMユーザーでも閲覧できないS3バケットの消し方

 AWSのS3のマネジメントコンソールを見ていると、アクセスタイプで絞り込むことができることに気が付きます。絞り込みの条件として、「公開」や「オブジェクトは公開可能」など5種類あり、その中の一つに「エラー」というものがあります。今日は、このエラーというバケットが何者なのかというのと、それを無理やり消すための豆知識をお伝えします。

エラーが表示されるS3バケットは何者なのか?

 まずこのエラーと表示されるS3バケットが何者なのかという話からです。これは、S3のバケット一覧・詳細を表示しようとしているIAMユーザーもしくはIAMロールの権限とバケットポリシーの組み合わせで表示する権限がない場合に発生します。バケットポリシーも考慮するので、たとえ制限のないAdministratorAccessの権限を持っている利用者でも発生する場合があります。

 ちょっとイメージが付きにくいと思うので、具体的な例で紹介します。
手元にあった表示できないS3のバケットです。
f:id:dkfj:20201001001236p:plain


 バケットを選択の上で、概要を見ようにもAccessDenyになっています。
f:id:dkfj:20201001001345p:plain

 このバケットのバケットポリシーがどうなっているかを見てみましょう。
特定のVPCエンドポイント経由からのアクセス以外はすべて拒否するようにしています。

{
    "Version": "2012-10-17",
    "Id": "Policy1415115909152",
    "Statement": [
        {
            "Sid": "Access-to-specific-VPCE-only",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::tmp-test1234/*",
                "arn:aws:s3:::tmp-test1234"
            ],
            "Condition": {
                "StringNotEquals": {
                    "aws:sourceVpce": "vpce-xxxxxxxx"
                }
            }
        }
    ]
}

 極めて機密性が高いデータや個人情報を含むものについては、IAMのアクセス権のコントロールのみならずバケット側でも制御することは必須となります。その際の選択肢として、そのデータを活用するシステムが格納されている特定のVPCからのみ制御はよくあるんじゃないでしょうか。

 そして、ここからが本題です。こういった制御はVPCエンドポイントのID等を指定します。そのエンドポイントが消してしまったり、指定の仕方がを間違えた場合はどうなるのでしょうか?答えは、誰も見えない消せないバケットの誕生です。ということで、そうならないように気をつけましょう!!

AdministratorAccess権限を持ったユーザーでも消せないバケットの消し方

 気をつけましょうで終われれば、世の中システム障害や謝罪会見は発生しません。気をつけても現実には起こりうるので、その時の対処法です。AdministratorAccess権限を持ってしても消せないのは、バケットポリシーによって制限されているからです。解決策としては、そのバケットポリシーを消せばいいのです。ということで、AdministratorAccess権限を持ったIAMユーザーで、バケットポリシーを表示してみましょう。

f:id:dkfj:20201001002202p:plain

 はい。無慈悲にも何も表示されませんし、保存・削除ボタンも押せません。では、どうしたらいいのか?実は、ルートユーザーであれば、どんな状態でもバケットポリシーの編集だけは出来るのです。

f:id:dkfj:20201001002441p:plain

 ということで解決策としては、ルートユーザーでバケットポリシーを削除するです。なお、ルートユーザーでもバケットポリシー以外の部分はすべてAccess Denyのエラーがでて、表示することができません。

 その他の解決策としては、AWSのサポートに問い合わせてみるというのもあるかと思います。過去、どうやったのか忘れたのですが、どうやっても消せないバケットが出来たこともあったような気がします。その時にサポートに聞いた記憶があるので。(遠い昔の話で、全く覚えていないですが)

まとめ

 結論としては、シンプルです。AdministratorAccess権限を持ったIAMユーザーでも消せないS3バケットを作ってしまったら、ルートユーザーでバケットポリシーを消しましょう。ちゃんちゃん