s3バケットを削除しようとしたとき、Access Denied エラーが発生するケースがたまに起こります。RootユーザーでAWSにログインしても一旦Access Denied エラーが発生してしまうと、バケットを削除することはできません。AWSのウェブにもわかりにくいのですが問題解決の方法が書いてあります。

ListObjectsエラーの解決方法

要点だけまとめて簡単に説明だけしておきますと、問題の原因はバケットへのアクセス権がないことです。その為、この問題を解決する方法は、「IAM ポリシー」と「バケットポリシー」の両方にそれぞれ異なるポリシー(アクセス権限)を付与することです。

手順1. IAMからポリシーを追加する

IAMの画面左にあるポリシーをクリックし、画面上部にあるポリシーの作成ボタンをクリックします。上の画像ではボタンが切れてしまっていますが、青いボタンです。

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

10行目の::bucket-name” 太文字の部分をエラーを出力しているバケット名に変更してください。

手順2. s3バケットにポリシーを追加する

次に、「s3:ListBucket」へのアクセスを許可するポリシーをエラーの出ているs3バケットに追加します。s3バケットを開き、「アクセス権限」タグをクリックします。

次にバケットポリシーをクリックし、バケットポリシーエディタから下に記載しておくポリシーをペーストし、保存ボタンをクリックすれば、完了です。

{
“Version”: “2012-10-17”,
“Id”: “Policy1546414473940”,
“Statement”: [
{
“Sid”: “Stmt1546414471931”,
“Effect”: “Allow”,
“Principal”: {
“AWS”: “arn:aws:iam::856919177685:user/UserName”
},
“Action”: “s3:ListBucket”,
“Resource”: “arn:aws:s3:::Bucket-Name”
}
]
}

9行目の UserName 、12行目のBucket-Name をバケットの削除を行うユーザー名と削除予定のバケット名に変更してください。

以上の作業が完了すると、s3バケットの中身を空にすることができるようになり、中身を空にしたバケットを削除することができるようになります。

AWSに記載のあるマニュアルがわかりにくいという声が以前あがっていたことを思いだしたので、今回この記事を書くことにしました。使わないがエラーで削除できないバケットがあるとあまり良い気持ちになれませんので、今回ご紹介した方法で綺麗さっぱり削除しちゃってください。

お疲れ様でした。