Posted at

AWS Elastic Beanstalkが作ったS3バケットが削除できない場合の対策

More than 5 years have passed since last update.


きっかけ

Elastic BeanstalkDockerに対応したこともあって、Docker Hubからコンテナーを引っ張ってきて起動するのを試してみた。

思いのほか簡単にできたので、もっとDockerをうまくつかえるように勉強したいなー。と思いながらBeanstalkが作成したもろもろのコンポーネントをWebコンソールから削除・停止していたところ、S3のバケットを削除しようとすると、以下のエラーが表示されて削除できなくなっていた。


You don't have permissions to delete this bucket. You can check your bucket's permissions within bucket properties.


よくわからなかったがパーミッションも画面で確認できる上ではすべて持っている。

もしかしたら強制削除は画面からできないのかもと思い、AWS CLIを導入してaws s3 rb--forceオプションをつけて実行してみるも、今度は下記のようなエラーが起きる。


remove_bucket failed: s3:/// A client error (AccessDenied) occurred when calling the DeleteBucket operation: Access Denied


困った。性格的にもいらないものがそのまま放置されているのが許せない。

どうやってでも削除したい。だけどAWSは詳しくない。

そんな状況でしたが、どうにかバケットを削除することができました。


結論

以下のフォーラムを参考にバケットの設定を確認する。

Can't delete empty elasticbeanstalk created bucket

削除したいバケットのプロパティを表示し、Permissionsのedit bucket policyをクリックすると、JSONが表示される。

"Effect": "Deny"と記載されているところを探し、DenyAllowに書き換えて保存。

改めてバケットを削除すると正常に削除できた。


ちょっとだけ調べてみた

上記の手順で編集したのはBucket Policyというものらしい。

詳しくはおそらく下記のページを読む必要がありそう。

Managing Access Permissions to Your Amazon S3 Resources

Statementsと呼ばれる要素の中で、編集対象は以下のようになっていた。

{          

"Sid": "**-********-****-****-****-************",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:DeleteBucket",
"Resource": "arn:aws:s3:::<bucketname>"
}

ぱっと見ですが、以下のように読み解きました。

リソース<bucketname>DeleteBucketすることを*(すべてのユーザー)に対してDenyする

合っているかどうかわからないので、S3でつまずいたらまたBucket Policyについても勉強してみようと思います。

実際はAWS Policy Generatorを使うことになるのでしょうか。