カピバラ好きなエンジニアブログ

興味ある技術とか検証した内容を赴くままに書いていきます。カピバラの可愛さこそ至高。

インラインポリシーが設定されているIAMグループをAWS CLIで削除する

タイトル通りです。
インラインポリシーが設定されているIAMグループをAWS CLIから削除しようとしたら削除できなかったので備忘で残します。

実施作業

準備

インラインポリシーを設定したIAMグループを作成します。
f:id:live-your-life-dd18:20210108181409p:plain


インラインポリシーは適当に設定しておきます。
f:id:live-your-life-dd18:20210108181442p:plain

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": []
}



コンソールから確認してもインラインポリシーが削除されたことがわかります。
f:id:live-your-life-dd18:20210108182949p:plain

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リソースに直接設定されるので先にポリシーから削除する必要がある、という話でした。