0
0

aws sso-admin コマンドを用いて、特定のユーザグル-プに対する権限付与を自動化

Last updated at Posted at 2024-02-18

はじめに

本記事は、下記のリンクを参考に、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を確認する。

image.png

これで、必要な情報は全て手に入ったので、次項で実際に権限付与をしていきます。

(1)AWS権限付与

実際にAWS権限付与する際は、「許可対象のAWSアカウントのリスト」と「実行用のShell」を用意します。

許可対象のAWSアカウントのリスト

aws_account_list.txt
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コマンドがあることを発見し、うれしさから本記事を書かせていただきました。
本記事がどなたかのお役に立てれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0