Amazon S3复制对象时出现访问被拒绝错误

5
我正在使用nodejs脚本上传文件,但在尝试复制对象时出现了“访问被拒绝”错误。如果我尝试删除对象或获取它,则没有问题并且成功。
在CopyObject中是否有任何特殊之处?
params = {
     "Bucket": "buacket-name",
     "CopySource": "source-path/object.txt",
     "Key": "source-path/object2.txt"
};

s3.copyObject(params, function(err, data)); // With a function for success or error.
3个回答

18

问题解决了! 我的CopySource路径有问题,它需要先使用桶名称,像这样: bucket-name/objectkey


1
同样的问题,我也认为政策中缺少了某些内容。 - wael32gh

11
根据AWS S3 copyObject文档,CopySource参数应包括存储桶和对象键名称。例如:
var params = {
  CopySource: 'source_bucket/source_key',
  Bucket: 'destination_bucket_name',
  Key: 'destination_key'
};

s3.copyObject(params, function(error, data) {

  // error check
  if (error) {
    console.log(error, error.stack);
  }

  console.log('S3 object copied');
});

3
我遇到了类似的问题,使用copyObject会产生403 "Access Denied"的响应,但是接着使用getObjectputObject操作就可以正常工作。在我的情况下,我确实对CopySource参数有正确的语法。
解决方案是在执行复制的IAM角色中添加s3:GetObjectTaggings3:PutObjectTagging权限,因为copyObject操作会尝试复制标记(tags)。虽然这不是你问题的解决方案,但我将此答案记录下来以防其他人遇到类似问题。
不幸的是,Node.JS APIS3服务的文档都没有提及这个权限要求。我是通过一个Stack Overflow答案得知的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接