AWS CloudTrail
ユーザーガイド (Version 1.0)

ロールを割り当てる

各アカウントで作成した各ロールを割り当てる IAM ユーザーをロールごとに個別に指定し、各 IAM ユーザーに適切なアクセス許可があることを確認する必要があります。

IAM ユーザーとロール

アカウント A でシナリオ 1 および 2 に対して必要なロールとポリシーを作成した後は、アカウント B、C、Z のそれぞれで IAM ユーザーを指定する必要があります。各 IAM ユーザーは、ログファイルにアクセスするための適切なロールをプログラムで割り当てられます。つまり、アカウント B のユーザーはアカウント B 用に作成されたロールを、アカウント C のユーザーはアカウント C 用に作成されたロールを、アカウント Z のユーザーはアカウント Z 用に作成されたロールを、それぞれ割り当てられます。ユーザーがロールを割り当てられるとき、AWS は、ロールに関連付けられたアクセス ポリシーによって付与される権限に応じて、ログファイルのリスト、取得、コピー、または削除を要求するために使用できる一時的な認証情報を返します。

IAM ユーザーの使用の詳細については、「IAM ユーザーとグループの使用」を参照してください。

シナリオ 1 と 2 の主な違いは、各シナリオで各 IAM ロールに対して作成するアクセスポリシーです。

IAM ユーザーに対するアクセス許可ポリシーを作成する

ロールによって許可されるアクションを実行するには、IAM ユーザーは、AWS STS AssumeRole API を呼び出すアクセス許可を持っている必要があります。IAM ユーザーごとのユーザーベースのポリシーを編集し、ユーザーに適切なアクセス許可を付与する必要があります。つまり、IAM ユーザーにアタッチされたポリシーの Resource 要素を設定します。以下の例では、アカウント A によって以前に作成された "Test" という名前のロールを割り当てることをユーザーに許可する、アカウント B の IAM ユーザーに対するポリシーを示します。

必要なポリシーを IAM ロールにアタッチするには

  1. AWS マネジメントコンソール にサインインして、IAM コンソールを開きます。

  2. アクセス許可を変更するユーザーを選択します。

  3. [Permissions] タブを選択します。

  4. [Custom Policy] を選択します。

  5. [Use the policy editor to customize your own set of permissions] を選択します。

  6. ポリシーの名前を入力します。

  7. 以下のポリシーを、ポリシードキュメント用に提供された領域にコピーします。

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

重要

上記のようにロールを割り当てることができるのは、IAM ユーザーだけです。AWS ルートアカウントの認証情報を使用してロールを割り当てようとすると、アクセスが拒否されます。

AssumeRole を呼び出す

AWS STS AssumeRole API を呼び出すアプリケーションを作成し、ロールセッション名、割り当てるロールの Amazon リソース番号 (ARN)、オプションの外部 ID を渡すことにより、アカウント B、C、Z のユーザーにロールを割り当てることができます。ロールセッション名は、アカウント A が割り当てるロールを作成するときに、アカウント A によって定義されます。外部 ID は (ある場合)、アカウント Z によって定義され、ロールの作成時に含めるようにアカウント A に渡されます。詳細については、IAM ユーザーガイド の「AWS リソースへのアクセス権をサードパーティーに付与するときに外部 ID を使用する方法」を参照してください。IAM コンソールを開くことによって、アカウント A から ARN を取得できます。

IAM コンソールを使用してアカウント A で ARN の値を探すには

  1. [Roles] を選択します。

  2. 調べるロールを選択します。

  3. [Summary] セクションで [Role ARN] を検索します。

AssumeRole API は、アカウント B、C、Z のユーザーがアカウント A のリソースにアクセスするために使用できる一時的な認証情報を返します。この例でアクセスするリソースは、Amazon S3 バケットと、そのバケットに含まれるログファイルです。この一時的な認証情報には、ロールのアクセスポリシーで定義したアクセス許可があります。

次の Python の例 (AWS SDK for Python (Boto) を使用) では、AssumeRole を呼び出す方法、および返された一時的な認証情報を使用して、アカウント A によって管理されるすべての Amazon S3 バケットの一覧を取得する方法を示します。

import boto3 # Create an STS client sts_client = boto3.client('sts') # Assume a role defined on an external account. The role specifies the # permissions that are allowed on the account. # Replace EXTERNAL_ACCOUNT_NUMBER with the account number of the external # account. # Replace ROLE_NAME with the name of the role defined on the external account. # Optional, but recommended: Specify a unique ExternalId= string assigned by # the external account. response = sts_client.assume_role(RoleArn='arn:aws:iam::EXTERNAL_ACCOUNT_NUMBER:role/ROLE_NAME', RoleSessionName='AssumeRoleSession1') # Reference the temporary credentials section of the response tempCredentials = response['Credentials'] # Use the temporary credentials to create an S3 resource that can access the # external account. The assumed role's permissions must allow the desired S3 # access. s3_resource = boto3.resource('s3', aws_access_key_id=tempCredentials['AccessKeyId'], aws_secret_access_key=tempCredentials['SecretAccessKey'], aws_session_token=tempCredentials['SessionToken']) # Use the S3 resource to list the external account's buckets. for bucket in s3_resource.buckets.all(): print(bucket.name)