Amazon Simple Storage Service
开发人员指南 (API 版本 2006-03-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

使用 AWS 账户或 IAM 用户凭证进行请求 – 适用于 Ruby 的 AWS 开发工具包

在您可以使用 适用于 Ruby 的 AWS 开发工具包 的版本 3 调用 Amazon S3 之前,必须设置 AWS 访问凭证以便 SDK 用来验证您对存储桶和对象的访问权限。如果您在本地系统上的 AWS 凭证配置文件中设置了共享凭证,则 适用于 Ruby 的开发工具包 的版本 3 可以在无需您在代码中声明这些凭证的情况下使用它们。有关设置共享凭证的更多信息,请参阅使用 AWS 账户或 IAM 用户凭证进行请求

以下 Ruby 代码段使用本地计算机上 AWS 凭证文件中的共享凭证,对要获取特定存储桶中的所有对象键名称的请求进行身份验证。它将执行以下操作:

  1. 创建 Aws::S3::Resource 类的实例。

  2. 使用 Aws::S3::Resourcebucket 方法,通过枚举存储桶中的对象向 Amazon S3 发出请求。客户端将根据计算机上 AWS 凭证文件中的凭证生成所需的签名值,并将其包含在发送给 Amazon S3 的请求中。

  3. 将对象键名称阵列打印到终端。

# Use the Amazon S3 modularized gem for version 3 of the AWS Ruby SDK. require 'aws-sdk-s3' # Get an Amazon S3 resource. s3 = Aws::S3::Resource.new(region: 'us-west-2') # Create an array of up to the first 100 object keynames in the bucket. bucket = s3.bucket('example_bucket').objects.collect(&:key) # Print the array to the terminal. puts bucket

即使没有本地 AWS 凭证文件,您仍可以创建 Aws::S3::Resource 资源并针对 Amazon S3 存储桶和对象执行代码。使用适用于 Ruby 的开发工具包版本 3 发送的请求是匿名的,默认情况下没有签名。如果针对非公开可用的资源发送匿名请求,Amazon S3 将返回错误。

可以针对 适用于 Ruby 的开发工具包 应用程序使用并扩展前一个代码段,如下面的更可靠的示例所示。用于此示例的凭证来自运行此应用程序的计算机上的本地 AWS 凭证文件。这些凭证适用于可以在运行此应用程序时列出自己指定的存储桶中的对象的 IAM 用户。

# auth_request_test.rb # Use the Amazon S3 modularized gem for version 3 of the AWS Ruby SDK. require 'aws-sdk-s3' # Usage: ruby auth_request_test.rb list BUCKET # Set the name of the bucket on which the operations are performed. # This argument is required bucket_name = nil # The operation to perform on the bucket. operation = 'list' # default operation = ARGV[0] if (ARGV.length > 0) if ARGV.length > 1 bucket_name = ARGV[1] else exit 1 end # Get an Amazon S3 resource. s3 = Aws::S3::Resource.new(region: 'us-west-2') # Get the bucket by name. bucket = s3.bucket(bucket_name) case operation when 'list' if bucket.exists? # Enumerate the bucket contents and object etags. puts "Contents of '%s':" % bucket_name puts ' Name => GUID' bucket.objects.limit(50).each do |obj| puts " #{obj.key} => #{obj.etag}" end else puts "The bucket '%s' does not exist!" % bucket_name end else puts "Unknown operation: '%s'! Only list is supported." % operation end