AWS Single Sign-On を使用するための AWS CLI の設定 - AWS Command Line Interface

Python 2.7、3.4、および 3.5 は、AWS CLI バージョン 1 に対して非推奨になっています。詳細については、「AWS CLI バージョンについて」の AWS CLI バージョン 1 セクションを参照してください。

AWS Single Sign-On を使用するための AWS CLI の設定

この機能は、AWS CLI バージョン 2 でのみ使用できます。

次の機能を使用できるのは、AWS CLI バージョン 2 を使用している場合のみです。AWS CLI バージョン 1 を実行している場合は使用できません。バージョン 2 をインストールする方法の詳細については、「AWS CLI バージョン 2 のインストール、更新、アンインストール」を参照してください。

組織が AWS Single Sign-On (AWS SSO) を使用している場合、ユーザーはアクティブディレクトリ、組み込み AWS SSO ディレクトリ、または AWS SSO に接続された別の iDPにサインインして、AWS CLI コマンドの実行を可能にする AWS Identity and Access Management (IAM) ロールにマップできます。使用する iDP に関係なく、AWS SSO によってそれらの区別がなくなり、以下で説明するように、すべての iDP が AWS CLI で機能します。例えば、ブログ記事「The Next Evolution in AWS Single Sign-On」で説明されているように、Microsoft Azure AD を接続できます。

AWS SSO の詳細については、『AWS Single Sign-On ユーザーガイド』を参照してください。

このトピックでは、AWS CLI コマンドを実行するための短期的な認証情報を取得するために AWS SSO を使用してユーザーを認証するように AWS CLI を設定する方法について説明します。以下のセクションで構成されます。

を使用するための名前付きプロファイルの設定AWS SSO

AWS SSO からのロールを使用するように、1 つ、または複数の AWS CLI 名前付きプロファイル を設定できます。複数のプロファイルを作成して設定して、それぞれが異なる AWS SSO ユーザーポータルまたは SSO 定義のロールを使用するように設定できます。

プロファイルを設定するには、次の方法があります。

  • 自動: コマンド aws configure sso を使用します。

  • 手動: 名前付きプロファイルを保存する .aws/config ファイルを編集します。

自動設定

AWS SSO 有効化されたプロファイルを AWS CLI に追加するには、次のコマンドを実行し、AWS SSO 開始 URL と AWS ディレクトリをホストする AWS SSO リージョンを指定します。

$ aws configure sso SSO start URL [None]: [None]: https://my-sso-portal.awsapps.com/start SSO region [None]:us-east-1

AWS CLI は、デフォルトのブラウザを開き、AWS SSO アカウントのログインプロセスを開始します。

SSO authorization page has automatically been opened in your default browser. Follow the instructions in the browser to complete this authorization request.

AWS CLI がブラウザを開くことができない場合は、ログインプロセスを手動で開始する方法を示す次のメッセージが表示されます。

Using a browser, open the following URL: https://my-sso-portal.awsapps.com/verify and enter the following code: QCFK-N451

AWS SSO は、コードを使用して AWS SSO セッションを現在の AWS CLI セッションに関連付けます。AWS SSO ブラウザのページに、AWS SSO アカウントの認証情報を使用してサインインするように求められます。これにより、AWS CLI アカウントに関連付けられたアクセス権限によって、AWS SSO が、AWS で使用することが許可されている AWS SSO アカウントとロールを取得して表示できるようになります。

次に、AWS CLI に使用可能な AWS アカウントが表示されます。使用する権限のあるアカウントが 1 つだけの場合、AWS CLI はそのアカウントを自動的に選択し、プロンプトをスキップします。使用できる AWS アカウントは、AWS SSO のユーザー設定によって決まります。

There are 2 AWS accounts available to you. > DeveloperAccount, developer-account-admin@example.com (123456789011) ProductionAccount, production-account-admin@example.com (123456789022)

矢印キーを使用して、このプロファイルで使用するアカウントを選択します。左の 「>」文字は、現在の選択肢を指します。[Enter] キーを押して、選択を行います。

次に、AWS CLI がアカウントの選択を確認し、選択されたアカウントで使用できる IAM ロールを表示します。選択したアカウントにロールが 1 つしかない場合は、AWS CLI はそのロールを自動的に選択し、プロンプトをスキップします。使用できるロールは、 のユーザー設定によって決まりますAWS SSO

Using the account ID 123456789011 There are 2 roles available to you. > ReadOnly FullAccess

前と同様に、矢印キーを使用して、このプロファイルで使用する IAM ロールを選択します。左の 「>」文字は、現在の選択肢を指します。Enter キーを押して、選択を行います。

