メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

フェデレーションユーザーの一時的な認証情報を使用したリクエストの実行 – AWS SDK for Java

フェデレーションユーザーおよびアプリケーションから AWS リソースへのアクセスのリクエストが認証されて送信されるように、フェデレーションユーザーおよびアプリケーションに一時的なセキュリティ認証情報を提供することができます(「リクエストの実行」を参照)。IAM サービスからこのような一時的な認証情報をリクエストする場合、ユーザー名と、付与するリソースアクセス許可を示す IAM ポリシーを指定する必要があります。デフォルトでは、セッションの有効期間は 1 時間です。ただし、IAM ユーザー認証情報を使用して一時的な認証情報をリクエストする場合、フェデレーションユーザーおよびアプリケーション用の一時的なセキュリティ認証情報をリクエストするときに、別の有効期間値を明示的に設定できます。

注記

フェデレーションユーザーおよびアプリケーション用の一時的なセキュリティ認証情報をリクエストするには、より高度なセキュリティのために、必要なアクセス許可のみを持つ専用の IAM ユーザーを使用することもできます。作成した一時ユーザーに、一時的なセキュリティ認証情報をリクエストした IAM ユーザーより多くの権限が付与されることはありません。詳細については、「AWS Identity and Access Management FAQs」を参照してください。

フェデレーションユーザーの一時的なセキュリティ認証情報を使用したリクエストの実行

1

AWS Security Token Service クライアント AWSSecurityTokenServiceClient のインスタンスを作成します。

2

前の手順で作成した STS クライアントの getFederationToken メソッドを呼び出して、セッションを開始します。

一時的な認証情報にアタッチするユーザー名と IAM ポリシーなどのセッション情報を指定する必要があります。

このメソッドは一時的なセキュリティ認証情報を返します。

3

BasicSessionCredentials オブジェクトのインスタンスに一時セキュリティ証明書をパッケージ化します。このオブジェクトを使用して、 Amazon S3 クライアントに対して一時的なセキュリティ認証情報を提供します。

4

一時的なセキュリティ認証情報を渡して、AmazonS3Client クラスのインスタンスを作成します。

このクライアントを使用してリクエストを Amazon S3 に送信します。失効した認証情報を使用してリクエストを送信すると、Amazon S3 はエラーを返します。

以下の Java コード例は、前述のタスクの例です。

Copy
// In real applications, the following code is part of your trusted code. It has // your security credentials you use to obtain temporary security credentials. AWSSecurityTokenServiceClient stsClient = new AWSSecurityTokenServiceClient(new ProfileCredentialsProvider()); GetFederationTokenRequest getFederationTokenRequest = new GetFederationTokenRequest(); getFederationTokenRequest.setDurationSeconds(7200); getFederationTokenRequest.setName("User1"); // Define the policy and add to the request. Policy policy = new Policy(); // Define the policy here. // Add the policy to the request. getFederationTokenRequest.setPolicy(policy.toJson()); GetFederationTokenResult federationTokenResult = stsClient.getFederationToken(getFederationTokenRequest); Credentials sessionCredentials = federationTokenResult.getCredentials(); // Package the session credentials as a BasicSessionCredentials object // for an S3 client object to use. BasicSessionCredentials basicSessionCredentials = new BasicSessionCredentials( sessionCredentials.getAccessKeyId(), sessionCredentials.getSecretAccessKey(), sessionCredentials.getSessionToken()); // The following will be part of your less trusted code. You provide temporary security // credentials so it can send authenticated requests to Amazon S3. // Create an Amazon S3 client by passing in the basicSessionCredentials object. AmazonS3Client s3 = new AmazonS3Client(basicSessionCredentials); // Test. For example, send list object keys in a bucket. ObjectListing objects = s3.listObjects(bucketName);

ポリシーに条件を設定するには、Condition オブジェクトを作成し、ポリシーに関連付けます。次のコード例は、指定された IP アドレスの範囲のユーザーにオブジェクトのリスト作成を許可する条件を示しています。

Copy
Policy policy = new Policy(); // Allow only a specified IP range. Condition condition = new StringCondition(StringCondition.StringComparisonType.StringLike, ConditionFactory.SOURCE_IP_CONDITION_KEY , "192.168.143.*"); policy.withStatements(new Statement(Effect.Allow) .withActions(S3Actions.ListObjects) .withConditions(condition) .withResources(new Resource("arn:aws:s3:::"+ bucketName))); getFederationTokenRequest.setPolicy(policy.toJson());

