はじめに
本記事は、下記のリンクを参考に、SSO認証を用いたAWS権限付与の自動化をまとめたものである。
前提条件
- 本記事は、Azureを用いたSSO認証を設定している環境で、AWS権限付与をまとめたものであり、権限付与対象に関しては、ユーザグループ単位とする。※ユーザ単位の場合、コマンドが違くなるので、注意が必要。
- shellscript の実行環境は、AWS CloudShell とする。
権限付与
(0)概要説明
今回の実施する内容としては、「Azure側で割り当て済みのユーザグループ」に対して、「特定のAWSアカウント」に「特定の許可セット」を付与する内容である。
今回は、aws sso-adminコマンドを実施し、権限付与をする内容であり、実際のコマンドとしては、下記となります。
aws sso-admin create-account-assignment \
--instance-arn xxxxxxxxxxxxx \
--target-id xxxxxxxxxxxxx \
--target-type AWS_ACCOUNT \
--permission-set-arn xxxxxxxxxxxxx \
--principal-type GROUP \
--principal-id xxxxxxxxxxxxx
上記CLIコマンドで実行する際、事前に「instance-arn」「target-id(AWSアカウントNoである12桁の数字)」「permission-set-arn(許可セットのarn)」「principal-id(グループID)」を確認する必要がある。
下記コマンドを実施することで、「instance-arn」と「principal-id(グループID)」は確認することができます。
#Store IdentityStoreId in variable
IDSTORE_ID=$(aws sso-admin list-instances | jq -r '.Instances[].IdentityStoreId')
#Store InstanceArn in variable
INSTANCE_ARN=$(aws sso-admin list-instances | jq -r '.Instances[].InstanceArn')
#Store group name in variable
GROUP=GroupName
#Store group id in variable
GROUP_ID=$(aws identitystore list-groups --identity-store-id $IDSTORE_ID --filters AttributePath=DisplayName,AttributeValue=$GROUP | jq -r '.Groups[].GroupId')
「permission-set-arn(許可セットのarn)」の確認は、コンソールで確認となります。
IAM Identity Center にアクセスし、下記の赤枠で囲っている許可セットにアクセスし、対象の許可セットのarnを確認する。
これで、必要な情報は全て手に入ったので、次項で実際に権限付与をしていきます。
(1)AWS権限付与
実際にAWS権限付与する際は、「許可対象のAWSアカウントのリスト」と「実行用のShell」を用意します。
許可対象のAWSアカウントのリスト
111111111111
222222222222
333333333333
444444444444
実行用のShell
#!/bin/bash
#Variable definition
#Store IdentityStoreId in variable
IDSTORE_ID=$(aws sso-admin list-instances | jq -r '.Instances[].IdentityStoreId')
#Store InstanceArn in variable
INSTANCE_ARN=$(aws sso-admin list-instances | jq -r '.Instances[].InstanceArn')
#Store group name in variable
GROUP=GroupName
#Store group id in variable
GROUP_ID=$(aws identitystore list-groups --identity-store-id $IDSTORE_ID --filters AttributePath=DisplayName,AttributeValue=$GROUP | jq -r '.Groups[].GroupId')
#Store AWS AccountNo in variable
AWS_ACCOUNT=aws_account_list.txt
#Store in PermissionSet variable
#ReadOnlyAccess
PERMISSION_SETS_ARN1=arn:aws:sso:::permissionSet/ssoins-xxxxxxxxxxxxxxxx/ps-1111111111111111
#AdministratorAccess
PERMISSION_SETS_ARN1=arn:aws:sso:::permissionSet/ssoins-xxxxxxxxxxxxxxxx/ps-2222222222222222
#Grant Privileges
cat $AWS_ACCOUNT | while read LINE
do
AWS_CODE=$(echo $LINE)
#ReadOnlyAccess
aws sso-admin create-account-assignment --instance-arn $INSTANCE_ARN --target-id ${AWS_CODE} --target-type AWS_ACCOUNT --permission-set-arn $PERMISSION_SETS_ARN1 --principal-type GROUP --principal-id $GROUP_ID
#AdministratorAccess
aws sso-admin create-account-assignment --instance-arn $INSTANCE_ARN --target-id ${AWS_CODE} --target-type AWS_ACCOUNT --permission-set-arn $PERMISSION_SETS_ARN2 --principal-type GROUP --principal-id $GROUP_ID
done
上記のシェルを実行することで、複数のAWSアカウントに対して、同一の権限付与をすることができる内容となります。
「while read 変数名」で、リストの数だけ処理を繰り返す内容です。※下記記事を参考。
備考
Windows で作成したShellをAWS CloudShellで実行すると改行コードが違うため、スクリプトが失敗してしまいます。
そんな時は、sedコマンドにて、対象のファイルの改行コードを変更してから、実行しましょう。
sed -i -e 's/\r//g' "FileName"
最後に
私の環境では、AWS権限付与は特定のユーザグループ単位に付与する運用を行っているが、「案件スタートタイミング」や「チームの改変時」には依頼が立て続けにきてしまい、てんやわんやしてしまってました。
そんな時に、CLIコマンドがあることを発見し、うれしさから本記事を書かせていただきました。
本記事がどなたかのお役に立てれば幸いです。