IAM Identity Center環境でのCLI操作・マネコン起動を劇的に簡単にしてくれるAWS SSO CLIの紹介

IAM Identity Center環境でのCLI操作・マネコン起動を劇的に簡単にしてくれるAWS SSO CLIの紹介

IAM Identity Center環境でのCLI操作・マネコン起動を劇的に簡単にしてくれるAWS SSO CLIの紹介です。awsumeを使ってる方にオススメ!
Clock Icon2025.03.06

お疲れさまです。とーちです。

AWS環境で作業していると、IAM Identity Centerを使ったログインが必要になることがありますよね。

私は普段awsumeを使ってAWS環境にログインしていて、awsumeでIAM Identity Centerにもログインしようと思って調べていたら、以下のissueからaws-sso-cliというツールがあることを知りました。

Awsume error: Validation Exception - Invalid credentials returned from credential_process: · Issue #196 · trek10inc/awsume

GitHubリポジトリを見てみると、スター数も500と多く、開発も活発そうです。気になったので使ってみることにしました。

https://github.com/synfinatic/aws-sso-cli

とりあえずまとめ

  • 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から判断できます

image.png

良く分からなかったのが、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: ***-***

ブラウザが自動で開き同じ文字列が表示されました。

image.png

データのアクセス許可の同意画面が出るので許可を押します。

image.png

するとリクエスト承認された旨のメッセージが出ました。

image.png

ターミナル上には以下のように.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を試してみてください。

以上、とーちでした。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.