如何将文件从一个 AWS 账户的存储桶复制到另一个 AWS 账户的存储桶?

How to copy files from a bucket on one AWS account to a bucket on another AWS account?

我面临项目需求的变化,之前我必须在同一个 AWS 账户下的 2 个存储桶之间复制文件,现在我需要将文件复制到另一个账户的存储桶中。

当前代码:

public void copyEventFromS3(String fromBucket, String fromKey, String toBucket, String toKey) {
    ObjectListing listObjects = this.getListObjects(fromBucket, fromKey);
    listObjects.getObjectSummaries().stream().forEach((item) -> {
        this.getS3().copyObject(item.getBucketName(), item.getKey(), toBucket, toKey);
    });
}

我当然有两个账户凭证。

如何做到这一点?

为了使用 S3 的 CopyObject API 在存储桶之间进行复制,执行复制的(单个)角色必须具有 read access to the source and write access to the destination buckets。一旦您正确设置了权限,它们在不同帐户中的事实应该不会有什么不同。除了允许适当读写访问的 IAM 角色的权限策略之外,存储桶还必须具有允许访问该角色的存储桶策略。

如果您无法设置单个角色,另一种选择是设置单独的 S3 客户端(一个从一个帐户读取,另一个向另一个帐户写入),您需要手动下载并上传每个文件。这可能会花费更多时间,需要大量带宽,并且可能花费更多。

如果您想使用 copyObject 方法,您将需要一组凭据来授予您对两个存储桶的权限。

因此最好使用目标账户中的 IAM 用户,并授予其对源账户中 S3 存储桶的读取权限。

这里有一个演练:https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html