こんにちは。AWS CLIが好きな福島です。
今回は、AWS SSO関連の情報を取得するコマンドをご紹介いたします。
前回のブログで次回は、IAM権限について、ご紹介すると記載したのですが、 ちょっと寄り道をして、AWS SSO関連の情報取得を先にご紹介いたします。
- AWS SSOのインスタンスARNの確認
- アクセス権限セットの確認
- アクセス権限セットの基本情報
- アクセス権限セットに紐づくマネージドポリシー
- アクセス権限セットのインラインポリシー
- アクセス権限セットが紐づいているアカウント一覧
- アカウントに紐づくアクセス権限セット
- 全アカウントに紐づくアクセス権限セットの表示1
- 全アカウントに紐づくアクセス権限セットの表示2
- 全アクセス権限セットの詳細
- おわりに
先に記載しておくと、
- 全アカウントに紐づくアクセス権限セットの表示
- 全アクセス権限セットの詳細
が一番使えると思います。
AWS SSOのインスタンスARNの確認
インスタンスのARNは、今後紹介するコマンドで結構使います。
コマンド
aws sso-admin list-instances
- 実行結果
{ "Instances": [ { "InstanceArn": "arn:aws:sso:::instance/ssoins-7758faff83b26bbb", "IdentityStoreId": "d-9567180725" } ] }
アクセス権限セットの確認
インスタンスのARNを利用しますが、コマンドで自動で取得するようにしてますので、コピペでOKです。
コマンド
aws sso-admin list-permission-sets \ --instance-arn $(aws sso-admin list-instances --query "Instances[].InstanceArn" --output text)
- 実行結果
{ "PermissionSets": [ "arn:aws:sso:::permissionSet/ssoins-7758faff83b26bbb/ps-82a2d3c9ca6398a4", "arn:aws:sso:::permissionSet/ssoins-7758faff83b26bbb/ps-82c9d5e2c3d089ec" ] }
アクセス権限セットの基本情報
コマンド
PERMISSION="" ★PermissionSetsのArnを入力します。 aws sso-admin describe-permission-set \ --instance-arn $(aws sso-admin list-instances --query "Instances[].InstanceArn" --output text) \ --permission-set-arn ${PERMISSION}
- 実行結果
{ "PermissionSet": { "Name": "AdministratorAccess", "PermissionSetArn": "arn:aws:sso:::permissionSet/ssoins-7758faff83b26bbb/ps-82a2d3c9ca6398a4", "CreatedDate": "2020-10-09T09:53:33.521000+09:00", "SessionDuration": "PT1H" } }
アクセス権限セットに紐づくマネージドポリシー
コマンド
PERMISSION="" ★PermissionSetsのArnを入力します。 aws sso-admin list-managed-policies-in-permission-set \ --instance-arn $(aws sso-admin list-instances --query "Instances[].InstanceArn" --output text) \ --permission-set-arn ${PERMISSION}
- 実行結果
{ "AttachedManagedPolicies": [ { "Name": "AdministratorAccess", "Arn": "arn:aws:iam::aws:policy/AdministratorAccess" } ] }
アクセス権限セットのインラインポリシー
コマンド
PERMISSION="" ★PermissionSetsのArnを入力します。 aws sso-admin get-inline-policy-for-permission-set \ --instance-arn $(aws sso-admin list-instances --query "Instances[].InstanceArn" --output text) \ --permission-set-arn ${PERMISSION}
- 実行結果
{ "InlinePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Action\":\"*\",\"Resource\":\"*\"}]}" }
インラインポリシーの表示が改行がされていないため、少し分かりづらいですね。 ということで改行いれて、少し分かりやすくしてみました。
コマンド(ちょっと分かりやすく)
PERMISSION="" ★PermissionSetsのArnを入力します。 aws sso-admin get-inline-policy-for-permission-set \ --instance-arn $(aws sso-admin list-instances --query "Instances[].InstanceArn" --output text) \ --permission-set-arn ${PERMISSION} \ --output text | sed -e 's/,/,\n/g' -e 's/{/\n{\n/g' -e 's/\[/\n\[/g' -e 's/\}/\n\}/g' -e 's/\]/\n\]/g' | sed '1d'
- 実行結果
{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"*", "Resource":"*" } ] }
アクセス権限セットが紐づいているアカウント一覧
コマンド
PERMISSION="" ★PermissionSetsのArnを入力します。 aws sso-admin list-accounts-for-provisioned-permission-set \ --instance-arn $(aws sso-admin list-instances --query "Instances[].InstanceArn" --output text) \ --permission-set-arn ${PERMISSION}
- 実行結果
{ "AccountIds": [ "xxxxxxxxxxxx", "xxxxxxxxxxxx", "xxxxxxxxxxxx" ] }
アカウントに紐づくアクセス権限セット
コマンド
ACCOUNTID="" ★アカウントIDを入力します。 aws sso-admin list-permission-sets-provisioned-to-account \ --instance-arn $(aws sso-admin list-instances --query "Instances[].InstanceArn" --output text) \ --account-id ${ACCOUNTID}
- 実行結果
{ "PermissionSets": [ "arn:aws:sso:::permissionSet/ssoins-7758faff83b26bbb/ps-82a2d3c9ca6398a4" ] }
全アカウントに紐づくアクセス権限セットの表示1
※アカウント情報は、organizationsコマンドで取得しています。
アカウント数分、コマンドを実行するため、結構時間がかかります。
コマンド
INSTNACE_ARN=$(aws sso-admin list-instances --query "Instances[].InstanceArn" --output text);\ aws organizations list-accounts --query "Accounts[].Id" --output text | tr "\t" "\n" | sort | while read line do echo ${line} > /tmp/awscli.tmp for permission in $(aws sso-admin list-permission-sets-provisioned-to-account --instance-arn ${INSTNACE_ARN} --account-id ${line} --query "PermissionSets" --output text) do if [[ ${permission} == None ]] ; then echo "アクセス権限セットなし" >> /tmp/awscli.tmp else aws sso-admin describe-permission-set \ --instance-arn ${INSTNACE_ARN} \ --permission-set-arn ${permission} \ --query "PermissionSet.[Name]" --output text >> /tmp/awscli.tmp fi done (head -n +1 /tmp/awscli.tmp && tail -n +2 /tmp/awscli.tmp | sort) | tr "\n" " " echo "" done;\ rm /tmp/awscli.tmp
- 実行結果
xxxxxxxxxxxx AdministratorAccess Billing xxxxxxxxxxxx AdministratorAccess
全アカウントに紐づくアクセス権限セットの表示2
※アカウント情報は、organizationsコマンドで取得しています。
アカウント数分、コマンドを実行するため、結構時間がかかります。
コマンド
INSTNACE_ARN=$(aws sso-admin list-instances --query "Instances[].InstanceArn" --output text);\ aws organizations list-accounts --query "Accounts[].Id" --output text | tr "\t" "\n" | sort | while read line do for permission in $(aws sso-admin list-permission-sets-provisioned-to-account --instance-arn ${INSTNACE_ARN} --account-id ${line} --query "PermissionSets" --output text) do if [[ ${permission} == None ]] ; then echo "${line} : アクセス権限セットなし" >> /tmp/awscli.tmp else aws sso-admin list-account-assignments \ --instance-arn ${INSTNACE_ARN} \ --permission-set-arn ${permission} \ --account-id ${line} \ --query "AccountAssignments[]" --output text >> /tmp/awscli.tmp fi done done;\ rm /tmp/awscli.tmp
- 実行結果
xxxxxxxxxxxxxx arn:aws:sso:::permissionSet/ssoins-xxxxxxxxxxxxxxxxxxxx/ps-xxxxxxxxxxxxxxxxxx xxxxxxxxxxxx-xxxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxxxxxxx GROUP xxxxxxxxxxxxxx arn:aws:sso:::permissionSet/ssoins-xxxxxxxxxxxxxxxxxxxx/ps-xxxxxxxxxxxxxxxxxx xxxxxxxxxxxx-xxxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxxxxxxx GROUP xxxxxxxxxxxxxx arn:aws:sso:::permissionSet/ssoins-xxxxxxxxxxxxxxxxxxxx/ps-xxxxxxxxxxxxxxxxxx xxxxxxxxxxxx-xxxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxxxxxxx GROUP xxxxxxxxxxxxxx : アクセス権限セットなし xxxxxxxxxxxxxx : アクセス権限セットなし
全アクセス権限セットの詳細
コマンド
INSTNACE_ARN=$(aws sso-admin list-instances --query "Instances[].InstanceArn" --output text);\ aws sso-admin list-permission-sets --instance-arn ${INSTNACE_ARN} --query "PermissionSets" --output text | tr "\t" "\n" | while read line do echo "## アクセス権限セット名" RESULT=$(aws sso-admin describe-permission-set --instance-arn ${INSTNACE_ARN} --permission-set-arn ${line} --query "PermissionSet.[Name,PermissionSetArn]" --output text) echo ${RESULT} echo "### マネージドポリシー" aws sso-admin list-managed-policies-in-permission-set \ --instance-arn $(aws sso-admin list-instances --query "Instances[].InstanceArn" --output text) \ --permission-set-arn ${line} \ --query "AttachedManagedPolicies[].[Name,Arn]" --output text echo "### インラインポリシー" FILE_NAME=$(echo ${RESULT} | awk '{print $1}').policy aws sso-admin get-inline-policy-for-permission-set \ --instance-arn $(aws sso-admin list-instances --query "Instances[].InstanceArn" --output text) \ --permission-set-arn ${line} --output text > /tmp/awscli.tmp;\ if [[ 1 -lt $(wc -c /tmp/awscli.tmp | awk '{print $1}') ]] ; then cat /tmp/awscli.tmp | sed -e 's/,/,\n/g' -e 's/{/\n{\n/g' -e 's/\[/\n\[/g' -e 's/\}/\n\}/g' -e 's/\]/\n\]/g' | sed '1d' ;\ else echo "インラインポリシーは定義されていません。" ;\ fi;\ done;\ rm /tmp/awscli.tmp
- 実行結果
## アクセス権限セット名 AdministratorAccess arn:aws:sso:::permissionSet/ssoins-7758faff83b26bbb/ps-82a2d3c9ca6398a4 ### マネージドポリシー Billing arn:aws:iam::aws:policy/job-function/Billing ### インラインポリシー { "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"*", "Resource":"*" } ] } ## アクセス権限セット名 Billing arn:aws:sso:::permissionSet/ssoins-7758faff83b26bbb/ps-82c9d5e2c3d089ec ### マネージドポリシー Billing arn:aws:iam::aws:policy/job-function/Billing ### インラインポリシー インラインポリシーは定義されていません。 #
おまけ
アクセス権限セットごとのインラインポリシーをファイルに出力するVersion
※標準出力もします。
INSTNACE_ARN=$(aws sso-admin list-instances --query "Instances[].InstanceArn" --output text);\ aws sso-admin list-permission-sets --instance-arn ${INSTNACE_ARN} --query "PermissionSets" --output text | tr "\t" "\n" | sort | while read line do echo "## アクセス権限セット名" RESULT=$(aws sso-admin describe-permission-set --instance-arn ${INSTNACE_ARN} --permission-set-arn ${line} --query "PermissionSet.[Name,PermissionSetArn]" --output text) echo "${RESULT}" echo "### マネージドポリシー" aws sso-admin list-managed-policies-in-permission-set \ --instance-arn $(aws sso-admin list-instances --query "Instances[].InstanceArn" --output text) \ --permission-set-arn ${line} \ --query "AttachedManagedPolicies[].[Name,Arn]" --output text echo "### インラインポリシー" FILE_NAME=$(echo ${RESULT} | awk '{print $1}').policy aws sso-admin get-inline-policy-for-permission-set \ --instance-arn $(aws sso-admin list-instances --query "Instances[].InstanceArn" --output text) \ --permission-set-arn ${line} --output text > /tmp/awscli.tmp;\ if [[ 1 -lt $(wc -c /tmp/awscli.tmp | awk '{print $1}') ]] ; then cat /tmp/awscli.tmp | sed -e 's/,/,\n/g' -e 's/{/\n{\n/g' -e 's/\[/\n\[/g' -e 's/\}/\n\}/g' -e 's/\]/\n\]/g' | sed '1d' | tee ${FILE_NAME};\ else echo "インラインポリシーは定義されていません。" | tee ${FILE_NAME};\ fi;\ done;\ rm /tmp/awscli.tmp
- 実行結果
## アクセス権限セット名 AdministratorAccess arn:aws:sso:::permissionSet/ssoins-7758faff83b26bbb/ps-82a2d3c9ca6398a4 ### マネージドポリシー AdministratorAccess arn:aws:iam::aws:policy/AdministratorAccess ### インラインポリシー { "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"*", "Resource":"*" } ] } ## アクセス権限セット名 Billing arn:aws:sso:::permissionSet/ssoins-7758faff83b26bbb/ps-82c9d5e2c3d089ec ### マネージドポリシー Billing arn:aws:iam::aws:policy/job-function/Billing ### インラインポリシー インラインポリシーは定義されていません。
# ls -lrt -rwxrwxrwx 1 kazuya kazuya 96 Oct 27 00:35 AdministratorAccess.policy -rwxrwxrwx 1 kazuya kazuya 61 Oct 27 00:35 Billing.policy # # cat AdministratorAccess.policy { "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"*", "Resource":"*" } ] } # # cat Billing.policy インラインポリシーは定義されていません。 #
おわりに
今回は、AWS SSO関連の情報を取得するコマンドをご紹介いたしました。
次回は、IAMもしくはAWS SSOのアクセス権限セットの作成・削除などをご紹介したいと思います~