AWS Single Sing-On(AWS SSO) 改め AWS IAM Identity Center でCLIする

はじめに

こんにちは。
岩津です。

最近エコモットではAWSのマルチアカウント運用をJumpアカウントを利用した方法からAWS Single Sign-On (AWS SSO)を利用した方式に切り替えました。
弊社ではクラウド環境としてAWSとAzureを利用していますので、IdP(Identify Provider)としてAzureADを利用することでAWSとAzureのユーザーを一箇所で管理できるようになりました。
このお陰でユーザー管理がかなり楽になりました。

SSO

今回は社内への業務連絡を兼ねてAWS CLIでSSOを利用する方法をざっと紹介します。

前提条件

本ページでは以下を前提条件とします。

AWS IAM Identity Center

まず、AWS SSOですが最近名称が変更されれ『AWS IAM Identity Center』になりました。

AWS Single Sign-On (AWS SSO) が AWS IAM Identity Center に

AWSでSSOを利用する場合は今後はの機能で設定することになりますが、今回はすでにSSOが利用できる状態であることを前提としてしています。

導入方法については公式のドキュメントを参照ください。
AWS IAM Identity Center (successor to AWS Single Sign-On) 開始方法

WSL2

Windows環境のWLS2を利用します。
公式を参照し、WSL2をインストールしておきます。

以下の作業はWSL2上で行います。

  • AWS CLI Ver.2のインストール

参考:公式

  • Git バージョン 1.7.9 以降のインストール

  • curl 7.33 以降のインストール

  • Python3のインストール

  • Pip3のインストール

添付画像とアカウント情報

秘匿情報を含むためモザイクとダミー文字列への置換多めです。
適宜自分の環境に読み替えてください。

AWS SSOのコンフィグ設定

configureの実行

実行コマンド

SSO start URL
{AWS アクセスポータルの URL}
IAM Identity Centerで確認できます。
SSO Region
ap-northeast-1

上記を入力してEnterを押下するとブラウザが起動します。

実行例

aws configure sso

以下よりブラウザの画面での操作になります。

【ブラウザ】IdP側の認証画面

弊社の場合、IdPがAzureADなので一度AzureAD側で認証を行います。

AzureAD 認証

【ブラウザ】AWS側の確認画面

認証が成功するとAWS側の確認画面に遷移するので、「Allow」を押下します。

Allow

【ブラウザ】成功時

AWS側のサインインが成功した場合

Request approved

以下からはターミナルに戻ります。

AWSアカウントの選択

ブラウザでの認証が成功すると、ターミナル側では自分がアクセス可能なAWSアカウント一覧が表示されるので、利用するアカウントを選択します。
(数が多くても選ぶだけなので楽といえば楽。数が多いと探すのが大変といえば大変)

AWSAccountList

ロールの選択

AWS CLIで利用するアカウントを選択後、次の画面で利用するロールを選択します。
以下の例では2つのロールが表示されています。

AWSRoleList

リージョン等の設定

ロールを選択後、デフォルトのリージョン、出力書式、プロファイル名の入力を求められるので、通常は変更せずそのままEnterキーで確定します。

出力例

設定完了後

作成の例は以下のようになります。

DefaultSetting

設定は以上です。
以下からは作成した設定を利用してAWS CLIを実行します。

確認作業(自身のユーザー情報)

適切に設定されているかを確認するために、適用されているユーザー情報を表示します。

実行コマンド

実行例

この時点で特定のAWSアカウント/ロールでAWS CLIが実行可能なことが確認できます。

以下はどのような設定が生成されているかの周辺確認です。(興味がある人向け)

確認作業(configファイル)

aws config sso コマンドで作成された設定は ~/.aws/config に生成されています。
configファイルの中身を確認しておきます。

実行コマンド

実行例

※一部修正済み

ロールとAWSアカウントの組み合わせで設定が追加されているのがわかると思います。

AWS SSOのログアウト

AWS CLI上でのSSOからのログアウトは以下のようにします。

実行コマンド

実行例

以下の例ではlogout実行後に、ユーザー情報を表示しtokenの有効期限が適切に無効化されているのを確認しています。

AWS SSOのログイン

aws config sso設定後に、再びログインしたい場合は以下のように aws sso login コマンドを実行します。

実行コマンド例

実行例

補足

普段AWS CLIをあまりで使わない人であればAWS SSOのログイン後に表示される”Command line or programmatic access”のリンクから、各ロールごとのクレデンシャルが生成されるので、これをコピペして環境変数に設定すればaws configure ssoコマンドを利用しなくてもAWS CLIが利用できます。


ただし、このクレデンシャルは一時的なものなので時間経過で失効します。(aws sso loginで生成されるクレデンシャルも一時的なクレデンシャル)

複数のアカウントを順次切り替えて利用する場合にはコピペが辛くなってくるので、そのような場合はaws sso loginコマンドで利用するアカウントにログインするほうがAWS CLIが楽に利用できると思います。

時間経過で失効するのは、逆にいえば「使い捨てできる」ということなので、永続するクレデンシャル情報よりもセキュアに利用することができます。

まとめ

  • マルチアカウントで使うならAWS SSOが便利
  • AWS SSOが利用可能ならaws config ssoを使ってAWSアカウントのプロファイルを簡単に作れる
  • aws ssoコマンドで簡単にアカウントとロールをAWS CLIで利用できる