以下の Java コード例では、指定したバケットのキーを列挙しています。このコード例では、まずフェデレーションユーザー(User1)用に 2 時間のセッションの一時的なセキュリティ認証情報を取得し、それを使用して認証リクエストを Amazon S3 に送信します。

他のユーザー用に一時的な認証情報をリクエストする場合、より高度なセキュリティのために、一時的なセキュリティ認証情報をリクエストする権限を持つ IAM ユーザーのセキュリティ認証情報を使用します。また、この IAM ユーザーが一時的なセキュリティ認証情報をリクエストするときに、最小限のアプリケーション固有の権限しか付与できないように、IAM ユーザーのアクセス許可を制限することができます。この例では、特定のバケットに含まれるオブジェクトのみリストされています。そのため、まず以下のポリシーをアタッチして IAM ユーザーを作成します。

Copy
{ "Statement":[{ "Action":["s3:ListBucket", "sts:GetFederationToken*" ], "Effect":"Allow", "Resource":"*" } ] }

このポリシーでは、IAM ユーザーが一時的なセキュリティ認証情報と、AWS リソースをリストできるだけのアクセス許可をリクエストすることを許可しています。IAM ユーザーを作成する方法については、『IAM ユーザーガイド』の「最初の IAM ユーザーと管理者グループの作成」を参照してください。

これで、IAM ユーザーのセキュリティ認証情報を使用して、以下の例をテストできるようになりました。この例では、一時的なセキュリティ認証情報を使用して、認証リクエストを Amazon S3 に送信します。この例では、フェデレーションユーザー(User1)用に、アクセスを特定のバケット(YourBucketName)内のオブジェクトの列挙に制限する一時的なセキュリティ認証情報をリクエストするときに、以下のポリシーを指定します。ポリシーを更新し、独自の既存のバケット名を指定する必要があります。

Copy
{ "Statement":[ { "Sid":"1", "Action":["s3:ListBucket"], "Effect":"Allow", "Resource":"arn:aws:s3:::YourBucketName" } ] }

以下の例を編集して、前述のフェデレーションユーザーアクセスポリシーで指定したバケット名を指定します。

Copy
import java.io.IOException; import com.amazonaws.auth.BasicSessionCredentials; import com.amazonaws.auth.PropertiesCredentials; import com.amazonaws.auth.policy.Policy; import com.amazonaws.auth.policy.Resource; import com.amazonaws.auth.policy.Statement; import com.amazonaws.auth.policy.Statement.Effect; import com.amazonaws.auth.policy.actions.S3Actions; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient; import com.amazonaws.services.securitytoken.model.Credentials; import com.amazonaws.services.securitytoken.model.GetFederationTokenRequest; import com.amazonaws.services.securitytoken.model.GetFederationTokenResult; import com.amazonaws.services.s3.model.ObjectListing; public class S3Sample { private static String bucketName = "*** Specify bucket name ***"; public static void main(String[] args) throws IOException { AWSSecurityTokenServiceClient stsClient = new AWSSecurityTokenServiceClient(new ProfileCredentialsProvider()); GetFederationTokenRequest getFederationTokenRequest = new GetFederationTokenRequest(); getFederationTokenRequest.setDurationSeconds(7200); getFederationTokenRequest.setName("User1"); // Define the policy and add to the request. Policy policy = new Policy(); policy.withStatements(new Statement(Effect.Allow) .withActions(S3Actions.ListObjects) .withResources(new Resource("arn:aws:s3:::ExampleBucket"))); getFederationTokenRequest.setPolicy(policy.toJson()); // Get the temporary security credentials. GetFederationTokenResult federationTokenResult = stsClient.getFederationToken(getFederationTokenRequest); Credentials sessionCredentials = federationTokenResult.getCredentials(); // Package the session credentials as a BasicSessionCredentials // object for an S3 client object to use. BasicSessionCredentials basicSessionCredentials = new BasicSessionCredentials(sessionCredentials.getAccessKeyId(), sessionCredentials.getSecretAccessKey(), sessionCredentials.getSessionToken()); AmazonS3Client s3 = new AmazonS3Client(basicSessionCredentials); // Test. For example, send ListBucket request using the temporary security credentials. ObjectListing objects = s3.listObjects(bucketName); System.out.println("No. of Objects = " + objects.getObjectSummaries().size()); } }

関連リソース

このページの内容: