S3バケットアクセスがエラーになったときの対処

こんにちは、久住です。

先日S3バケットポリシーを色々といじっていたのですが、意外なところで詰まったので残しておきます。

ということで今日は、S3バケットのアクセスエラーが起こったときの対処について紹介します。

はじめに

S3バケットのアクセス制御はIAMポリシー、バケットポリシー、S3ACL等で実施可能です。

S3のアクセスコントロールが多すぎて訳が解らないので整理してみる

その中でS3バケットポリシーでの制御がシンプルかつ柔軟なのでよく利用するのですが、色々いじりまくっていたらエラーとなって編集どころかバケット自体の削除もできなくなってしまいました

対処方法は下記URLにある通り、AWSアカウントのrootユーザーでログインしてバケットポリシーを削除する必要があるようです。

https://aws.amazon.com/jp/premiumsupport/knowledge-center/s3-access-denied-bucket-policy/

IAM ID がバケットポリシーを表示または変更できない場合、AWS アカウントの root ユーザー には既存のバケットポリシーを削除するアクセス許可があります。既存のポリシーが root ユーザーによって削除された後、IAM ユーザーまたはロールは新しいバケットポリシーを作成できます。

やってみた(再現)

S3バケットポリシー設定

S3バケットを作成した後、バケットポリシー未設定の状態では問題なくアクセスできます。また、パブリックアクセスを無効にしているのでアクセスの欄にはバケットとアクセスは非公開と表示されています。

この状態でS3バケットポリシーに下記のすべてのS3アクセスを拒否するポリシーを設定してみます。

{
"Id": "test-policy",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1565680125792",
"Action": "s3:*",
"Effect": "Deny",
"Resource": "arn:aws:s3:::kusumicorp-test",
"Principal": "*"
}
]
}

アクセス確認

バケットポリシー設定後、Admin権限を付与されたIAMユーザからのアクセスに関しても、バケットの参照も削除もできなくなります。

S3バケットの画面から確認するとアクセスの欄がエラーとなっています。

IAMからはどうしようもない

IAMユーザ権限からバケットの削除をしようとしてみます。

バケットを削除するという画面は出てきますが、確認画面が押せません。

はい、詰みました。

rootアカウントからバケットポリシー削除

同一のAWSアカウントにrootアカウントでログインし直してみます。

すると先程はバケットポリシーも参照できなかったのですが、バケットポリシーが確認できるようになりました。

バケットポリシーを削除してみると問題なく削除することができました。

アクセス確認

バケットにテストファイルをアップロードして問題なくアクセスできることを確認してみます。

IAMユーザでもアップロードできるようになりました。

最後に

ケースとしてはレアですが、バケットポリシー設定を誤ってしまったときの対処法として、知ってよかったです。

ただし、AWSのアカウント利用におけるベストプラクティスではrootアカウントは極力利用しないとなっておりますので、そもそもこのようなことが起きないようにすることがベストですね。

また、バケットポリシーの設定誤りで情報漏えい等多大な損失を被ることもあるので、十分検証の上設定することをおすすめします。

参考

https://aws.amazon.com/jp/premiumsupport/knowledge-center/s3-access-denied-bucket-policy/