こんにちは、阿形です。
今回はAWS Single Sign-On(AWS SSO)でCLIを使うときの方法です。
SSOのユーザーポータルから認証情報を取得する方法と、AWS CLIから直接認証情報を取得する方法があります。
どちらもSSOでCLIを利用する方法なのに、AWSのドキュメントでは別々のところに書かれていてアクセスが悪いなと思ったので、こちらにまとめました。
こちらは非常に簡単です。表示される値を利用して設定を行うだけです。
ただし、SSOの認証には期限が存在しています。(デフォルトは1時間、設定で12時間まで延長可能)
期限が切れると再度認証が必要となるので、使用頻度が高くなく、使用時間も短い場合に利用するのが良いでしょう。
CLIでそのまま実行するだけなので、一番簡単です。認証情報のリスト(macOS and Linuxの場合はexport …となっている部分)をクリックするとコピーされるので、そのままCLIでペーストして実行するだけです。
~/.aws/credentialsに認証情報を書く設定です。認証情報をコピーしたcredeitialsファイルにペーストします。
それぞれの値をAWSサービスクライアントに設定します
ユーザーポータルから認証情報を取得する方法は以上です。
こちらはCLIから直接アクセスできます。
こちらはユーザーポータルからアクセスする方法に比較して以下のようなメリットがあるので、頻繁にCLIを使用する方はこちらのほうが向いているでしょう。
自動と手動の設定方法がありますが、ここでは自動設定の方法だけ紹介します。
以下のコマンドを実行し、SSO start URLとSSO regionを入力します。
SSO start URLはSSOのユーザーポータルのURL(https://my-sso-portal.awsapps.com/start のようなURL )です。
SSO regionはSSOが設定されているリージョンです。アクセスしたいリージョンではないので注意が必要です。ここの指定を間違えると、ブラウザでステップで「Invalid grant provided」というエラーになります。
$ aws configure sso
SSO start URL [None]: [None]: https://my-sso-portal.awsapps.com/start
SSO region [None]:us-east-1
入力すると以下のようなメッセージが表示され、自動的にブラウザが開きます。
自動的にブラウザが開かなかった場合は、メッセージどおりに https://device.sso.us-east-1.amazonaws.com/ をブラウザで開き、表示されているコードを入力します。
Attempting to automatically open the SSO authorization page in your default browser.
If the browser does not open or you wish to use a different device to authorize this request, open the following URL:
https://device.sso.us-east-1.amazonaws.com/
Then enter the code:
XXXX-XXXX
ブラウザで認証処理が進み、「Authorize request」という画面で「Allow」というボタンが表示されます。
この「Allow」を押し問題がなければ、「Request approved」と表示されます。なお、SSO regionの指定が間違っていると、ここで「Invalid grant provided」というエラーになります。
ブラウザでの処理が正常に終われば、CLIに戻ります。
CLIにはアクセス可能なAWSアカウントのリストが表示されますので、これを矢印キーで選択しEnterを押して決定します。リストに一つしかない場合は自動的に選択されて次に進みます。
There are 2 AWS accounts available to you.
> DeveloperAccount, developer-account-admin@example.com (123456789011)
ProductionAccount, production-account-admin@example.com (123456789022)
次に使用するIAMロールを選択します。こちらもリストに一つしかない場合は自動的に選択されて次に進みます。
Using the account ID 123456789011
There are 2 roles available to you.
> ReadOnly
FullAccess
続いてdefault client Region、default output format、profile nameを設定します。
これは通常のCLIの利用時にも設定するものと同じです。
なお、環境変数AWS_PROFILEが設定されていると、profile nameは聞かれずに環境変数の値が自動的に使用されるので注意が必要です。
CLI default client Region [None]: us-west-2
CLI default output format [None]: json
CLI profile name [123456789011_ReadOnly]: my-dev-profile
最後に以下のようなメッセージ表示され設定は完了です。
メッセージにあるようにコマンドに–profileをつけて実行してみましょう。
To use this profile, specify the profile name using --profile, as shown:
aws s3 ls --profile my-dev-profile
AWS CLIから直接認証情報を取得する方法は以上です。