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

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

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

注記

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

セキュリティ認証情報を提供し、認証されたリクエストを送信してリソースにアクセスするには、以下の操作を行います。

  • AWSSecurityTokenServiceClient クラスのインスタンスを作成します。認証情報の指定の詳細については、「AWS SDK for Java の使用」をご覧ください。

  • Security Token Service (STS) クライアントの getFederationToken() メソッドを呼び出してセッションを開始します。一時的な認証情報にアタッチするユーザー名と IAM ポリシーなどのセッション情報を指定します。必要に応じて、セッションの有効期間を指定できます。 このメソッドは一時的なセキュリティ認証情報を返します。

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

  • 一時的なセキュリティ認証情報を使用して、AmazonS3Client クラスのインスタンスを作成します。 このクライアントを使用してリクエストを Amazon S3 に送信します。失効した認証情報を使用してリクエストを送信すると、Amazon S3 はエラーを返します。

例では、指定された S3 バケットのキーをリストしています。この例では、フェデレーティッドユーザー用に 2 時間のセッションの一時的なセキュリティ認証情報を取得し、その認証情報を使用して認証リクエストを Amazon S3 に送信します。例を実行するには、ユーザーに一時的なセキュリティ認証情報のリクエストと AWS リソースのリスト表示を許可するアタッチされたポリシーで、IAM ユーザーを作成する必要があります。次のポリシーでは、これが達成されます。

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

IAM ユーザーを作成する方法の詳細については、IAM ユーザーガイドの「最初の IAM ユーザーと管理者グループの作成」を参照してください。

IAM ユーザーを作成し、前述のポリシーをアタッチしたら、以下の例を実行できます。作業サンプルを作成およびテストする方法については、「Amazon S3 Java コード例のテスト」を参照してください。

import java.io.IOException; import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicSessionCredentials; 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.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.securitytoken.AWSSecurityTokenService; import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder; 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 MakingRequestsWithFederatedTempCredentials { public static void main(String[] args) throws IOException { String clientRegion = "*** Client region ***"; String bucketName = "*** Specify bucket name ***"; String federatedUser = "*** Federated user name ***"; String resourceARN = "arn:aws:s3:::" + bucketName; try { AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder .standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); GetFederationTokenRequest getFederationTokenRequest = new GetFederationTokenRequest(); getFederationTokenRequest.setDurationSeconds(7200); getFederationTokenRequest.setName(federatedUser); // Define the policy and add it to the request. Policy policy = new Policy(); policy.withStatements(new Statement(Effect.Allow) .withActions(S3Actions.ListObjects) .withResources(new Resource(resourceARN))); 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 Amazon S3 client object to use. BasicSessionCredentials basicSessionCredentials = new BasicSessionCredentials( sessionCredentials.getAccessKeyId(), sessionCredentials.getSecretAccessKey(), sessionCredentials.getSessionToken()); AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(basicSessionCredentials)) .withRegion(clientRegion) .build(); // To verify that the client works, send a listObjects request using // the temporary security credentials. ObjectListing objects = s3Client.listObjects(bucketName); System.out.println("No. of Objects = " + objects.getObjectSummaries().size()); } catch(AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch(SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }

関連リソース

このページの内容: