我们能够将对象放入S3存储桶中。
但是现在我们有一个要求,我们需要将这些对象直接放到属于不同帐户和不同区域的S3存储桶中。
在这里,我们有几个问题:
他们向我们提供了访问密钥,秘密密钥,区域和存储桶详细信息。
任何评论和建议将不胜感激。
答案 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的博客。它应该可以帮助您设置跨帐户投放操作。