ブラウザが使える状況での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をクリックする。

aws sso

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

aws sso exports

クリックするとクリップボードにコピーするので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>
...