将文件从一个AWS账户中的S3存储桶复制到另一个AWS账户

时间:2018-11-05 21:51:49

标签: amazon-web-services amazon-s3 aws-lambda amazon-iam

有一个不同的AWS账户拥有的S3存储桶,其中包含文件列表。我需要将文件复制到我的S3存储桶中。我想执行2件事来做到这一点:

  1. 在另一个帐户中添加一个S3存储桶事件,这将触发lambda复制我的aws帐户中的文件。
  2. 应该为我的lambda提供权限(可能通过承担的角色),以便复制文件。

要达到1和2,我必须执行哪些步骤?

3 个答案:

答案 0 :(得分:1)

实现这一目标的方法很少。

您可以使用SNS通知和跨帐户IAM来触发lambda。阅读以下内容:cross-account-s3-data-copy-using-lambda-function很好地解释了您要实现的目标。

另一种方法是在存储文件的帐户中部署lambda和所有所需的资源。您需要创建S3通知来触发lambda,该lambda会将文件复制到您的帐户中,或者需要具有cloudwatch时间表(类似于cronjob的位)来触发lambda。
在这种情况下,lambda和触发器必须存在于保存文件的帐户中。

在两种情况下,lambda都必须具有最小的IAM权限,才能读取和写入s3存储桶。为了承担角色而使用STS。您还需要添加Cloudwatch权限才能生成Lambda日志。
其余所需的IAM权限将取决于您将采用的方法。

答案 1 :(得分:1)

有一种无需lambda的简便方法,AWS允许设置S3存储桶的复制(包括跨区域和其他帐户),当您设置复制时,所有新对象都将复制到复制存储桶中,例如使用aws CLI的现有对象只是使用同一存储桶再次复制对象,以便将其复制到目标存储桶,一旦复制了所有现有对象,如果您不明智地复制将来的对象,则可以关闭复制,此处AWS确实繁重的工作:) https://docs.aws.amazon.com/AmazonS3/latest/dev/crr.html

答案 2 :(得分:1)

直接复制文件的基本要求是

  • 在源S3存储桶上创建一个触发Lambda函数的事件
  • Lambda函数将对象复制到另一个存储桶

复杂的因素是需要跨帐户复制。

两种情况是可能的:

  • 选项1(“拉”)::帐户A中的存储桶触发帐户B中的Lambda。可以使用Resource-Based Policies for AWS Lambda (Lambda Function Policies) - AWS Lambda完成。您需要通过命令行而不是管理控制台来配置触发器。然后,帐户A中存储桶上的存储桶策略需要允许{-{1}}被帐户B中Lambda函数使用的IAM角色访问。
  • 选项2(“推送”)::帐户A中的存储桶触发帐户A中的Lambda(同一帐户)。帐户B中存储桶上的存储桶策略需要允许帐户A中Lambda函数使用的IAM角色GetObject访问。确保它使用PutObject的ACL保存该对象,以便Account-B“拥有”复制的对象。

如果可能的话,我建议您使用“推送”选项,因为所有内容都在一个帐户中(除了存储桶策略)。