将对象放入另一个帐户的S3存储桶

时间:2020-10-15 15:10:21

标签: amazon-web-services amazon-s3

我们能够将对象放入S3存储桶中。

但是现在我们有一个要求,我们需要将这些对象直接放到属于不同帐户和不同区域的S3存储桶中。

在这里,我们有几个问题:

  • 这可能吗?
  • 如果可能的话,我们需要为此做些什么改变?

他们向我们提供了访问密钥,秘密密钥,区域和存储桶详细信息。

任何评论和建议将不胜感激。

2 个答案:

答案 0 :(得分:2)

IAM凭证与一个AWS账户关联。

当您使用分配的IAM角色启动自己的Amazon EC2实例时,它将接收与您的帐户相关联的访问凭证。

要写入另一个帐户的Amazon S3存储桶,您有两个选择:

选项1:您的凭据+桶策略

目标Amazon S3存储桶的所有者可以在存储桶上添加存储桶策略,以允许您的IAM角色进行访问。这样,您就可以使用EC2实例上可用的普通凭据。

选项2:他们的凭据

看来您已经获得了他们的帐户的访问凭据。您可以使用这些凭证来访问其Amazon S3存储桶。

Working with AWS Credentials - AWS SDK for Java所述,您可以通过多种方式提供这些凭据。但是,如果您同时使用IAM角色提供的凭据和已提供给您的凭据,则可能很难在它们之间“切换”。 (我不确定是否有办法告诉凭据提供者在存储在~/.aws/credentials文件中的配置文件和通过实例元数据提供的配置文件之间切换。)

因此,最简单的方法是在创建S3客户端时指定访问密钥和秘密密钥

BasicAWSCredentials awsCreds = new BasicAWSCredentials("access_key_id", "secret_key_id");
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                        .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
                        .build();

在代码中放入凭据通常不是一个好主意。您应该从配置文件中加载它们。

答案 1 :(得分:1)

是的,有可能。您需要允许交叉帐户S3将操作放入存储区策略中。

Here是AWS的博客。它应该可以帮助您设置跨帐户投放操作。