AWS CLIのSSO設定+ちょっとしたTips

はじめに

Qiita - フェズ Advent Calendar 2022 の9日目。サーバーサイド担当の中川です。
最近、急に寒くなって布団の吸引力がやばいです。
今回は AWS CLI で SSO する時の の使い方と、個人的に「おっ」と思った割りとどーでもいい(しかし、もしかしたらお役立ちかもしれない) Tipsを書いていこうと思います。

手元の環境

  • OS: Windows 11 (WSL2 + Ubuntu)
    • ※手がThinkpadに最適化されてしまっている為、Macも使いますが、メインはWin(聞かれてない)
  • Tool: aws-cli/2.9.4

SSOでログインする

AWS へログインするにあたり Google Workspaces 等と連携して SSO する環境が増えていると思います。
アカウント管理が簡潔になるので非常に便利なのですが、ターミナル利用時は、基本的に一度ブラウザを経由してログインセッション(あるいはクレデンシャル)を取得する事になるかと思います。

Webコンソールにログイン

まずは普通にWebコンソールにログインする場合、 な感じのURLからログインしてして、
対象のアカウント+ロールを探し、「Management console」のリンクからログインするかと思います。

AWS CLI でログイン

問題は CLI 側です。CLI であっても、SSOを使う場合はブラウザを経由する必要があり、例えば、上記URLの「Command line or programmatic access」から、下記のような CLI 用の環境変数を確認する事ができます。
この情報を元に を編集すれば aws コマンドを使えるようになりますが、ブラウザ開いて環境変数確認してコピーしてターミナルでクレデンシャル開いてペーストして…という作業を毎回するのも、いささか面倒です。

AWS CLI の SSO 設定

そこで登場するのが AWS CLI の SSO 設定。 以下のコマンドで今後の作業が色々と簡略化できます。
いくつか設定項目がありますが、例えば、以下のように設定します。
  • SSO session name:
    • 最近追加された項目のようですが、セッション名を自由に付けられるようです。どういった用途なのかドキュメントを見つけることが出来なかったのですが、直前に作ったセッション名と同じセッション名を使うと、ブラウザを起動してのSSOをスキップでき、アカウントとロールを選択し直すところから作業できたので、スイッチロールなんかをよくするケースなどで大活躍なのかもしれません。
    • アカウントやロール、スタートURLを変えたりしない場合は、テキトーに名前を付けて、同じ名前を使いまわせば良いのかもしれません。
    • ちなみに、この項目を未入力にすると、configファイルの生成が旧来のフォーマットになります。※ への出力内容が変わるので良かったら試してみてください
  • SSO start URL:
    • AWS アクセスポータルの URL。SSOログインする時のURLです。
  • SSO region:
    • SSO用のリージョン。東京リージョンであれば になります。
  • SSO registration scopes:
    • こちらもドキュメントがすぐに見当たらなかったので、デフォルトの値 ”sso:account:access” のままにしてしまっていますが、現状、特に困っていません。 ただ、こちらのRedditの投稿 を見た感じ Terraform 周りで不便が生じているようで、公式にお問合せしている最中のようです。
  • CLI default client Region:
    • この辺は適宜。東京リージョンであれば
  • CLI default output format:
    • この辺は適宜。jsonにしちゃってます。
  • CLI profile name:
    • AWS CLI を利用する際に必要となるプロフィール名。指定しなければ、 な感じで命名されます。
    • このプロフィール名は、AWS CLI でコマンド打つ時に都度必要になるので、頻繁にコマンド操作する時は、ちょっと工夫が必要になってきます。その辺は後述します。

AWS CLIで引き続き、SSOログイン

設定完了後、しばらくは作業が出来ますが、時間が経つとセッションの有効期限が切れるので、再度SSOログインが必要になります。
でプロフィール名を指定して再度ログインする事で、SSO設定時に指定した値(ロール、アカウント、リージョン等)は引き継がれた状態で作業が継続できます。

Tips的な何か

プロフィール名の指定

SSOで無事ログインできましたが、AWSコマンド打つたびに でプロフィール名を手打ちするのも手間なので、「環境変数に入れる」「Bash aliasにする」などの対応をする事になるかと思います。
  • 環境変数 を設定する
    • こうやって にSSO時に定義したプロファイル名を指定すれば、以後 オプションは不要です。 切り替えることがほぼ無ければ 等に書いてしまっても良いですし、ディレクトリ毎に環境変数が切り替えられる なんかと組み合わせるのも良いかもです。
  • Bash alias にする
    • みたいなBash aliasを 辺りに仕込んでおけば、
      な感じで、 指定なしでコマンドが叩けます。
      ただまぁ、これだと の方がどう考えても筋が良いので、
      みたいによく使うコマンドと1セットにするのが良いかもしれません。
  • プロフィール名を にする
    • 複数のプロフィールを切り替えて使うワケでもない場合、これが一番手っ取り早く な指定が不要にできます。
      もしかすると、なんとなく違和感を覚えるやり方かもしれませんが、 に書き出される設定も ではなく として書き出されるので、そういう使い方も想定されているものだと思われます。 ※名前ではなく設定として出力されるように組まれている

タブ補完しまくる

SSO設定時のタブ補完

SSO設定をする際も、入力項目によってはタブ補完が可能な項目があります。タブキー押しまくりましょう。
命名済みのセッションがあれば、その内容と共に候補が出ます。タブキーの連打か、矢印の上下で選択項目を切り替えられます。確定は Enter。
命名済みのセッションがあれば、その内容と共に候補が出ます。タブキーの連打か、矢印の上下で選択項目を切り替えられます。確定は Enter。
Start URL も ~/.aws/config に設定値があれば、候補に出ます。
Start URL も に設定値があれば、候補に出ます。
SSO region や output format は、設定なしでも候補が出る
SSO region や output format は、設定なしでも候補が出る
client Region はなぜか、どうやっても補完してくれない・・・
client Region はなぜか、どうやっても補完してくれない・・・

AWS CLI 自体のコマンド補完

もちろん AWS CLI 自体のコマンド補完も用意されていて、サクッと導入できます。
導入方法(例)
使用例

環境変数 AWS_CLI_AUTO_PROMPT

この環境変数は強力で、awsコマンドを叩くと、AWS CLI ver.2専用の自動プロンプトに入ります。
この自動プロンプトを導入する際の環境変数の値は、以下の2つで
にすると必ず自動プロンプトに入り、 にすると必要に応じて自動プロンプトに入ります。
試してイマイチだったら で解除。

まとめ

以上、AWS CLI の SSO 設定例と、知ってるとちょっと便利かもしれないTipsでした。
セッション名やScopeなど、まだよく分かっていない点も多いので、誤り等ありましたらどこかでご指摘頂けますと幸いです。
あと、いつからか AWS IAM Identity Center に名称が変わったようですが、たぶんしばらくは AWS の SSO って言っちゃう気がします。