AWS Command Line Interface
ユーザーガイド

AWS CLI で IAM ロールを引き受ける

AWS Identity and Access Management (IAM) ロールは、追加の (または異なる) アクセス許可や、別の AWS アカウントでアクションを実行するためのアクセス許可を IAM ユーザーが取得できるようにする認証ツールです。

IAM ロールを使用するように AWS Command Line Interface (AWS CLI) を設定するには、~/.aws/config ファイルでロールのプロファイルを定義します。

次の例は marketingadmin という名前のロールプロファイルを示しています。--profile marketingadmin を使用して (または、AWS_DEFAULT_PROFILE 環境変数 を使用してこれを指定して) コマンドを実行する場合、CLI はプロファイル user1 に割り当てられたアクセス権限を使用して Amazon リソースネーム (ARN) arn:aws:iam::123456789012:role/marketingadminrole のロールを引き受けます。このロールに割り当てられたアクセス権限で許可される任意のオペレーションを実行することができます。

[profile marketingadmin] role_arn = arn:aws:iam::123456789012:role/marketingadminrole source_profile = user1

このロールを引き受けるアクセス許可がある IAM ユーザー認証情報を含む別個の名前付きプロファイルを示す source_profile を指定する必要があります。前の例では、marketingadmin プロファイルは user1 プロファイル内の認証情報を使用しています。AWS CLI コマンドでのプロファイル marketingadmin の使用を指定すると、CLI はリンクされた user1 プロファイルの認証情報を自動的に検索し、その認証情報を使用して、指定された IAM ロールの一時的な認証情報を要求します。CLI は、sts:AssumeRole オペレーションをバックグラウンドで使用してこれを達成します。これらの一時的な認証情報は、次にリクエストされた CLI コマンドを実行するために使用されます。指定されたロールには、リクエストされた CLI コマンドを実行できる IAM アクセス許可ポリシーがアタッチされている必要があります。

Amazon EC2 インスタンス内から CLI コマンドを実行する場合、Amazon EC2 インスタンスプロファイルあるいは Amazon ECS コンテナロールにアタッチされた IAM ロールを使用することができます。これにより、存続期間の長いアクセスキーをインスタンスで保存することを回避できます。これを行うには、credential_source (source_profile の代わりに) を使用して、認証情報を検索する方法を指定します。credential_source 属性では、以下の値がサポートされます。

  • Environment – 環境変数から認証情報を取得するためです。

  • Ec2InstanceMetadata – Amazon EC2 インスタンスプロファイルにアタッチされた IAM ロールを使用するためです。

  • EcsContainer – Amazon ECS コンテナにアタッチされた IAM ロールを使用するためです。

次の例では、Amazon EC2 インスタンスプロファイルを参照することで引き受ける、同じ marketingadminrole ロールを示しています。

[profile marketingadmin] role_arn = arn:aws:iam::123456789012:role/marketingadminrole credential_source = Ec2InstanceMetadata

詳細については、「AWS CLI 設定変数」を参照してください。

ロールの設定と使用

IAM ロールを指定するプロファイルを使用してコマンドを実行すると、AWS CLI はソースプロファイルの認証情報を使用して AWS Security Token Service (AWS STS) を呼び出し、指定したロールの一時的な認証情報を要求します。ソースプロファイルのユーザーは、指定されたプロファイルのロール用の sts:assume-role を呼び出すアクセス許可を持っている必要があります。ロールにはソースプロファイルのユーザーがこのロールを引き受けることができる信頼関係が必要です。ロールの一時的な認証情報を取得して使用するプロセスを、一般にロールを引き受けると呼びます。

AWS Identity and Access Management ユーザーガイド』の「IAM ユーザーにアクセス許可を委任するロールの作成」の手順に従って、ユーザーが引き受けるアクセス許可を使用して、IAM で新しいロールを作成できます。ロールとソースプロファイルの IAM ユーザーが同じアカウントに存在する場合、ロールの信頼関係を設定するときに、独自のアカウント ID を入力することができます。

ロールを作成した後、IAM ユーザー (または AWS アカウントのユーザー) が引き受けることを許可するように信頼関係を変更します。

次の例では、ロールにアタッチできる信頼ポリシーを示します。このポリシーは、アカウント 123456789012 の任意の IAM ユーザーによるロールの引き受けを許可します。ただし、これはそのアカウントの管理者が明示的に sts:assumerole アクセス許可をそのユーザーに付与した場合に限ります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "sts:AssumeRole" } ] }

信頼ポリシーは、実際にはアクセス許可を付与しません。アカウントの管理者は、適切なアクセス許可を持つポリシーをアタッチすることによって、ロールを引き受けるアクセス許可を個々のユーザーに委任する必要があります。次の例では、IAM ユーザーにアタッチして、ユーザーが marketingadminrole ロールのみを引き受けることを許可するポリシーを示しています。ロールを引き受けるためにユーザーアクセスを付与することの詳細については、『IAM ユーザーガイド』の「ロールを切り替えるユーザーアクセス権限の付与」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::123456789012:role/marketingadminrole" } ] }

IAM ユーザーには、ロールプロファイルを使用して CLI コマンドを実行するための追加のアクセス許可は必要ありません。代わりに、コマンドを実行するためのアクセス権限は、ロールにアタッチされたアクセス権限によって提供されます。アクセス許可ポリシーをロールにアタッチして、どの AWS リソースに対してどのアクションを実行できるかを指定します。ロールにアクセス権限をアタッチすること (IAM ユーザーにも同様に機能) についての詳細は、『IAM ユーザーガイド』の「IAM ユーザーに対するアクセス権限の変更」を参照してください。

