はじめに
こんにちは。
岩津です。
最近エコモットではAWSのマルチアカウント運用をJumpアカウントを利用した方法からAWS Single Sign-On (AWS SSO)を利用した方式に切り替えました。
弊社ではクラウド環境としてAWSとAzureを利用していますので、IdP(Identify Provider)としてMicrosoft Entra ID(旧称 AzureAD。以後Entra ID)を利用することでAWSとAzureのユーザーを一箇所で管理できるようになりました。
このお陰でユーザー管理がかなり楽になりました。
今回は社内への業務連絡を兼ねて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のインストール
1 2 3 4 |
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install |
- Git バージョン 1.7.9 以降のインストール
1 2 |
$ sudo apt install git |
- curl 7.33 以降のインストール
1 2 |
$ sudo apt install curl |
- Python3のインストール
1 2 |
$ sudo apt install python3 |
- Pip3のインストール
1 2 |
$ sudo apt install python3-pip |
添付画像とアカウント情報
秘匿情報を含むためモザイクとダミー文字列への置換多めです。
適宜自分の環境に読み替えてください。
AWS SSOのコンフィグ設定
configureの実行
実行コマンド
1 2 |
$ aws configure sso |
- SSO start URL
- {AWS アクセスポータルの URL}
IAM Identity Centerで確認できます。 - SSO Region
- ap-northeast-1
上記を入力してEnterを押下するとブラウザが起動します。
実行例
以下よりブラウザの画面での操作になります。
【ブラウザ】IdP側の認証画面
弊社の場合、IdPがEntra IDなので一度Entra ID側で認証を行います。
【ブラウザ】AWS側の確認画面
認証が成功するとAWS側の確認画面に遷移するので、「Allow」を押下します。
【ブラウザ】成功時
AWS側のサインインが成功した場合
以下からはターミナルに戻ります。
AWSアカウントの選択
ブラウザでの認証が成功すると、ターミナル側では自分がアクセス可能なAWSアカウント一覧が表示されるので、利用するアカウントを選択します。
(数が多くても選ぶだけなので楽といえば楽。数が多いと探すのが大変といえば大変)
ロールの選択
AWS CLIで利用するアカウントを選択後、次の画面で利用するロールを選択します。
以下の例では2つのロールが表示されています。
リージョン等の設定
ロールを選択後、デフォルトのリージョン、出力書式、プロファイル名の入力を求められるので、通常は変更せずそのままEnterキーで確定します。
出力例
1 2 3 4 |
CLI default client Region [ap-northeast-1]: CLI default output format [json]: CLI profile name [{ロール名}-{AWSアカウントID}]: |
設定完了後
作成の例は以下のようになります。
設定は以上です。
以下からは作成した設定を利用してAWS CLIを実行します。
確認作業(自身のユーザー情報)
適切に設定されているかを確認するために、適用されているユーザー情報を表示します。
実行コマンド
1 2 |
aws sts get-caller-identity --profile AWSAdministratorAccess-111111111111 |
実行例
1 2 3 4 5 6 7 |
$ aws sts get-caller-identity --profile AWSAdministratorAccess-111111111111 { "UserId": "XXX:yasushi.iwatsu@XXX.onmicrosoft.com", "Account": "XXXXXXXXXXXX", "Arn": "arn:aws:sts::111111111111:assumed-role/AWSReservedSSO_AWSAdministratorAccess_99999999999999/yasushi.iwatsu@XXX.onmicrosoft.com" } |
この時点で特定のAWSアカウント/ロールでAWS CLIが実行可能なことが確認できます。
以下はどのような設定が生成されているかの周辺確認です。(興味がある人向け)
確認作業(configファイル)
aws config sso
コマンドで作成された設定は ~/.aws/config
に生成されています。
configファイルの中身を確認しておきます。
実行コマンド
1 2 |
$ cat ~/.aws/config |
実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ cat .aws/config [default] region = ap-northeast-1 output = json (中略) [profile {自分が選択したロール名}-{自分が選択したAWSアカウントID}] sso_start_url = https://d-0000000000.awsapps.com/start sso_region = ap-northeast-1 sso_account_id = {自分が選択したAWSアカウントID} sso_role_name = {自分が選択したロール名} region = ap-northeast-1 output = json |
※一部修正済み
ロールとAWSアカウントの組み合わせで設定が追加されているのがわかると思います。
AWS SSOのログアウト
AWS CLI上でのSSOからのログアウトは以下のようにします。
実行コマンド
1 2 |
$ aws sso logout |
実行例
以下の例ではlogout実行後に、ユーザー情報を表示しtokenの有効期限が適切に無効化されているのを確認しています。
1 2 3 4 5 |
$ aws sso logout $ aws sts get-caller-identity --profile AWSAdministratorAccess-111111111111 Error loading SSO Token: The SSO access token has either expired or is otherwise invalid. |
AWS SSOのログイン
aws config sso設定後に、再びログインしたい場合は以下のように aws sso login
コマンドを実行します。
実行コマンド例
1 2 |
$ aws sso login --profile {自分が作成したプロファイル名} |
実行例
1 2 3 4 5 6 7 8 |
$ aws sso login --profile AWSAdministratorAccess-111111111111 $ aws sts get-caller-identity --profile AWSAdministratorAccess-111111111111 { "UserId": "XXX:yasushi.iwatsu@XXX.onmicrosoft.com", "Account": "111111111111", "Arn": "arn:aws:sts::111111111111:assumed-role/AWSReservedSSO_AWSAdministratorAccess_99999999999999/yasushi.iwatsu@XXX.onmicrosoft.com" } |
補足
普段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で利用できる