另一个AWS帐户拥有一个S3存储桶,该存储桶有一个文件列表。我需要将这些文件复制到我的S3存储桶中。为了做到这一点,我想做两件事:
- 在另一个帐户中添加一个S3 bucket事件,该事件将触发一个lambda来复制我的aws帐户中的文件
- 应该为我的lambda提供复制文件的权限(可能是通过假定的角色(
为了实现1和2,我必须执行哪些步骤?
复制文件的基本要求是直接的:
- 在源S3存储桶上创建一个触发Lambda函数的事件
- Lambda函数将对象复制到另一个bucket
复杂的因素是需要跨帐户复制。
有两种可能的情况:
-
选项1("拉动"(:账户A中的Bucket触发账户B中的Lambda。这可以通过AWS Lambda的基于资源的策略(Lambda功能策略(-AWS Lambda来完成。您需要通过命令行而不是管理控制台来配置触发器。然后,Account-a中Bucket的Bucket策略需要允许Account-B中Lambda函数使用的IAM Role访问
GetObject
-
选项2("推送"(:账户A中的Bucket触发账户A(相同账户(中的Lambda。Account-B中Bucket的Bucket策略需要允许Account-A中Lambda函数使用的IAM角色访问
PutObject
。确保它保存ACL为bucket-owner-full-control
的对象,以便Account-B"拥有"复制的对象
如果可能的话,我建议使用Push选项,因为所有东西都在一个帐户中(除了Bucket Policy(。
在没有lambda的情况下,有一种更简单的方法可以做到这一点,AWS允许设置S3存储桶的复制(包括跨区域和不同的帐户(,当您设置复制时,所有新对象都将被复制到复制的存储桶中,对于使用AWS CLI的现有对象,只需使用相同的存储桶再次复制对象,以便将其复制到目标存储桶中,一旦复制了所有现有的对象,如果你不明智地复制未来的对象,你可以关闭复制,在这里AWS为你做了繁重的工作:(https://docs.aws.amazon.com/AmazonS3/latest/dev/crr.html
实现这一点的方法很少。
您可以使用SNS通知和跨帐户IAM来触发lambda。请阅读:cross-account-s3-data-copy-using-lambda-函数很好地解释了您想要实现的目标。
另一种方法是部署lambda和保存文件的帐户中所需的所有资源。您需要创建触发lambda的S3通知,lambda会将文件复制到您的帐户,或者需要触发lambda的cloudwatch时间表(有点像cronjob(
在这种情况下,lambda和触发器必须存在于保存文件的帐户中。
在这两种情况下,lambda必须具有的最低IAM权限是能够对s3存储桶进行读写。使用STS来承担角色。您还需要添加Cloudwatch权限才能生成lambda日志
其余所需的IAM权限将取决于您要采取的方法。