IAM Identity Center の ユーザー・グループ操作を楽にすべく、 AWS CLI のエイリアスを作ってみました。
以降で作ったエイリアスと使用例を紹介します。
なお、以降はIAM Identity Center の独自IDストアを使っている前提で進めます。
前提: そもそも AWS CLIのエイリアスとは
エイリアスを使うことでコマンドやスクリプトのショートカットを作成できます。 頻繁に使うコマンドがある場合に役立ちます。
設定ファイル ~/.aws/cli/alias
を編集することで適用できます。
例えば以下のような alias ファイルを作成すると、 aws whoami
コマンドが使えるようになります。
~/.aws/cli/alias
[toplevel]
whoami = sts get-caller-identity
$ aws whoami
{
"UserId": "AROAEXAMPLE:cm-kawahara.masahiro",
"Account": "111111111111",
"Arn": "arn:aws:sts::111111111111:assumed-role/cm-kawahara.masahiro/cm-kawahara.masahiro"
}
詳細は以下ドキュメントを御覧ください。
作成したエイリアス
以下のようなエイリアスを作成しました。 ( Gist に同じものを上げています )
~/.aws/cli/alias
[toplevel]
whoami = sts get-caller-identity
### IAM Identity Center(SSO)
sso-store-id = sso-admin list-instances \
--query "Instances[0].IdentityStoreId" --output text --no-paginate
sso-user-id =
!f() {
store_id="$1"
user_email="$2"
aws identitystore get-user-id --output text \
--identity-store-id "$store_id" \
--alternate-identifier "{\"UniqueAttribute\":{\"AttributePath\":\"emails.value\",\"AttributeValue\":\"${user_email}\"}}" \
--query "UserId"
};f
sso-group-id =
!f() {
store_id="$1"
group_name="$2"
aws identitystore get-group-id --output text \
--identity-store-id "$store_id" \
--alternate-identifier "{\"UniqueAttribute\":{\"AttributePath\":\"displayName\",\"AttributeValue\":\"${group_name}\"}}" \
--query "GroupId"
};f
sso-create-membership =
!f () {
store_id="$1"
group_name="$2"
user_email="$3"
group_id=$(aws sso-group-id "$store_id" "$group_name")
user_id=$(aws sso-user-id "$store_id" "$user_email")
if [ "$group_id" != "" ] && [ "$user_id" != "" ]; then
aws identitystore create-group-membership \
--identity-store-id "$store_id" \
--group-id "$group_id" \
--member-id UserId="$user_id"
fi
};f
sso-membership =
!f () {
store_id="$1"
group_name="$2"
user_email="$3"
group_id=$(aws sso-group-id "$store_id" "$group_name")
user_id=$(aws sso-user-id "$store_id" "$user_email")
if [ "$group_id" != "" ] && [ "$user_id" != "" ]; then
aws identitystore get-group-membership-id --output text \
--identity-store-id "$store_id" \
--group-id "$group_id" \
--member-id UserId="$user_id" \
--query "MembershipId"
fi
};f
sso-delete-membership =
!f () {
store_id="$1"
group_name="$2"
user_email="$3"
membership_id=$(aws sso-membership "$store_id" "$group_name" "$user_email")
if [ "$membership_id" != "" ];then
aws identitystore delete-group-membership \
--identity-store-id "$store_id" \
--membership-id "$membership_id"
fi
};f
以降で作ったコマンドと使用例を紹介します。
sso-store-id
(Identity Store ID を取得)
sso-store-id = sso-admin list-instances \
--query "Instances[0].IdentityStoreId" --output text --no-paginate
ユーザー・グループ周りの操作は、ほぼほぼ Identity Store ID がパラメータに必要になってきます。それを簡単に取得します。
▼ 使用例
$ aws sso-store-id
d-example
sso-user-id
(メールアドレスからユーザーIDを取得)
sso-user-id =
!f() {
store_id="$1"
user_email="$2"
aws identitystore get-user-id --output text \
--identity-store-id "$store_id" \
--alternate-identifier "{\"UniqueAttribute\":{\"AttributePath\":\"emails.value\",\"AttributeValue\":\"${user_email}\"}}" \
--query "UserId"
};f
メールアドレスからユーザーIDを取得します。
▼ 使用例
$ aws sso-user-id $(aws sso-store-id) tanaka.taro@example.com
8774example-1111-2222-3333-444444444
sso-group-id
(グループ表示名からグループIDを取得)
sso-group-id =
!f() {
store_id="$1"
group_name="$2"
aws identitystore get-group-id --output text \
--identity-store-id "$store_id" \
--alternate-identifier "{\"UniqueAttribute\":{\"AttributePath\":\"displayName\",\"AttributeValue\":\"${group_name}\"}}" \
--query "GroupId"
};f
グループ表示名からグループIDを取得します。
▼ 使用例
$ aws sso-group-id $(aws sso-store-id) ExampleGroup
0754daf8-1111-2222-f66a-afdexample
sso-membership
(ユーザーのグループ所属IDを取得)
sso-membership =
!f () {
store_id="$1"
group_name="$2"
user_email="$3"
group_id=$(aws sso-group-id "$store_id" "$group_name")
user_id=$(aws sso-user-id "$store_id" "$user_email")
if [ "$group_id" != "" ] && [ "$user_id" != "" ]; then
aws identitystore get-group-membership-id --output text \
--identity-store-id "$store_id" \
--group-id "$group_id" \
--member-id UserId="$user_id" \
--query "MembershipId"
fi
};f
ユーザーがグループに所属している場合の、所属ID(membership id) を取得します。 所属IDはグループからの所属解除などのコマンドのパラメータとして必要になってきます。
前提として sso-user-id
と sso-group-id
が必要です。
▼ 使用例
$ aws sso-membership $(aws sso-store-id) ExampleGroup tanaka.taro@example.com
b704cab8-1111-2222-ec1b-2286example
sso-create-membership
(ユーザーをグループに所属させる)
sso-create-membership =
!f () {
store_id="$1"
group_name="$2"
user_email="$3"
group_id=$(aws sso-group-id "$store_id" "$group_name")
user_id=$(aws sso-user-id "$store_id" "$user_email")
if [ "$group_id" != "" ] && [ "$user_id" != "" ]; then
aws identitystore create-group-membership \
--identity-store-id "$store_id" \
--group-id "$group_id" \
--member-id UserId="$user_id"
fi
};f
ユーザーをグループに所属させます。
前提として sso-user-id
と sso-group-id
が必要です。
▼ 使用例
$ aws sso-create-membership $(aws sso-store-id) ExampleGroup tanaka.taro@example.com
IdentityStoreId: d-example
MembershipId: b754aa18-1111-2222-e421-9c65example
sso-delete-membership
(ユーザーをグループから脱退させる)
sso-delete-membership =
!f () {
store_id="$1"
group_name="$2"
user_email="$3"
membership_id=$(aws sso-membership "$store_id" "$group_name" "$user_email")
if [ "$membership_id" != "" ];then
aws identitystore delete-group-membership \
--identity-store-id "$store_id" \
--membership-id "$membership_id"
fi
};f
ユーザーをグループから脱退させます。
前提として sso-membership
が必要です。
▼ 使用例
$ aws sso-delete-membership $(aws sso-store-id) ExampleGroup tanaka.taro@example.com
# 脱退させたので以下コマンドはエラーになる
$ aws sso-membership $(aws sso-store-id) ExampleGroup tanaka.taro@example.com
An error occurred (ResourceNotFoundException) when calling the GetGroupMembershipId operation: Group membership not found for given Pool/Group/Member.
おわりに
以上、AWS CLIのエイリアスを使って IAM Identity Center 周りのショートカットを作ってみました。
参考になれば幸いです。