IAM Identity Center環境でのCLI操作・マネコン起動を劇的に簡単にしてくれるAWS SSO CLIの紹介
お疲れさまです。とーちです。
AWS環境で作業していると、IAM Identity Centerを使ったログインが必要になることがありますよね。
私は普段awsumeを使ってAWS環境にログインしていて、awsumeでIAM Identity Centerにもログインしようと思って調べていたら、以下のissueからaws-sso-cliというツールがあることを知りました。
GitHubリポジトリを見てみると、スター数も500と多く、開発も活発そうです。気になったので使ってみることにしました。
とりあえずまとめ
- IAM Identity Centerへのログインが簡単になる
- AWS CLIプロファイルを自動生成してくれる
- コマンド一発でマネジメントコンソールも開ける
- awsumeのような使い勝手で直感的に使える
インストールとaws-ssoのconfigファイル作成
Quickstart - AWS SSO CLIを参考にまずはインストールしてみます。
インストールはHomebrewで一発で出来ます。Homebrew対応してると楽でいいですね。
brew install aws-sso-cli
構成ウィザードがあるのでまずはこれを使って設定します。
aws-sso config
なお、aws-sso config --advanced
でより高度な設定もできるとのことです。
aws-sso configを実行すると以下のように設定値を入力するように求められます。
> aws-sso config
WARNING No config file found! Will now prompt you for a basic config...
**********************************************************************
* Do you have questions? Do you like reading docs? We've got docs! *
* https://synfinatic.github.io/aws-sso-cli/ *
**********************************************************************
✔ SSO Start URL Hostname (XXXXXXX.awsapps.com): ***.awsapps.com
INFO Using ***.awsapps.com
✔ AWS SSO Region (SSORegion): ap-northeast-1
Use the arrow keys to navigate: ↓ ↑ → ←
ProfileFormat for Profile/$AWS_PROFILE:
▸ Default: {{ .AccountIdPad }}:{{ .RoleName }}
Friendly: {{ FirstItem .AccountName (.AccountAlias | nospace) }}:{{ .RoleName }}
ここで入力する項目について説明します
- SSO Start URL Hostname: IAM Identity Centerログインに使うURLです
- SSO Region: IAM Identity Centerが設定されているAWSリージョンです。ブラウザからIAM Identity Centerログイン用のURLにアクセスするとリダイレクトされますが、リダイレクト後のURLから判断できます
良く分からなかったのが、profileFormatという設定です。
後ほど説明するのですが、AWS SSO CLIは ~/.aws/config
の設定も自動で行ってくれます。その際に各アカウントのロールごとにプロファイルが作成されますが、この設定はそのプロファイル名の形式を定義するための設定項目でした。
例えば、デフォルトの{{ .AccountIdPad }}:{{ .RoleName }}
という形式を使うと、~/.aws/configには以下のようなプロファイルが生成されます
[profile 123456789012:AdministratorAccess]
上記の3つを入力すると設定は完了になりました。AWS SSO CLIのconfigファイルはデフォルトでは /Users/***/.config/aws-sso/config.yaml
に保存されるようです。
見てみるとこんな感じの設定が書かれていました。各設定の詳細はこちらをご確認ください。
SSOConfig:
Default:
SSORegion: ap-northeast-1
StartUrl: https://d-xxxxxxxxxx.awsapps.com/start
ConsoleDuration: 720
CacheRefresh: 168
UrlAction: open
LogLevel: error
HistoryLimit: 10
HistoryMinutes: 1440
ProfileFormat: "{{ .AccountIdPad }}:{{ .RoleName }}"
FullTextSearch: true
IAM Identity Centerにログインするための初期設定
使い始める前に一度だけ以下のコマンドを実行しておく必要があります。
aws-sso completions -I
このコマンドを実行すると、使用環境のシェルに応じて自動補完の設定やシェル関数が追加されます。実行したときのイメージは以下です。ちゃんとどこにどのような内容を設定するかを出力してくれています。
aws-sso completionsコマンドを実行するとこうなる(長いので折りたたみ)
> aws-sso completions -I
The following changes are proposed to /Users/xxxxx/.config/fish/completions/aws-sso.fish:
--- /Users/xxxxx/.config/fish/completions/aws-sso.fish
+++ /Users/xxxxx/.config/fish/completions/aws-sso.fish.new
@@ -1 +1,52 @@
+# BEGIN_AWS_SSO_CLI
+function __complete_aws-sso
+ set -lx COMP_LINE (commandline -cp)
+ test -z (commandline -ct)
+ and set COMP_LINE "$COMP_LINE "
+ export __NO_ESCAPE_COLONS=1
+ /opt/homebrew/bin/aws-sso
+end
+complete -f -c aws-sso -a "(__complete_aws-sso)"
+
+function aws-sso-profile
+ set --local _args (string split -- ' ' $AWS_SSO_HELPER_ARGS)
+ set -q AWS_SSO_HELPER_ARGS; or set --local _args -L error --no-config-check
+ if [ -n "$AWS_PROFILE" ]
+ echo "Unable to assume a role while AWS_PROFILE is set"
+ return 1
+ end
+
+ if [ -z "$argv[1]" ]
+ echo "Usage: aws-sso-profile <profile>"
+ return 1
+ end
+
+ eval $(/opt/homebrew/bin/aws-sso $_args eval -p $argv[1])
+ if [ "$AWS_SSO_PROFILE" != "$1" ]
+ return 1
+ end
+end
+
+function __aws_sso_profile_complete
+ set --local _args (string split -- ' ' $AWS_SSO_HELPER_ARGS)
+ set -q AWS_SSO_HELPER_ARGS; or set --local _args -L error --no-config-check
+ set -l cur (commandline -t)
+
+ set -l cmd "/opt/homebrew/bin/aws-sso list $_args --csv -P Profile=$cur Profile"
+ for completion in (eval $cmd)
+ printf "%s\n" $completion
+ end
+end
+complete -f -c aws-sso-profile -f -a '(__aws_sso_profile_complete)'
+
+function aws-sso-clear
+ set --local _args (string split -- ' ' $AWS_SSO_HELPER_ARGS)
+ set -q AWS_SSO_HELPER_ARGS; or set --local _args -L error
+ if [ -z "$AWS_SSO_PROFILE" ]
+ echo "AWS_SSO_PROFILE is not set"
+ return 1
+ end
+ eval "$(/opt/homebrew/bin/aws-sso $_args eval -c | string replace "unset" "set --erase" )"
+end
+
+# END_AWS_SSO_CLI
+
+
+Modify /Users/xxxxx/.config/fish/completions/aws-sso.fish with proposed changes?:
私はfishを使っているので、/Users/xxxxx/.config/fish/completions/aws-sso.fish
というファイルが新規で作成されました。
続いて、aws-sso config-profiles
というコマンドを実行します。このコマンドは~/.aws/config
ファイルにIAM Identity Centerで使えるすべてのロールを一度に設定ファイルに追加するコマンドになっています。
早速使ってみると以下のようにターミナル上には文字列が表示され、
> aws-sso config-profiles
Verify this code in your browser: ***-***
ブラウザが自動で開き同じ文字列が表示されました。
データのアクセス許可の同意画面が出るので許可を押します。
するとリクエスト承認された旨のメッセージが出ました。
ターミナル上には以下のように.aws/configを変更していいか確認するプロンプトが表示されます。
? Modify /Users/***/.aws/config with proposed changes?:
▸ No
Yes
なお、aws-sso config-profiles --diff
と実行すれば、.aws/configは実際に変更せずに差分だけ表示することもできるようです(参考: Commands & Usage - AWS SSO CLI)。
実行した結果、自分の環境では以下の行が追加されていました(XXXXXXXXXXXXのところはアカウントID)。
> diff ~/.aws/config ~/.aws/config_250306
153,167d152
< # BEGIN_AWS_SSO_CLI
<
< [profile XXXXXXXXXXXX:AdministratorAccess]
< credential_process = /opt/homebrew/bin/aws-sso -u open -S "Default" process --arn arn:aws:iam::XXXXXXXXXXXX:role/AdministratorAccess
<
< [profile XXXXXXXXXXXX:AdministratorAccess]
< credential_process = /opt/homebrew/bin/aws-sso -u open -S "Default" process --arn arn:aws:iam::XXXXXXXXXXXX:role/AdministratorAccess
<
< [profile XXXXXXXXXXXX:AdministratorAccess]
< credential_process = /opt/homebrew/bin/aws-sso -u open -S "Default" process --arn arn:aws:iam::XXXXXXXXXXXX:role/AdministratorAccess
<
< [profile XXXXXXXXXXXX:AdministratorAccess]
< credential_process = /opt/homebrew/bin/aws-sso -u open -S "Default" process --arn arn:aws:iam::XXXXXXXXXXXX:role/AdministratorAccess
<
< # END_AWS_SSO_CLI
IAM Identity Center経由でCLIを使用する
上記の初期設定を済ませた状態で aws-sso-profile
と打ってtabを押すと以下のように自動で候補が表示されます(fishの場合の例)。
> aws-sso-profile XXXXXXXXXXXX:AdministratorAccess
XXXXXXXXXXXX:AdministratorAccess XXXXXXXXXXXX:AdministratorAccess
XXXXXXXXXXXX:AdministratorAccess XXXXXXXXXXXX:AdministratorAccess
これで、対象のアカウントに対してCLIでコマンド実行できる状態になります。awsumeのような使い勝手で大変いいですね。
> aws-sso-profile XXXXXXXXXXXX:AdministratorAccess
> aws sts get-caller-identity
{
"UserId": "XXXXXXXXXXXXXXXXXXXX:xxxxx",
"Account": "XXXXXXXXXXXX",
"Arn": "arn:aws:sts::XXXXXXXXXXXX:assumed-role/AWSReservedSSO_AdministratorAccess_XXXXXXXXXXXX/xxxxx"
}
> aws s3 ls
2024-05-23 21:07:51 <機微な情報なので省略>
コンソールもawsumeみたいに開けるよ
さらに上記の状態で aws-sso console
と実行するとawsumeのようにブラウザが自動で開き対象アカウントのマネージメントコンソールにログインすることもできます。最高ですね。
> aws-sso console --profile <プロファイル名>
と実行することでaws-ssoで設定した任意のプロファイルのアカウントのマネージメントコンソールを開くこともできます。ここでもちゃんとprofileまで打つと自動補完が効きます。
まとめ
以上、IAM Identity Centerへのログインを簡単に実行できるようになるaws-ssoの紹介でした。めちゃくちゃいいですね。自分はこれ使っていこうと思います。
awsumeを使っていた方も、IAM Identity Centerとの連携が必要な場合は、ぜひaws-sso-cliを試してみてください。
以上、とーちでした。