【问题标题】:copy file from one bucket to other bucket using java aws sdk使用 java aws sdk 将文件从一个存储桶复制到另一个存储桶
【发布时间】:2017-03-17 20:29:51
【问题描述】:

我使用以下代码将文件从一个存储桶复制到另一个存储桶

AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider());
s3client.copyObject(sourceBucketName, sourceKey, 
                    destinationBucketName, destinationKey);

但我总是得到 “com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: B6466D562B6988E2)”`作为响应可能是什么原因

【问题讨论】:

  • 也许Error Code: AccessDenied
  • 什么?错误代码:拒绝访问
  • 我有读写权限怎么拒绝访问?
  • 您从哪里获得凭证 - 代码是在带有附加角色的 Amazon EC2 实例上运行的,还是您在配置文件中提供凭证?这些凭据是否有权读取源对象和写入目标对象?每个存储桶的存储桶策略和/或分配了哪些 IAM 权限? (您可以更新您的问题以显示权限。)“我有读写权限”是什么意思——它们是如何分配的?基本上,错误消息是说某些东西没有足够的权限。
  • “我有读写权限”意味着使用该访问令牌我可以读取和写入该特定存储桶

标签: java amazon-web-services amazon-s3


【解决方案1】:

出现此类错误的可能性有很多(例如不存在的存储桶、权限问题、应用于源或目标存储桶的自定义策略等)。我建议在您的机器上设置AWS S3 CLI 并尝试不同的@ 987654322@ 以确保您实际上拥有正确的权限集来执行该操作。这将允许您快速迭代并快速调试问题。我不反对在这里编写 Java 代码来做同样的事情,但是 cli 肯定会为您节省时间。

另请查看SO link,看看这是否有助于您解决问题。

【讨论】:

  • 我已经列出了存储桶和文件名,还有我有读写权限的权限,我也可以下载和上传文件。但我不允许任何复制操作
  • 您可以尝试 CLI 并分享发生的情况:aws s3 cp s3://sourceBucketName/sourceKey s3://destinationBucketName/destinationKey 吗?
  • 调用 CopyObject 操作时发生错误(AccessDenied):输出为 Access Denied
  • 您似乎使用了错误的凭据集。你能在你的 S3 存储桶上做一个对象列表吗?
【解决方案2】:

现在我使用 java aws sdk 复制文件 这是由于在复制文件时缺少元数据,因此我们必须使用复制 copyObjRequest.setNewObjectMetadata(objectMetadata); 添加元数据 参考 http://docs.aws.amazon.com/AmazonS3/latest/dev/SSEUsingJavaSDK.html了解详情

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-22
    • 2023-02-01
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2020-12-27
    • 2020-09-15
    相关资源
    最近更新 更多