AWS シングルサインオン を使用するための AWS CLI の設定 - AWS Command Line Interface

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

AWS シングルサインオン を使用するための AWS CLI の設定

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

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

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

AWS SSO の詳細については、「AWS シングルサインオン ユーザーガイド」を参照してください。

このトピックでは、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 SSO ディレクトリをホストする AWS リージョンを指定します。

$ 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 SSO アカウントに関連付けられたアクセス権限によって、AWS CLI が、AWS SSO で使用することが許可されている AWS アカウントとロールを取得して表示できるようになります。

次に、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/config の典型的な AWS SSO プロファイルは、次の例のようになります。

[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 アカウントまたはロールを指す、複数の AWS SSO 対応名前付きプロファイルを作成できます。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 SSO 認証情報に基づくすべての AWS 一時認証情報をすぐに削除することもできます。これにより、これらの認証情報は将来のコマンドで使用できなくなります。

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

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