こんにちは。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のアクセス権限セットの作成・削除などをご紹介したいと思います~