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

サンプルコード: 多要素認証での認証情報のリクエスト

以下の例では、GetSessionTokenRoleAssumeRole を呼び出し、MFA 認証を渡す方法を示しています。返される認証情報は、アカウントのすべての S3 バケットを一覧表示するために使用されます。

MFA 認証での GetSessionToken の呼び出し(Python および C#)

以下の例は、AWS SDK for Python (Boto)AWS SDK for .NET を使用して書かれており、GetSessionToken を呼び出し、MFA 認証情報を渡す方法を示しています。GetSessionTokenRole によって返される一時的な認証情報は、アカウントのすべての S3 バケットを一覧表示するために使用されます。

このコードを実行するユーザー(またはユーザーが属するグループ)にアタッチされるポリシーに、MFA チェックを含めることが前提とされます。ポリシーは、Amazon S3 ListBuckets アクションをリクエストするためのユーザーアクセス許可も付与する必要があります。

Python の使用

Copy
import boto from boto.s3.connection import S3Connection from boto.sts import STSConnection # Prompt for MFA time-based one-time password (TOTP) mfa_TOTP = raw_input("Enter the MFA code: ") # The calls to AWS STS GetSessionToken must be signed with the access key ID and secret # access key of an IAM user. The credentials can be in environment variables or in # a configuration file and will be discovered automatically # by the STSConnection() function. For more information, see the Python SDK # documentation: http://boto.readthedocs.org/en/latest/boto_config_tut.html sts_connection = STSConnection() # Use the appropriate device ID (serial number for hardware device or ARN for virtual device). # Replace ACCOUNT-NUMBER-WITHOUT-HYPHENS and MFA-DEVICE-ID with appropriate values. tempCredentials = sts_connection.get_session_token( duration=3600, mfa_serial_number="&region-arn;iam::ACCOUNT-NUMBER-WITHOUT-HYPHENS:mfa/MFA-DEVICE-ID", mfa_token=mfa_TOTP ) # Use the temporary credentials to list the contents of an S3 bucket s3_connection = S3Connection( aws_access_key_id=tempCredentials.access_key, aws_secret_access_key=tempCredentials.secret_key, security_token=tempCredentials.session_token ) # Replace BUCKET-NAME with an appropriate value. bucket = s3_connection.get_bucket(bucket_name="BUCKET-NAME") objectlist = bucket.list() for obj in objectlist: print obj.name

C# の使用

Copy
Console.Write("Enter MFA code: "); string mfaTOTP = Console.ReadLine(); // Get string from user /* The calls to AWS STS GetSessionToken must be signed using the access key ID and secret access key of an IAM user. The credentials can be in environment variables or in a configuration file and will be discovered automatically by the AmazonSecurityTokenServiceClient constructor. For more information, see http://docs.aws.amazon.com/AWSSdkDocsNET/latest/DeveloperGuide/net-dg-config-creds.html */ AmazonSecurityTokenServiceClient stsClient = new AmazonSecurityTokenServiceClient(); GetSessionTokenRequest getSessionTokenRequest = new GetSessionTokenRequest(); getSessionTokenRequest.DurationSeconds = 3600; // Replace ACCOUNT-NUMBER-WITHOUT-HYPHENS and MFA-DEVICE-ID with appropriate values getSessionTokenRequest.SerialNumber = "arn:aws:iam::ACCOUNT-NUMBER-WITHOUT-HYPHENS:mfa/MFA-DEVICE-ID"; getSessionTokenRequest.TokenCode = mfaTOTP; GetSessionTokenResponse getSessionTokenResponse = stsClient.GetSessionToken(getSessionTokenRequest); // Extract temporary credentials from result of GetSessionToken call GetSessionTokenResult getSessionTokenResult = getSessionTokenResponse.GetSessionTokenResult; string tempAccessKeyId = getSessionTokenResult.Credentials.AccessKeyId; string tempSessionToken = getSessionTokenResult.Credentials.SessionToken; string tempSecretAccessKey = getSessionTokenResult.Credentials.SecretAccessKey; SessionAWSCredentials tempCredentials = new SessionAWSCredentials(tempAccessKeyId, tempSecretAccessKey, tempSessionToken); // Use the temporary credentials to list the contents of an S3 bucket // Replace BUCKET-NAME with an appropriate value ListObjectsRequest S3ListObjectsRequest = new ListObjectsRequest(); S3ListObjectsRequest.BucketName = "BUCKET-NAME"; S3Client = AWSClientFactory.CreateAmazonS3Client(tempCredentials); ListObjectsResponse S3ListObjectsResponse = S3Client.ListObjects(S3ListObjectsRequest); foreach (S3Object s3Object in S3ListObjectsResponse.S3Objects) { Console.WriteLine(s3Object.Key); }

MFA 認証での AssumeRole の呼び出し(Python)

以下の例は、AWS SDK for Python (Boto) を使用して書かれており、AssumeRole を呼び出し、MFA 認証情報を渡す方法を示しています。AssumeRole によって返される一時的な認証情報は、アカウントのすべての Amazon S3 バケットをリストするために使用されます。

このシナリオの詳細については、「シナリオ: クロスアカウントの委任の MFA 保護」を参照してください。

Copy
import boto from boto.s3.connection import S3Connection from boto.sts import STSConnection # Prompt for MFA time-based one-time password (TOTP) mfa_TOTP = raw_input("Enter the MFA code: ") # The calls to AWS STS AssumeRole must be signed with the access key ID and secret # access key of an IAM user. (The AssumeRole API can also be called using temporary # credentials, but this example does not show that scenario.) # The IAM user credentials can be in environment variables or in # a configuration file and will be discovered automatically # by the STSConnection() function. For more information, see the Python SDK # documentation: http://boto.readthedocs.org/en/latest/boto_config_tut.html sts_connection = STSConnection() # Use appropriate device ID (serial number for hardware device or ARN for virtual device) # Replace ACCOUNT-NUMBER-WITHOUT-HYPHENS, ROLE-NAME, and MFA-DEVICE-ID with appropriate values tempCredentials = sts_connection.assume_role( role_arn="arn:aws:iam::ACCOUNT-NUMBER-WITHOUT-HYPHENS:role/ROLE-NAME", role_session_name="AssumeRoleSession1", mfa_serial_number="arn:aws:iam::ACCOUNT-NUMBER-WITHOUT-HYPHENS:mfa/MFA-DEVICE-ID", mfa_token=mfa_TOTP ) # Use the temporary credentials to list the contents of an S3 bucket s3_connection = S3Connection( aws_access_key_id=tempCredentials.credentials.access_key, aws_secret_access_key=tempCredentials.credentials.secret_key, security_token=tempCredentials.credentials.session_token ) # Replace BUCKET-NAME with a real bucket name bucket = s3_connection.get_bucket(bucket_name="BUCKET-NAME") objectlist = bucket.list() for obj in objectlist: print obj.name