日本語 English
インターステラ株式会社の技術ブログです

AWS Single Sign-OnでCLIを使う

AWS SSO

こんにちは、阿形です。

今回はAWS Single Sign-On(AWS SSO)でCLIを使うときの方法です。

SSOのユーザーポータルから認証情報を取得する方法と、AWS CLIから直接認証情報を取得する方法があります。
どちらもSSOでCLIを利用する方法なのに、AWSのドキュメントでは別々のところに書かれていてアクセスが悪いなと思ったので、こちらにまとめました。

ユーザーポータルから認証情報を取得する方法

こちらは非常に簡単です。表示される値を利用して設定を行うだけです。
ただし、SSOの認証には期限が存在しています。(デフォルトは1時間、設定で12時間まで延長可能)
期限が切れると再度認証が必要となるので、使用頻度が高くなく、使用時間も短い場合に利用するのが良いでしょう。

設定手順

  1. SSOのユーザーポータル(SSOのログインに使用している https://my-sso-portal.awsapps.com/start のようなURL )にブラウザでアクセスします。
  2. AWSアカウントのアイコンをクリックしてアカウントのリストを表示します。
  3. 認証情報を取得するアカウントをクリックします。
  4. アカウント名の下に表示されるロール名の横にある、「Command line or programmatic access」をクリックします。
  5. Get credentials for <Role> というダイアログが表示されます。この画面の「macOS and Linux」、「Windows」、「PowerShell」のいずれか使用したい環境を選択します。
  6. 表示された認証情報を使用してCLIで設定します。以下のOptionのいずれかを選んで設定します。

Option 1

CLIでそのまま実行するだけなので、一番簡単です。認証情報のリスト(macOS and Linuxの場合はexport …となっている部分)をクリックするとコピーされるので、そのままCLIでペーストして実行するだけです。

Option 2

~/.aws/credentialsに認証情報を書く設定です。認証情報をコピーしたcredeitialsファイルにペーストします。

Option 3

それぞれの値をAWSサービスクライアントに設定します

ユーザーポータルから認証情報を取得する方法は以上です。

AWS CLIから直接認証情報を取得する方法

こちらはCLIから直接アクセスできます。
こちらはユーザーポータルからアクセスする方法に比較して以下のようなメリットがあるので、頻繁にCLIを使用する方はこちらのほうが向いているでしょう。
自動と手動の設定方法がありますが、ここでは自動設定の方法だけ紹介します。

  • 途中ブラウザを開く認証処理があるものの、ほとんどの処理をCLIで進められる
  • SSOの認証期限が切れた場合も、CLIからコマンド一つで再ログインできる
  • 複数のアカウントを切り替える場合も一度SSOログインしていると簡単

設定手順

以下のコマンドを実行し、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から直接認証情報を取得する方法は以上です。

SNSでフォローする