AWS CLI によって、ロールの選択が確認されます。

Using the role name "ReadOnly"

これで、デフォルトの出力形式、コマンドの送信先となるデフォルトの AWS リージョン、およびプロファイルの名前 (ローカルコンピュータに定義されているすべてのプロファイルからこのプロファイルを参照できるようにするため) を指定して、プロファイルの設定を完了できます。次の例では、デフォルトのリージョン、デフォルトの出力形式、プロファイルの名前を入力します。または、<ENTER> キーを押して、角括弧の間に表示されるデフォルト値を選択することもできます。推奨されるプロファイル名は、アカウント ID 番号、アンダースコア、ロール名が続きます。

CLI default client Region [None]: us-west-2<ENTER> CLI default output format [None]: json<ENTER> CLI profile name [123456789011_ReadOnly]: my-dev-profile<ENTER>
注記

プロファイル名として default を指定した場合、このプロファイルは、AWS CLI コマンドを実行し、プロファイル名を指定しない場合に使用されるプロファイルになります。

最後のメッセージは、完了したプロファイル設定について説明しています。

このプロファイルを使用するには、次のように --profile を使用してプロファイル名を指定します。

aws s3 ls --profile my-dev-profile

上記のエントリの例では、次の例のような名前付きプロファイルが ~/.aws/config で生成されます。

[profile my-dev-profile] sso_start_url = https://my-sso-portal.awsapps.com/start sso_region = us-east-1 sso_account_id = 123456789011 sso_role_name = readOnly region = us-west-2 output = json

この時点で、一時認証情報を要求するために使用できるプロファイルとなります。コマンドを実行するために必要な一時認証情報を実際に要求して取得するには、aws sso login コマンドを実行する必要があります。手順については、「AWS SSO 有効化された名前付きプロファイルの使用」を参照してください。

注記

指定したプロファイルを使用して AWS CLI コマンドを実行することもできます。現在 AWS SSO ポータルにログインしていない場合は、aws sso login コマンドを手動で実行した場合と同様に、ログインプロセスが自動的に開始されます。

手動設定

名前付きプロファイルに手動で AWS SSO サポートを追加するには、ファイル ~/.aws/config (Linux または macOS) または %USERPROFILE%/.aws/config (Windows) のプロファイル定義に次のキーと値を追加する必要があります。

sso_start_url

組織の AWS SSO ユーザーポータルを指す URL。

sso_start_url = https://my-sso-portal.awsapps.com/start
sso_region

AWS SSO ポータルホストが含まれる AWS リージョン。これはデフォルトの CLI region パラメータとは別で、異なるリージョンにすることができます。

sso_region = us-west-2
sso_account_id

このプロファイルで使用する IAM ロールが含まれる AWS アカウント ID。

sso_account_id = 123456789011
sso_role_name

このプロファイルを使用するときのユーザーのアクセス許可を定義する IAM ロールの名前。

sso_role_name = ReadAccess

これらのキーが存在すると、このプロファイルは、AWS SSO がユーザーの認証に使用するプロファイルとして識別されます。

.aws/config ファイル内で有効なその他のキーや値 (regionoutputs3 など) を含めることもできます。ただし、role_arnaws_secret_access_key など、認証情報に関連する値を含めることはできません。含めた場合は、AWS CLI はエラーを生成します。

したがって、AWS SSO の典型的な .aws/config プロファイルは、次の例のようになります。

[profile my-dev-profile] sso_start_url = https://my-sso-portal.awsapps.com/start sso_region = us-east-1 sso_account_id = 123456789011 sso_role_name = readOnly region = us-west-2 output = json

この時点で、一時認証情報を要求するために使用できるプロファイルとなります。ただし、まだ AWS CLI サービスコマンドを実行することはできません。まず、コマンドを使用して、実際に aws sso login コマンドを実行するために必要な一時認証情報を要求および取得する必要があります。手順については、次のセクション、「AWS SSO 有効化された名前付きプロファイルの使用」を参照してください。

AWS SSO 有効化された名前付きプロファイルの使用

このセクションでは、前のセクションで作成した AWS SSO プロファイルの使用方法について説明します。

サインインと一時認証情報の取得

名前付きプロファイルを自動または手動で設定したら、そのプロファイルを呼び出してから、一時的な認証情報を から要求できますAWS AWS CLI サービスコマンドを実行する前に、一時認証情報のセットを取得してキャッシュする必要があります。これらの一時認証情報を取得するには、次のコマンドを実行します。

$ aws sso login --profile my-dev-profile

AWS CLI がデフォルトブラウザを開き、AWS SSO ログインを確認します。

