メニュー
AWS Identity and Access Management
ユーザーガイド

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

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

このセクションでは、AWS API を使用するコード内でロールを切り替える方法について説明します。

すべてのアクセスキーとトークンは例にすぎず、実際にはそのように使用できないことに注意してください。ライブ環境の適切な値に置き換えてください。

ロールを引き受けるため、アプリケーションは AWS STS AssumeRole API を呼び出して、使用するロールの ARN を渡します。AssumeRole API は、一時的な認証情報セットを返します。後続の AWS API 呼び出してこの認証情報を使用し、ロールを所有するアカウントのリソースにアクセスできます。一時的な認証情報には、ロールのアクセスポリシーで定義されたアクセス許可があります。AssumeRole への呼び出しは、オプションで補足的なポリシーを渡します。このポリシーでは、AssumeRole API が返す一時的なセキュリティ認証情報のアクセス権限をさらに制限(フィルタリングする)することができます。AssumeRole を呼び出すことができるのは、IAM ユーザーまたは IAM ロールの認証情報のみです。AWS account root user の認証情報で AssumeRole を呼び出すことはできません。

注記

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

AWS への Boto3 インターフェイス (AWS SDK for Python (Boto) V3) を使用する次の Python の例は、AssumeRole を呼び出す方法を示しているほか、AssumeRole から返された一時的な認証情報を使用して、ロールを所有しているアカウント内のすべての Amazon S3 バケットのリストを取得する方法を示しています。

Copy
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. assumedRoleObject = 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 = assumedRoleObject['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)