Elastic Beanstalk用に作成されていたS3バケットを削除するのに少し手間取ったので、備忘録を残します。
はじめに
おはよう。@bioerrorlogです。
先日、Elastic BeanstalkのS3バケットが削除できないという状況に遭遇しました。 AdministratorAccess権限を持ったIAMユーザーでログインしているのに、"Access Denied"でS3バケットが削除できなかったのです(Fig. 1)。
この状況に対する解決策を書きます。
Elastic BeanstalkのS3バケットを削除する
原因: バケットポリシーで削除が拒否されている
バケットポリシーを確認すると、Delete操作が拒否されていました。
バケットポリシーは、S3バケットのコンソールから アクセス権限 > バケットポリシー で確認することができます(Fig. 2)。
以下、バケットポリシーの全文です。
("XXX" はアカウントidなどのマスクです)
{ "Version": "2008-10-17", "Statement": [ { "Sid": "eb-XXX", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::XXX:role/aws-elasticbeanstalk-ec2-role" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::elasticbeanstalk-us-east-2-XXX/resources/environments/logs/*" }, { "Sid": "eb-XXX", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::XXX:role/aws-elasticbeanstalk-ec2-role" }, "Action": [ "s3:ListBucket", "s3:ListBucketVersions", "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::elasticbeanstalk-us-east-2-XXX", "arn:aws:s3:::elasticbeanstalk-us-east-2-XXX/resources/environments/*" ] }, { "Sid": "eb-XXX", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "s3:DeleteBucket", "Resource": "arn:aws:s3:::elasticbeanstalk-us-east-2-XXX" } ] }
今回の件で重要なのは次の部分です。
{ "Sid": "eb-XXX", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "s3:DeleteBucket", "Resource": "arn:aws:s3:::elasticbeanstalk-us-east-2-XXX" }
いかなる者であっても:"Principal": "AWS": "*"
Elastic BeanstalkのS3バケットを:"Resource": "arn:aws:s3:::elasticbeanstalk-us-east-2-XXX"
削除することは:"Action": "s3:DeleteBucket"
許されない:"Effect": "Deny"
ということです。
このポリシーこそ、バケットの削除を拒んでいた原因です。
解決策: バケットポリシーを削除する
バケットポリシーが原因であることが分かったので、バケットポリシー自体を削除してしまえば解決します。
バケットポリシーを表示しているコンソール画面から"削除"を押し、バケットポリシーを削除します(Fig. 3)。
バケットポリシーを削除したのちにS3バケットを削除すると、エラーなくバケットを削除することができました(Fig. 4)。
おわりに
気づいてしまえば至極当然な原因でしたが、最初はAdmin権限をもってして何故削除できない... と少し驚きました。
次に同じ現象に遭遇したときは、焦らずに対処したいものです。
関連記事
AWS CLIのs3 cpとs3 syncの違いをまとめました。 www.bioerrorlog.work
S3バケットポリシーとIAMポリシーの関係を、同一アカウント・クロスアカウントそれぞれにおいて整理しました。
www.bioerrorlog.work
参考
Deleting the Elastic Beanstalk Amazon S3 bucket - AWS Document