SSO authorization page has automatically been opened in your default browser. Follow the instructions in the browser to complete this authorization request. Successully logged into Start URL: https://my-sso-portal.awsapps.com/start

現在 AWS SSO アカウントにサインインしていない場合は、AWS SSO ユーザー名とパスワードを入力する必要があります。

AWS CLI がブラウザを開くことができない場合は、ブラウザを自分で開き、指定したコードを入力するように求められます。

$ aws sso login --profile my-dev-profile Using a browser, open the following URL: https://my-sso-portal.awsapps.com/verify and enter the following code: QCFK-N451

AWS CLI は、デフォルトのブラウザを開き (または選択したブラウザを手動で開く)、指定されたコードを入力します。ウェブページでは、AWS SSO 認証情報の入力を求められます。

AWS SSO セッション認証情報はキャッシュされ、有効期限のタイムスタンプが含まれます。認証情報の有効期限が切れると、AWS CLI は 再度 AWS SSO へのサインインを要求します。

AWS SSO 認証情報が有効な場合、AWS CLI はそれらを使用して、プロファイルに指定された IAM ロールの AWS 一時認証情報を安全に取得します。

Welcome, you have successfully signed-in to the AWS-CLI.

AWS SSO 有効化されたプロファイルでコマンドを実行する

これらの一時認証情報を使用して、関連付けられた名前付きプロファイルで AWS CLI コマンドを呼び出すことができます。次の例は、指定したアカウントの一部である引き受けたロールでコマンドが実行されたことを示しています。

$ aws sts get-caller-identity --profile my-dev-profile { "UserId": "AROA12345678901234567:test-user@example.com", "Account": "123456789011", "Arn": "arn:aws:sts::123456789011:assumed-role/AWSPeregrine_readOnly_12321abc454d123/test-user@example.com" }

AWS SSO にサインインしていて、キャッシュされた認証情報が期限切れでない限り、AWS CLI は必要に応じて期限切れ AWS の一時認証情報を自動的に更新します。ただし、AWS SSO 認証情報の有効期限が切れた場合は、AWS SSO アカウントに再度ログインして明示的に更新する必要があります。

$ aws s3 ls --profile my-sso-profile Your short-term credentials have expired. Please sign-in to renew your credentials SSO authorization page has automatically been opened in your default browser. Follow the instructions in the browser to complete this authorization request.

それぞれが異なる AWS SSO アカウントまたはロールを指す、複数の AWS 対応名前付きプロファイルを作成できます。aws sso login このコマンドは、一度に複数のプロファイルに対しても使用できます。複数のプロファイルのいずれかが同じ AWS SSO ユーザーアカウントを共有している場合は、その AWS SSO ユーザーアカウントに一度だけログインする必要があります。その後、複数のプロファイルのすべてが AWS SSO キャッシュされた認証情報の 1 つのセットを共有します。

# The following command retrieves temporary credentials for the AWS account and role # specified in one named profile. If you are not yet signed in to AWS SSO or your # cached credentials have expired, it opens your browser and prompts you for your # AWS SSO user name and password. It then retrieves AWS temporary credentials for # the IAM role associated with this profile. $ aws sso login --profile my-first-sso-profile # The next command retrieves a different set of temporary credentials for the AWS # account and role specified in the second named profile. It does not overwrite or # in any way compromise the first profile's credentials. If this profile specifies the # same AWS SSO portal, then it uses the SSO credentials that you retrieved in the # previous command. The AWS CLI then retrieves AWS temporary credentials for the # IAM role associated with the second profile. You don't have to sign in to # AWS SSO again. $ aws sso login --profile my-second-sso-profile # The following command lists the Amazon EC2 instances accessible to the role # identified in the first profile. $ aws ec2 describe-instances --profile my-first-sso-profile # The following command lists the Amazon EC2 instances accessible to the role # identified in the second profile. $ aws ec2 describe-instances --profile my-second-sso-profile

AWS SSO セッションからサインアウトする

AWS SSO 対応プロファイルを使用し終わったら、何もせず、AWS 一時認証情報と AWS SSO 認証情報の有効期限が切れるようにすることができます。ただし、次のコマンドを実行して、SSO 認証情報キャッシュフォルダ内のキャッシュされたすべての認証情報、および AWS 認証情報に基づくすべての AWS SSO 一時認証情報をすぐに削除することもできます。これにより、これらの認証情報は将来のコマンドで使用できなくなります。

$ aws sso logout Successfully signed out of all SSO profiles.

後で AWS SSO 有効化されたプロファイルの 1 つでコマンドを実行する場合は、aws sso login コマンドを再度実行し (前のセクションを参照)、使用するプロファイルを指定する必要があります。