Amazon Simple Storage Service
开发人员指南 (API Version 2006-03-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

使用 IAM 用户临时凭证创建请求 - AWS SDK for Java

IAM 用户或 AWS 账户可以使用AWS SDK for Java请求临时安全凭证 (请参阅创建请求),然后使用这些凭证访问 Amazon S3。在会话持续时间结束后,这些凭证将过期。默认情况下,会话的持续时间为一个小时。 如果您使用 IAM 用户凭证,您可以在请求临时安全凭证时,指定 1 到 36 小时的持续时间。

使用 IAM 用户临时安全凭证进行请求

1

创建 AWS Security Token Service客户端 AWSSecurityTokenServiceClient 的实例。

2

通过调用您在上一步骤中创建的 STS 客户端的 GetSessionToken 方法,开始会话。您可以使用 GetSessionTokenRequest 对象向此方法提供会话信息。

此方法将返回您的临时安全凭证。

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()); // // Manually start a session. GetSessionTokenRequest getSessionTokenRequest = new GetSessionTokenRequest(); // Following duration can be set only if temporary credentials are requested by an IAM user. getSessionTokenRequest.setDurationSeconds(7200); GetSessionTokenResult sessionTokenResult = stsClient.getSessionToken(getSessionTokenRequest); Credentials sessionCredentials = sessionTokenResult.getCredentials(); // Package the temporary security credentials as // a BasicSessionCredentials object, for an Amazon 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 Amazon S3 client by passing in the basicSessionCredentials object. AmazonS3Client s3 = new AmazonS3Client(basicSessionCredentials); // Test. For example, get object keys in a bucket. ObjectListing objects = s3.listObjects(bucketName);

注意

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

以下 Java 代码示例列出了特定存储桶中的对象键。为了展示这个过程,代码示例会为默认一小时的会话获取临时安全凭证,然后使用这些凭证向 Amazon S3 发送经身份验证的请求。

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

Copy
import java.io.IOException; import com.amazonaws.auth.BasicSessionCredentials; import com.amazonaws.auth.PropertiesCredentials; 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.GetSessionTokenRequest; import com.amazonaws.services.securitytoken.model.GetSessionTokenResult; import com.amazonaws.services.s3.model.ObjectListing; public class S3Sample { private static String bucketName = "*** Provide bucket name ***"; public static void main(String[] args) throws IOException { AWSSecurityTokenServiceClient stsClient = new AWSSecurityTokenServiceClient(new ProfileCredentialsProvider()); // // Start a session. GetSessionTokenRequest getSessionTokenRequest = new GetSessionTokenRequest(); GetSessionTokenResult sessionTokenResult = stsClient.getSessionToken(getSessionTokenRequest); Credentials sessionCredentials = sessionTokenResult.getCredentials(); System.out.println("Session Credentials: " + sessionCredentials.toString()); // 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, get object keys for a given bucket. ObjectListing objects = s3.listObjects(bucketName); System.out.println("No. of Objects = " + objects.getObjectSummaries().size()); } }

相关资源

本页内容: