タイトル通りです。
インラインポリシーが設定されているIAMグループをAWS CLIから削除しようとしたら削除できなかったので備忘で残します。
実施作業
準備
インラインポリシーを設定したIAMグループを作成します。
インラインポリシーは適当に設定しておきます。
IAMグループ削除(1回目)
以下のCLIコマンドで先ほど作成したグループを削除しようとしてみます。
$ aws iam delete-group --group-name TestGroup
以下のようなエラーが出力され、削除に失敗します。
$ aws iam delete-group --group-name TestGroup An error occurred (DeleteConflict) when calling the DeleteGroup operation: Cannot delete entity, must delete policies first.
「must delete policies first.」とあるのでポリシーを先に削除する必要があるようです。
ポリシーを削除するコマンド確認
以下のコマンドでポリシーを削除するコマンドを探します。
$ aws iam help
削除するコマンドは全部で23個あります。
delete-access-key delete-account-alias delete-account-password-policy delete-group delete-group-policy delete-instance-profile delete-login-profile delete-open-id-connect-provider delete-policy delete-policy-version delete-role delete-role-permissions-boundary delete-role-policy delete-saml-provider delete-server-certificate delete-service-linked-role delete-service-specific-credential delete-signing-certificate delete-ssh-public-key delete-user delete-user-permissions-boundary delete-user-policy delete-virtual-mfa-device
そのうちポリシーを削除できそうなのは以下の2つぐらいです。
それぞれ必須のオプションを確認します。
delete-group-policy delete-policy
- delete-policyのコマンドオプション
delete-policy --policy-arn <value> [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>] [--cli-auto-prompt <value>]
- delete-group-policyのコマンドオプション
delete-group-policy --group-name <value> --policy-name <value> [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>] [--cli-auto-prompt <value>]
delete-policyのほうはpolicyのarn値が必須となっているので、なんとなくdelete-group-policyコマンドであれば削除できそうです。(というか名前から明らか)
インラインポリシー削除
以下のコマンドを実行してインラインポリシーを削除してみます。
$ aws iam delete-group-policy --group-name TestGroup --policy-name policygen-TestGroup-202101081808
以下のコマンドを実行してIAMグループからインラインポリシーが削除されたことを確認します。
$ aws iam list-group-policies --group-name TestGroup { "PolicyNames": [] }
コンソールから確認してもインラインポリシーが削除されたことがわかります。
IAMグループ削除(2回目)
インラインポリシーが削除できたので、最初エラーで失敗したコマンドを再度実行してIAMグループを削除します。
$ aws iam delete-group --group-name TestGroup
削除したIAMグループが取得できないので正常に削除できているようです。
$ aws iam get-group --group-name TestGroup An error occurred (NoSuchEntity) when calling the GetGroup operation: The group with name TestGroup cannot be found.
感想及び所感
管理ポリシーは使うことはありますが、インラインポリシーを使用することは少ないので少しハマっていました。
管理ポリシーであれば削除ではなくてIAMグループからのデタッチで済みますが、インラインポリシーは特定のIAMリソースに直接設定されるので先にポリシーから削除する必要がある、という話でした。