使用 IAM 用户临时凭证发出请求 – 适用于 Java 的 AWS 开发工具包 - Amazon Simple Storage Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本指南不再进行更新。有关当前信息和说明,请参阅新的 Amazon S3 用户指南

使用 IAM 用户临时凭证发出请求 – 适用于 Java 的 AWS 开发工具包

IAM 用户或 AWS 账户可以使用适用于 Java 的 AWS 开发工具包请求临时安全凭证(请参阅提出请求),然后使用这些凭证来访问 Amazon S3。在指定会话持续时间结束后,这些凭证将过期。

默认情况下,会话的持续时间为一个小时。如果您使用了 IAM 用户凭证,则可在请求临时安全凭证时指定持续时间(15 分钟到角色的最长会话持续时间)。有关临时安全凭证的更多信息,请参阅《IAM 用户指南》中的临时安全凭证。有关发出请求的更多信息,请参阅提出请求

获取临时安全凭证并访问 Amazon S3

  1. 创建 AWSSecurityTokenService 类的实例。有关提供凭证的信息,请参阅使用 AWS 开发工具包、CLI 和 Explorer

  2. 通过调用安全令牌服务 (STS) 客户端的 assumeRole() 方法,检索所需角色的临时安全凭证。

  3. 将临时安全凭证打包到 BasicSessionCredentials 对象中。您可以使用此对象来向您的 Amazon S3 客户端提供临时安全凭证。

  4. 使用临时安全凭证创建 AmazonS3Client 类的实例。您可以使用此客户端向 Amazon S3 发送请求。如果使用过期凭证发送请求,Amazon S3 将返回错误。

注意

如果使用 AWS 账户安全凭证获取临时安全凭证,则临时凭证的有效期只有一小时。只有当您使用 IAM 用户证书来请求会话时,您才可以指定会话持续时间。

以下示例列出了指定存储桶中的一组对象键。该示例将为会话获取临时安全凭证,然后使用这些凭证向 Amazon S3 发送经身份验证的请求。

如果您想要使用 IAM 用户证书测试示例,您将需要在您的 AWS 账户下创建一个 IAM 用户。有关如何创建 IAM 用户的更多信息,请参阅《IAM 用户指南》中的创建您的第一个 IAM 用户和管理员组

有关创建和测试有效示例的说明,请参阅测试 Amazon S3 Java 代码示例

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicSessionCredentials; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.ObjectListing; import com.amazonaws.services.securitytoken.AWSSecurityTokenService; import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder; import com.amazonaws.services.securitytoken.model.AssumeRoleRequest; import com.amazonaws.services.securitytoken.model.AssumeRoleResult; import com.amazonaws.services.securitytoken.model.Credentials; public class MakingRequestsWithIAMTempCredentials { public static void main(String[] args) { String clientRegion = "*** Client region ***"; String roleARN = "*** ARN for role to be assumed ***"; String roleSessionName = "*** Role session name ***"; String bucketName = "*** Bucket name ***"; try { // Creating the STS client is part of your trusted code. It has // the security credentials you use to obtain temporary security credentials. AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); // Obtain credentials for the IAM role. Note that you cannot assume the role of an AWS root account; // Amazon S3 will deny access. You must use credentials for an IAM user or an IAM role. AssumeRoleRequest roleRequest = new AssumeRoleRequest() .withRoleArn(roleARN) .withRoleSessionName(roleSessionName); AssumeRoleResult roleResponse = stsClient.assumeRole(roleRequest); Credentials sessionCredentials = roleResponse.getCredentials(); // Create a BasicSessionCredentials object that contains the credentials you just retrieved. BasicSessionCredentials awsCredentials = new BasicSessionCredentials( sessionCredentials.getAccessKeyId(), sessionCredentials.getSecretAccessKey(), sessionCredentials.getSessionToken()); // Provide temporary security credentials so that the Amazon S3 client // can send authenticated requests to Amazon S3. You create the client // using the sessionCredentials object. AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(awsCredentials)) .withRegion(clientRegion) .build(); // Verify that assuming the role worked and the permissions are set correctly // by getting a set of object keys from the bucket. 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(); } } }

相关资源