はじめに
AWSでちょっと検証と思い、手動でリソースを作成していたら、設定で勝手に作成されるIAMポリシーが大量に作成されてしまいました。
例: AWSLambdaBasicExecutionRole-xxx, AWSCodePipelineServiceRole-xxx, CodeBuildBasePolicy-xxx ...
IAMロールは選択式のチェックボックスがあるため、複数選択から削除が可能なのですが、IAMポリシーは選択式ではないため、手動で削除するのは大変です。
そのため、AWS CLIで一括削除する方法を調べてみました。
方法
動作確認はしましたが、意図していないポリシーを削除してしまう可能性があるため、各自検証の上、ご利用ください。
aws iam list-policies --query 'Policies[?starts_with(PolicyName, `XXX`)].Arn' --output text | tr '\t' '\n' | xargs -I{} aws iam delete-policy --policy-arn {}
※XXXの部分は、削除したいポリシー名のプレフィックスを指定してください。
※バージョンを作成しているポリシーは削除できません。
内容としては特定のプレフィックスで始まるIAMポリシーを一覧表示し、それらを削除するためのものです。aws iam list-policies
コマンドを使用して、条件に一致するポリシーのARNを取得し、tr
コマンドでタブ区切りを改行に変換し、その結果をxargs
コマンドに渡して、aws iam delete-policy
コマンドで各ポリシーを個別に削除します。
実行例
例えば、AWSCodePipelineServiceRole
で始まるポリシーを削除する場合:
aws iam list-policies --query 'Policies[?starts_with(PolicyName, `AWSCodePipelineServiceRole-`)].Arn' --output text | tr '\t' '\n' | xargs -I{} aws iam delete-policy --policy-arn {}
事前確認
削除前に対象のポリシーを確認したい場合は、以下のコマンドで一覧を表示できます:
aws iam list-policies --query 'Policies[?starts_with(PolicyName, `AWSCodePipelineServiceRole-`)].Arn' --output text | tr '\t' '\n'
おわりに
AWS CLIを使用することで、特定のプレフィックスで始まるIAMポリシーを一括で削除することができます。手動での削除作業が必要な場合に比べて、大幅な時間短縮が可能です。
ただし、削除対象のポリシーを慎重に確認し、意図しないポリシーを誤って削除しないよう注意が必要です。