AWS::S3::错误::拒绝访问:尝试执行复制时拒绝访问



我写了一个rake任务,它从一个bucket中的一个目录复制到同一bucket内的另一个目录。当我在本地测试它时,它运行良好,但当我将它部署到环境中时,它会返回AWS::S3::Errors::AccessDenied:AccessDenied。我认为这也与我部署的环境中的AWS凭据有关,我也相信问题与copy_to有关,因为我从rails控制台访问了bucket,并且没有问题

我的声明副本如下

   creds = YAML::load_file(Rails.root.join("config", "s3.yml"))
   AWS.config(aws_access_key_id: creds[:access_key_id],
               aws_secret_access_key: creds[:secret_access_key])
s3.buckets['test-bucket'].objects['path to file'].copy_to('new_path')

AWS.config的参数是access_key_idsecret_access_key,没有aws_前缀。

http://docs.aws.amazon.com/AWSRubySDK/latest/AWS.html#config-class_method

发现这一点是因为我在调用copy_to((时也收到了Access Denied。虽然旧版本的SDK很乐意接受纯密钥路径作为copy_to的参数,但新版本也要求您指定bucket。

就我而言,

s3_bucket.object(old_key).copy_to(new_key)

不起作用,并在v3 SDK中产生了一个毫无帮助的"拒绝访问"错误。相反,这是有效的:

s3_bucket.object(old_key).copy_to( s3_bucket.object(new_key) )

s3_bucket.object(old_key).copy_to(bucket_name+'/'+new_key)
   s3.buckets['bucket-name'].objects['source-key'].copy_to('target-key', :bucket_name => 'target-bucket')

使用aws-sdk-gem:的简化示例

 AWS.config(:access_key_id => '...', :secret_access_key => '...')
 s3 = AWS::S3.new
 s3.buckets['bucket-name'].objects['source-key'].copy_to('target-key')

最新更新