AWS Identity and Access Management
ユーザーガイド

IAM ロールへの切り替え (AWS API)

ロールは、AWS リソースへのアクセスに使用できる一連のアクセス許可を指定します。その点では、IAM ユーザーに似ています。ロールを引き受けることで、必要なタスクを実行したり、AWS リソースを操作したりするアクセス許可がプリンシパル (ユーザーまたはアプリケーション) に付与されます。ロールは、自身のアカウントのロールでも、他の AWS アカウントのロールでもかまいません。ロールとその利点、およびロールを作成して設定する方法については、「IAM ロール」および「IAM ロールの作成」を参照してください。ロールを引き受ける別の方法については、「IAM ロールを使用する」を参照してください。

重要

IAM ユーザーのアクセス許可および引き受けるロールは、累積されません。同時に有効になるアクセス権限のセットは 1 つのみです。ロールを引き受けると、以前のユーザーまたはロールのアクセス許可が一時的に無効になり、切り替え後のロールに割り当てられたアクセス許可が有効になります。そのロールを終了すると、自動的に元のアクセス許可が復元されます。

ロールを引き受けるため、アプリケーションは AWS STS AssumeRole API オペレーションを呼び出して、使用するロールの ARN を渡します。このオペレーションでは、一時的な認証情報で新しいセッションを作成します。このセッションのアクセス許可は、そのロールのアイデンティティベースのポリシーと同じです。

AssumeRole を呼び出すと、必要に応じてセッションポリシーを渡すことができます。セッションポリシーは、ロールまたはフェデレーティッドユーザーの一時セッションをプログラムで作成する際にパラメータとして渡す高度なポリシーです。結果として得られるセッションには、ロールのアイデンティティベースのポリシーおよびセッションポリシーの両方で付与されるアクセス許可のみが含まれます。セッションポリシーは、一時的な認証情報を他のユーザーに提供する必要があるときに役立ちます。他のユーザーは、ロールの一時的な認証情報を以降の AWS API コールで使用し、ロールを所有するアカウント内のリソースにアクセスできます。セッションポリシーを使用して、想定されているロールのアイデンティティベースのポリシーによって許可されている以上のアクセス許可を付与することはできません。AWS でロールの有効なアクセス許可を決定する方法の詳細については、「 ポリシーの評価論理」を参照してください。


      PermissionsWhenPassingRoles_Diagram

IAM ユーザーまたはすでにロールを使用している外部で認証されたユーザー (SAML または OIDC) としてサインインすると、AssumeRole を呼び出すことができます。ロールを使用して 2 つ目のロールを引き受ける、ロールの連鎖を使用することもできます。AWS アカウントのルートユーザー としてサインインしているときに、ロールを引き受けることはできません。

デフォルトでは、ロールセッションは 1 時間です。AWS STS AssumeRole* API オペレーションを使用してこのロールを引き受ける場合は、DurationSeconds パラメータの値を指定できます。この値は 900 秒 (15 分) からロールの最大セッション期間設定までの範囲を指定できます。ロールの最大値を確認する方法については、「ロールの最大セッション期間設定の表示」を参照してください。

ロールの連鎖を使用すると、セッションは最長である 1 時間に制限されます。この場合 DurationSeconds パラメータを使用して 1 時間より大きい値を指定すると、オペレーションは失敗します。

注記

セキュリティ上の目的で、AWS CloudTrail を使用して、アカウントのロールの使用を監査することができます。AssumeRole の呼び出しには、長さが 2 ~ 64 文字のロールセッション名を含める必要があります。名前には、文字、数字、および =,.@- の文字を使用できます。ロールセッション名を CloudTrail ログで使用することで、一時的なセキュリティ認証情報によって実行されるアクションが特定されます。詳細については、『AWS CloudTrail User Guide』の「CloudTrail イベントリファレンス」を参照してください。

AWS への Boto3 インターフェイス (AWS SDK for Python (Boto) V3) を使用する以下の Python の例では、AssumeRole を呼び出す方法を示しています。AssumeRole によって返される一時的セキュリティ認証情報を使用して、ロールを所有するアカウントのすべての Amazon S3 バケットを一覧表示する方法も示しています。

import boto3 # The calls to AWS STS AssumeRole must be signed with the access key ID # and secret access key of an existing IAM user or by using existing temporary # credentials such as those from antoher role. (You cannot call AssumeRole # with the access key for the root account.) The credentials can be in # environment variables or in a configuration file and will be discovered # automatically by the boto3.client() function. For more information, see the # Python SDK documentation: # http://boto3.readthedocs.io/en/latest/reference/services/sts.html#client # create an STS client object that represents a live connection to the # STS service sts_client = boto3.client('sts') # Call the assume_role method of the STSConnection object and pass the role # ARN and a role session name. assumed_role_object=sts_client.assume_role( RoleArn="arn:aws:iam::account-of-role-to-assume:role/name-of-role", RoleSessionName="AssumeRoleSession1" ) # From the response that contains the assumed role, get the temporary # credentials that can be used to make subsequent API calls credentials=assumed_role_object['Credentials'] # Use the temporary credentials that AssumeRole returns to make a # connection to Amazon S3 s3_resource=boto3.resource( 's3', aws_access_key_id=credentials['AccessKeyId'], aws_secret_access_key=credentials['SecretAccessKey'], aws_session_token=credentials['SessionToken'], ) # Use the Amazon S3 resource object that is now configured with the # credentials to access your S3 buckets. for bucket in s3_resource.buckets.all(): print(bucket.name)