ブラウザが使える状況でのaws sso loginコマンドによる通常の認証
AWS SSOで認証するにはaws sso loginコマンドを使う。
$ aws sso login --profile <profile-name>
<profile-name>は~/.aws/configに設定したプロファイル名を指定する。
~/.aws/configに以下のように設定する。
[profile <profile-name>]
sso_start_url = <sso-start-url>
sso_region = <region>
sso_account_id = <account-id>
sso_role_name = <role-name>
region = <region>
output = json
<profile-name>は任意の名前をつける。<sso-start-url>はAWS SSOのStart URL(https://xxxxxxxxxxxxx.awsapps.com/start)、<region>はAWSリージョン、<account-id>はAWSアカウントID、<role-name>はAWS SSOで使用するロール名を指定する。
この状態でaws sso login --profile <profile-name>を実行すると上記のprofileの設定を使って認証が開始し、ブラウザが開く。
ブラウザで認証をおこなうとターミナル側で認証情報が取得される。
認証が成功するとその権限でAWS CLIを実行できる。
$ aws s3 ls --profile <profile-name>
...
WSL2のLinuxでブラウザが使えない状況
WSL2のLinuxでブラウザをインストールしていない場合などは上記の手順が使えない。
AWS SSOによる認証をWSL2の外部で実行し、その認証情報を利用する必要がある。
ブラウザが使えない状況でAWS SSOで認証してAWS CLIを実行する方法
ブラウザが使えない状況でもAWS SSOで認証した権限を使ってAWS CLIを実行する方法を2つ説明する。
方法1: Windows側のブラウザで認証情報を取得する
Windows側のブラウザでAWS SSOにログインして認証情報を取得する。
AWS SSOのStart URLにアクセスしてログインする。
取得したいロールの右のCommand line or programmatic accessをクリックする。

ダイアログに指定した権限のアカウントの環境変数を設定するためのexportコマンドが表示される。

クリックするとクリップボードにコピーするのでWSL2のLinux側に貼り付けて実行する。
以下のような環境変数が設定される。
export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXX
export AWS_SESSION_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
この環境変数を設定した状態でAWS CLIを実行すると認証情報が使われる。
$ aws s3 ls
...
方法2: aws sso loginの–no-browserオプションで認証する
aws sso loginコマンドに--no-browserオプションを指定するとブラウザを使わずに認証できる。
$ aws sso login --profile <profile-name> --no-browser
Please visit the following URL:
https://device.sso.ap-northeast-1.amazonaws.com/
Then enter the code:
XXXX-XXXX
Alternatively, you may visit the following URL which will autofill the code upon loading:
https://device.sso.ap-northeast-1.amazonaws.com/?user_code=XXXX-XXXX
Please visit the following URL:に続くURLへWindows側のブラウザでアクセスする。
その画面でログインし、トークンが求められたらThen enter the code:に続くコードを入力すると認証が完了する。
その状態でAWS CLIを実行すると認証情報が使われる。
$ aws s3 ls --profile <profile-name>
...
