概要
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を調べてみましょう!
コメント