ロールプロファイル、ロールのアクセス許可、ロールの信頼関係およびユーザーアクセス許可が適切に設定されたので、コマンドラインで --profile オプションを呼び出してロールを使用できます。たとえば、次のコマンドは、このトピックの冒頭の例で定義された marketingadmin ロールにアタッチされたアクセス許可を使用して Amazon S3 ls コマンドを呼び出します。

$ aws s3 ls --profile marketingadmin

いくつかの呼び出しにロールを使用するには、コマンドラインから、現在のセッションに対して AWS_DEFAULT_PROFILE 環境変数を設定することができます。この環境変数が定義されている場合、各コマンドで --profile オプションを指定する必要はありません。

Linux, macOS, or Unix

$ export AWS_DEFAULT_PROFILE=marketingadmin

Windows

C:\> setx AWS_DEFAULT_PROFILE marketingadmin

IAM ユーザーおよびロールの設定の詳細については、『IAM ユーザーガイド』の「ID (ユーザー、グループ、ロール)」および「IAM ロール」を参照してください。

多要素認証を使用する

セキュリティを高めるには、ロールプロファイルを使用して呼び出しを試みるときに、多要素認証 (MFA) デバイスから生成された一回限りのキー、U2F デバイス、またはモバイルアプリケーションを指定するようにユーザーに要求することができます。

最初に、IAM ロールで信頼関係を変更して MFA を要求するように選択できます。これにより、すべてのユーザーは最初に MFA を使用して認証しなくてはロールを使用できなくなります。例として、次の例の Condition 行を参照してください。このポリシーでは、anika という名前の IAM ユーザーが、MFA を使用して認証した場合にのみ、ポリシーがアタッチされているロールを引き受けることを許可しています。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/anika" }, "Action": "sts:AssumeRole", "Condition": { "Bool": { "aws:multifactorAuthPresent": true } } } ] }

次に、ロールプロファイルに、ユーザーの MFA デバイスの ARN を指定する行を追加します。次のサンプル config ファイルエントリでは、2 つのロールプロファイルを示しています。どちらも IAM ユーザー anika のアクセスキーを使用してロール cli-role の一時的な認証情報をリクエストします。ユーザー anika には、ロールの信頼ポリシーによって付与されたロールを引き受けるためのアクセス権限があります。

[profile role-without-mfa] region = us-west-2 role_arn= arn:aws:iam::128716708097:role/cli-role source_profile=cli-user [profile role-with-mfa] region = us-west-2 role_arn= arn:aws:iam::128716708097:role/cli-role source_profile = cli-user mfa_serial = arn:aws:iam::128716708097:mfa/cli-user [profile anika] region = us-west-2 output = json

この mfa_serial 設定では、次に示すような ARN またはハードウェア MFA トークンのシリアル番号を使用できます。

最初のプロファイル role-without-mfa では、 MFA は不要です。ただし、前の例でロールにアタッチされた信頼ポリシーが MFA を必要とするため、このプロファイルを使用してコマンドを実行しても失敗します。

$ aws iam list-users --profile cli-role An error occurred (AccessDenied) when calling the AssumeRole operation: Access denied

2 番目のプロファイルエントリ role-with-mfa は、使用する MFA デバイスを識別します。このプロファイルを使用して CLI コマンドを実行すると、CLI からユーザーに対して、MFA デバイスによって提供されるワンタイムパスワード (OTP) の入力を求めるプロンプトが表示されます。MFA 認証が成功したらその後に、コマンドによってリクエストされたオペレーションが実行されます。OTP は画面に表示されません。

$ aws iam list-users --profile cli-role-mfa Enter MFA code for arn:aws:iam::123456789012:mfa/cli-user: { "Users": [ { ...

クロスアカウントロール

クロスアカウントロールとしてロールを設定することにより、IAM ユーザーが別のアカウントに属しているロールを引き受けることができるようにします。「IAM ユーザーにアクセス許可を委任するロールの作成」の説明に従って、ロールの作成中にロールタイプを [別の AWS アカウント] に設定します。必要に応じて、[MFA が必要] を選択します。[MFA が必要] オプションは、「多要素認証を使用する」で説明されているように、信頼関係の適切な条件を設定します。

外部 ID を使用して、アカウント間で誰がロールを引き受けるかをさらに制御する場合、ロールプロファイルに external_id パラメータを追加する必要もあります。これは通常、もう一方のアカウントが社外または組織外のユーザーによって制御される場合にのみ使用します。

[profile crossaccountrole] role_arn = arn:aws:iam::234567890123:role/SomeRole source_profile = default mfa_serial = arn:aws:iam::123456789012:mfa/saanvi external_id = 123456

詳細については、「AWS CLI 設定変数」を参照してください。

キャッシュされた認証情報のクリア

AWS CLI は、ロールを引き受けると、有効期限が切れるまで一時認証情報をキャッシュします。ロールの一時認証情報が取り消された場合、キャッシュを削除して、新しい認証情報の取得を AWS CLI に強制できます。

Linux, macOS, or Unix

$ rm -r ~/.aws/cli/cache

Windows

C:\> del /s /q %UserProfile%\.aws\cli\cache