AWS Command Line Interface
ユーザーガイド

IAM ロールを引き受ける

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

IAM ロールを使用するように AWS Command Line Interface を設定するには、~/.aws/config ファイルでロールのプロファイルを定義します。次の例では、marketingadmin プロファイルを指定するコマンドの実行時に引き受ける marketingadmin という名前のロールプロファイルを示しています。

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

このロールは、IAM ユーザー認証情報に加えてロールを引き受けるためのアクセス許可を含む別個の名前付きプロファイルにリンクする必要があります。前の例の marketingadmin プロファイルは source-profile フィールドを使用して user1 プロファイルにリンクされます。AWS CLI コマンドでのプロファイル marketingadmin の使用を指定すると、CLI はリンクされた user1 プロファイルの認証情報を自動的に検索し、その認証情報を使用して、指定された IAM ロールの一時的な認証情報を要求します。これらの一時的な認証情報は、次に CLI コマンドを実行するために使用されます。指定されたロールには、CLI コマンドを実行できる IAM アクセス許可ポリシーがアタッチされている必要があります。

ロールの設定と使用

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 ユーザーは marketingadmin ロールのみを引き受けることができます。

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

IAM ユーザーには、ロールプロファイルを使用して CLI コマンドを実行するための追加のアクセス許可は必要ありません。代わりに、コマンドの実行に必要なアクセス許可としてそのロールにアタッチされたアクセス許可が使用されます。しかし、ロールを使用せずに AWS リソースにユーザーがアクセスできるようにする場合は、追加のインラインポリシーまたは管理ポリシーを IAM ユーザーにアタッチしてそのリソースに対するアクセス許可を付与する必要があります。

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

$ aws s3 ls --profile marketingadmin

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

Linux, macOS, or Unix

$ export AWS_PROFILE=marketingadmin

Windows

C:\> set AWS_PROFILE=marketingadmin

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

多要素認証を使用する

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

最初に、多要素認証を要求するように IAM ロールで信頼関係を変更します。例として、次のサンプルの Condition 行を参照してください。

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

次に、ユーザーの MFA デバイスの ARN を指定する、ロールプロファイルに行を追加します。

[profile marketingadmin] role_arn = arn:aws:iam::123456789012:role/marketingadmin source_profile = default mfa_serial = arn:aws:iam::123456789012:mfa/saanvi

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

クロスアカウントのロール

クロスアカウントロールとしてロールを設定することにより、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 に強制できます。

Linux, macOS, or Unix

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

Windows

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