AWS SSOのアクセス権限セットの割り当て一覧を確認する方法

2022.03.14

AWS SSO を利用しているときに、ユーザーやアクセス権限の棚卸しのためにアクセス権限セットの割り当て一覧を確認したいときがありますが、マネジメントコンソールや AWS CLI では一覧の取得に工夫が必要となります。

AWS SSO の管理を容易にするツールである benkehoe/aws-sso-util を利用することで、簡単に csv 形式のユーザー/グループ、アクセス権限セット、AWS アカウントの紐付けを出力できるため紹介します。


aws-sso-util については次のブログで詳しく紹介されています。


AWS CloudShell で試してみる

AWS CloudShell により aws-sso-util を用いたアクセス権限の一覧の出力を試してみます。

aws-sso-util のインストール

aws-sso-util は Python で動作します。

$ python3 --version
Python 3.7.10

README.md に従ってまずは pipx をインストールします。

$ python3 -m pip install --user pipx

aws-sso-util をインストールします。

$ pipx install aws-sso-util

インストール後にバージョンを確認してみます。

$ aws-sso-util --version
4.27.0

ヘルプは下記コマンドで確認できます。

$ aws-sso-util --help
Usage: aws-sso-util [OPTIONS] COMMAND [ARGS]...

Options:
  --version  Show the version and exit.
  --help     Show this message and exit.

Commands:
  admin      Commands for AWS SSO administration.
  check      Debug AWS SSO configuration and access.
  configure  Commands to set up ~/.aws/config.
  console    Commands for launching the AWS console in a browser.
  login      Log in to an AWS SSO instance.
  logout     Log out of all AWS SSO sessions
  roles      List your available accounts and roles.
  run-as     Run a command as a specific account + role.


アクセス権限セットの割り当て一覧を確認

アクセス権限セットの割り当て一覧を csv 形式で出力するためには下記コマンドを実行するのみです。

$ aws-sso-util admin assignments
instance_arn,principal_type,principal_id,principal_name,permission_set_arn,permission_set_name,target_type,target_id,target_name
arn:aws:sso:::instance/ssoins-7898fc71aexample,GROUP,xxxxxxxxxx-5b6544cb-ca08-4e35-a107-316b7b783cae,test-group-readonly,arn:aws:sso:::permissionSet/ssoins-7898fc71aexample/ps-d911a866f7e86d84,ReadOnlyAccess,AWS_ACCOUNT,111122223333 ,Management
arn:aws:sso:::instance/ssoins-7898fc71aexample,GROUP,xxxxxxxxxx-88659ec8-9fe8-436e-8c0b-e17280e0a634,test-group-admin,arn:aws:sso:::permissionSet/ssoins-7898fc71aexample/ps-d911a866f7e86d84,ReadOnlyAccess,AWS_ACCOUNT,111122223333 ,Management
arn:aws:sso:::instance/ssoins-7898fc71aexample,GROUP,xxxxxxxxxx-88659ec8-9fe8-436e-8c0b-e17280e0a634,test-group-admin,arn:aws:sso:::permissionSet/ssoins-7898fc71aexample/ps-713d6e69c9e1ce28,AdministratorAccess,AWS_ACCOUNT,111122223333 ,Management
arn:aws:sso:::instance/ssoins-7898fc71aexample,GROUP,xxxxxxxxxx-88659ec8-9fe8-436e-8c0b-e17280e0a634,test-group-admin,arn:aws:sso:::permissionSet/ssoins-7898fc71aexample/ps-d911a866f7e86d84,ReadOnlyAccess,AWS_ACCOUNT,444455556666 ,Log Archive
arn:aws:sso:::instance/ssoins-7898fc71aexample,GROUP,xxxxxxxxxx-88659ec8-9fe8-436e-8c0b-e17280e0a634,test-group-admin,arn:aws:sso:::permissionSet/ssoins-7898fc71aexample/ps-713d6e69c9e1ce28,AdministratorAccess,AWS_ACCOUNT,444455556666 ,Log Archive
arn:aws:sso:::instance/ssoins-7898fc71aexample,USER,xxxxxxxxxx-353740ae-807e-496c-847e-019459f11519,test-readonly1@example.net,arn:aws:sso:::permissionSet/ssoins-7898fc71aexample/ps-713d6e69c9e1ce28,AdministratorAccess,AWS_ACCOUNT,444455556666 ,Log Archive
arn:aws:sso:::instance/ssoins-7898fc71aexample,GROUP,xxxxxxxxxx-88659ec8-9fe8-436e-8c0b-e17280e0a634,test-group-admin,arn:aws:sso:::permissionSet/ssoins-7898fc71aexample/ps-713d6e69c9e1ce28,AdministratorAccess,AWS_ACCOUNT,777788889999 ,Audit

以上で終了です。簡単ですね!

各項目の概要は下表となります。

項目名 概要
instance_arn AWS SSO インスタンスの ARN
principal_type プリンシパルのタイプ(USER, GROUP など)
principal_id プリンシパルのID(ユーザー、グループのID)
principal_name プリンシパルの名前(ユーザー、グループの名前)
permission_set_arn アクセス権限セットのARN
permission_set_name アクセス権限セットの名前
target_type ターゲットのタイプ(AWS_ACCOUNT など)
target_id ターゲットのID(AWS_ACCOUNT の場合は AWS アカウント ID)
target_name ターゲットの名前(AWS_ACCOUNT の場合は AWS アカウント名)


csv ファイルとして出力したい場合はリダイレクトし、その後 AWS CloudShell から csv ファイルをダウンロードします。

$ aws-sso-util admin assignments > sso.csv
$ ls | grep sso.csv
sso.csv

出力された csv ファイルを Excel で開くと下記のイメージです。 ユーザー/グループ、アクセス権限セット、AWS アカウントの紐付けが確認できます。


ローカル環境で実行する場合

aws-sso-util のインストール方法と csv ファイル出力方法は同様ですが、認証情報の設定方法がいくつかあります。

まず、AWS SSO ユーザーポータルから一時的なアクセスキーを利用できます。

他の方法として、.aws/credentials に profile を追加する方法があります。

[profile my-sso-profile]
sso_start_url = https://example.awsapps.com/start
sso_region = ap-northeast-1
sso_account_id = 111122223333
sso_role_name = AdministratorAccess
region = ap-northeast-1

profile 追加後に下記コマンドを実行することで、ブラウザが起動してサインイン画面が表示されるため Request を許可(Allow)します。

$ aws-sso-util login


まとめ

AWS SSO のアクセス権限の棚卸しをする際に便利なツールである benkehoe/aws-sso-util を紹介しました。AWS CLI を利用することでもアクセス権限セットの割り当てを確認できますが、一発では出力できないため、これまでは自作のスクリプトを利用していました。今後は楽をできそうです。

aws-sso-util には他にも機能がありますので、試してみたくなりますね。