IAMユーザーの直接アタッチしたポリシーをAWS CLIからデタッチする方法

目次

概要

IAMユーザーに「直接」と「グループ」の両方で同じポリシーをアタッチしているユーザーがおり、直接アタッチのポリシーのみをデタッチしたい。

なぜ「直接」アタッチポリシーのみデタッチしたいのか

既存プロジェクトでIAMユーザーの見直しを行いました。

AWSのベストプラクティスに則り、「IAMユーザーへポリシーを直接アタッチしない」という対応を行いたかったのですが、コンソールからの作業だとどうしても一時的にポリシーがなくなってしまう時間ができてしまうことがわかりました(理由は後述します)

高頻度でアクセスキーを使用しているIAMユーザーがおり、本来あるべきポリシーが1秒でも外れてしまうことを避けたかったため、直接アタッチのポリシーのみをデタッチする方法を調べました。

IAM でのセキュリティのベストプラクティス – AWS Identity and Access Management

こんな人に役立つ

  • IAMユーザーにアタッチしたポリシーをCLIから変更したい人
  • IAMユーザーにポリシーを直接・グループ両方でアタッチしており、直接アタッチしたポリシーのみ削除したい人

AWSコンソールからのポリシーデタッチの挙動

IAMユーザーの許可ポリシーからAmazonECS_FullAccess のポリシーを確認すると、「次を経由してアタッチ」の項目に「直接」「グループ」の両方が表示されています。
これは「直接アタッチ」と「グループアタッチ経由」の両方でAmazonECS_FullAccess がセットされていることになります。

こちらの「直接」のみ削除したいと思います。

試しに、コンソールから削除を行ってみましょう。
今回はAmazonECS_FullAccess を削除したいので、対象にチェックを入れて削除ボタンを押します。

すると、IAMグループまで削除しようとしてきます。

このまま削除を進めると実際にグループからもデタッチされるため、グループに紐づく他のポリシーもユーザーからデタッチされることになります。

ということで解決方法を次で紹介します。

AWS CLIからIAMユーザーにアタッチされているポリシーを確認してみる

AWS CLIのlist-attached-user-policies を使って、IAMユーザーに直接アタッチしているポリシー一覧を見てみます。AmazonECS_FullAccess が付与されていることがわかりますね。

 $ aws iam list-attached-user-policies --user-name  {IAM ユーザー名}
 
 {
    "AttachedPolicies": [
        {
            "PolicyName": "AmazonECS_FullAccess",
            "PolicyArn": "arn:aws:iam::aws:policy/AmazonECS_FullAccess"
        }
    ]
}

次は list-groups-for-user を使ってIAMユーザーにアタッチしているグループ一覧を見てみます。
直接アタッチされているポリシーとは別で管理されていますね。

今回は省略していますが、「Test-engineer」グループにもAmazonECS_FullAccess がアタッチされているため、「直接」「グループ」の両方が表示されている状態になっているというわけです。

$ aws iam list-groups-for-user --user-name {IAM ユーザー名}
{
    "Groups": [
        {
            "Path": "/",
            "GroupName": "Test-engineer",
            "GroupId": "xxxxxx",
            "Arn": "arn:aws:iam::xxxxxx:group/Test-engineer",
            "CreateDate": "YYYY-MM-DDTHH:MM:SS+00:00"
        }
    ]
}

直接アタッチのポリシーのみをデタッチしたい

CLIからポリシーをデタッチしてみます。detach-user-policy コマンドを使います。

aws iam detach-user-policy 
--user-name { IAM ユーザー名}
--policy-arn {削除したいPolicyArn}

今回だと AmazonECS_FullAccess を削除したいので、list-attached-user-policies で取得できたPolicyArn部分をセットします

aws iam detach-user-policy 
--user-name { IAM ユーザー名}
--policy-arn arn:aws:iam::aws:policy/AmazonECS_FullAccess

もう一度直接アタッチされているポリシーを確認してみると、なくなっていますね。

$  aws iam list-attached-user-policies --user-name {IAM ユーザー名}
{
    "AttachedPolicies": []
}

念の為グループ側も確認してみますが、きちんと残っています。

$ aws iam list-groups-for-user --user-name {IAM ユーザー名}
{
    "Groups": [
        {
            "Path": "/",
            "GroupName": "Test-engineer",
            "GroupId": "xxxxxx",
            "Arn": "arn:aws:iam::xxxxxx:group/Test-engineer",
            "CreateDate": "YYYY-MM-DDTHH:MM:SS+00:00"
        }
    ]
}

コンソールでも確認してみると、「直接」が消えて、「グループ」のみになっています。これで想定している状態になりました。

まとめ

今回はIAMユーザーに直接アタッチされているポリシーをCLIからデタッチする方法を紹介しました。
AWS CLIはコンソールに比べてできることが多いので、困ったときはAWS CLIを調べてみましょう!

役に立ったらシェアしていただけると嬉しいです
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次