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 用户临时凭证进行请求 - 适用于 Ruby 的 AWS 开发工具包

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

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

1

通过提供您的凭证,创建 AWS Security Token Service客户端 AWS::STS::Session 的实例。

2

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

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

3

通过传入临时安全凭证在 AWS::S3 类的新实例中使用临时凭证。

您可以使用此客户端向 Amazon S3 发送请求。如果您使用过期的凭证发送请求, Amazon S3 将返回错误。

以下 Ruby 代码示例演示了上述任务。

Copy
# Start a session. # In real applications, the following code is part of your trusted code. It has # your security credentials that you use to obtain temporary security credentials. sts = AWS::STS.new() session = sts.new_session() puts "Session expires at: #{session.expires_at.to_s}" # Get an instance of the S3 interface using the session credentials. s3 = AWS::S3.new(session.credentials) # Get a list of all object keys in a bucket. bucket = s3.buckets[bucket_name].objects.collect(&:key)

注意

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

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

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

Copy
require 'rubygems' require 'aws-sdk' # In real applications, the following code is part of your trusted code. It has # your security credentials you use to obtain temporary security credentials. bucket_name = '*** Provide bucket name ***' # Start a session. sts = AWS::STS.new() session = sts.new_session() puts "Session expires at: #{session.expires_at.to_s}" # get an instance of the S3 interface using the session credentials s3 = AWS::S3.new(session.credentials) # get a list of all object keys in a bucket bucket = s3.buckets[bucket_name].objects.collect(&:key) puts bucket