AWS IAM Identity Center の各グループに所属するユーザー一覧を出力してみた

AWS IAM Identity Center の各グループに所属するユーザー一覧を出力してみた

Clock Icon2024.11.21

AWS IAM Identity Center において、グループに所属しているユーザー一覧を作成したく、簡単なスクリプトを作成する機会があったため紹介します。

グループに所属しているユーザー一覧を出力

AWS CloudShell 上で実行できる AWS CLI コマンドとシェルスクリプトにした場合に分けて記載します。

AWS CLI コマンド

AWS CloudShell ですぐに出力したい場合は次のコマンドです。

STORE_ID=$(aws sso-admin list-instances --query "Instances[0].IdentityStoreId" --output text --no-paginate)
aws identitystore list-groups --identity-store-id ${STORE_ID} --query Groups[].[GroupId] --output text \
| while read group_id; do
  group_name=$(aws identitystore describe-group --identity-store-id ${STORE_ID} --group-id ${group_id} --query DisplayName --output text)
  aws identitystore list-group-memberships --identity-store-id ${STORE_ID} --group-id ${group_id} --query GroupMemberships[].MemberId[].[UserId] --output text \
  | while read user_id; do
    user_name=$(aws identitystore describe-user --identity-store-id ${STORE_ID} --user-id ${user_id} --query UserName --output text)
    user_display_name=$(aws identitystore describe-user --identity-store-id ${STORE_ID} --user-id ${user_id} --query DisplayName --output text)
    echo "${group_name},${user_name},${user_display_name}"
  done
done

出力結果例です。出力結果は左から「グループ名」「ユーザー名」「表示名」となります。注意点として、ユーザーが所属していないグループは出力されません。

test,test-user,Test User
test,demo-user,Demo User
cm,cm-user,CM User
cm,test-user,Test User

シェルスクリプト

シェルスクリプトバージョンです。上記のコマンドをそのままコピーペーストしているのに加えて、csv 出力用にヘッダ行を出力するコマンドを入れています。csv として出力する場合はファイル名を指定してリダイレクトします。

#!/bin/bash

STORE_ID=$(aws sso-admin list-instances --query "Instances[0].IdentityStoreId" --output text --no-paginate)

echo "GroupDisplayName,UserName,UserDisplayName"

aws identitystore list-groups --identity-store-id ${STORE_ID} --query Groups[].[GroupId] --output text \
| while read group_id; do
  group_name=$(aws identitystore describe-group --identity-store-id ${STORE_ID} --group-id ${group_id} --query DisplayName --output text)
  aws identitystore list-group-memberships --identity-store-id ${STORE_ID} --group-id ${group_id} --query GroupMemberships[].MemberId[].[UserId] --output text \
  | while read user_id; do
    user_name=$(aws identitystore describe-user --identity-store-id ${STORE_ID} --user-id ${user_id} --query UserName --output text)
    user_display_name=$(aws identitystore describe-user --identity-store-id ${STORE_ID} --user-id ${user_id} --query DisplayName --output text)
    echo "${group_name},${user_name},${user_display_name}"
  done
done

csv ファイルにリダイレクトする実行例です。上記のシェルスクリプトに groups.sh という名前をつけています。

$ sh groups.sh > output.csv

出力結果例です。

GroupDisplayName,UserName,UserDisplayName
test,test-user,Test User
test,demo-user,Demo User
cm,cm-user,CM User
cm,test-user,Test User

コマンドの解説

コマンドの実行内容を簡単に記載します。

STORE_ID=$(aws sso-admin list-instances --query "Instances[0].IdentityStoreId" --output text --no-paginate)
aws identitystore list-groups --identity-store-id ${STORE_ID} --query Groups[].[GroupId] --output text \
| while read group_id; do
  group_name=$(aws identitystore describe-group --identity-store-id ${STORE_ID} --group-id ${group_id} --query DisplayName --output text)
  aws identitystore list-group-memberships --identity-store-id ${STORE_ID} --group-id ${group_id} --query GroupMemberships[].MemberId[].[UserId] --output text \
  | while read user_id; do
    user_name=$(aws identitystore describe-user --identity-store-id ${STORE_ID} --user-id ${user_id} --query UserName --output text)
    user_display_name=$(aws identitystore describe-user --identity-store-id ${STORE_ID} --user-id ${user_id} --query DisplayName --output text)
    echo "${group_name},${user_name},${user_display_name}"
  done
done

AWS IAM Identity Center の AWS CLI は、実行時にアイデンティティストア ID を指定しなければいけないコマンドが多いため、最初に sso-admin list-instances コマンドアイデンティティストア ID を取得します。

その後、list-groups コマンドでグループ一覧を取得して、while 文により処理します。グループ名を identitystore describe-group で取得し、各グループのユーザー一覧を identitystore list-group-memberships で取得しています。取得したユーザー一覧に対しては、while 文で追加の後続処理をします。その際に対象ユーザーがいない場合は while 文内の処理が実行されないため、グループに所属しているユーザーがいない場合は出力されません。

各ユーザーに対しては、identitystore describe-user コマンドでユーザー名と表示名を取得して出力します。identitystore list-group-memberships コマンドの出力結果はユーザー ID であるためです。このあたりはもっと簡略化する方法があるかもしれません。

各コマンドのリファレンスです。AWS CLIv2 のみ記載しています。

さいごに

AWS IAM Identity Center の棚卸しのためにグループに所属しているユーザー一覧を取得する機会あったため AWS CLI を用いて出力してみました。棚卸しの際は、アクセス許可セットがアタッチされているグループとユーザーを出力できる aws-sso-utils と併用すると作業を効率的に進められそうです。旧名の AWS SSO 時代のブログですが、aws-sso-utils のやってみたブログもあります。

https://dev.classmethod.jp/articles/output-a-list-of-aws-sso-access-permission/

以上、このブログがどなたかのご参考になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.