Amazon web services Amazon S3触发另一个帐户中的Lambda函数
当任何对象进入帐户S3 bucket时,我想在帐户B中运行lambda 但我听说我们只能从同一帐户S3访问Lambda,对于跨帐户S3 Lambda访问,我必须在同一帐户内运行Lambda,并执行另一个触发器,该触发器运行另一帐户Lambda:Amazon web services Amazon S3触发另一个帐户中的Lambda函数,amazon-web-services,amazon-s3,aws-lambda,Amazon Web Services,Amazon S3,Aws Lambda,当任何对象进入帐户S3 bucket时,我想在帐户B中运行lambda 但我听说我们只能从同一帐户S3访问Lambda,对于跨帐户S3 Lambda访问,我必须在同一帐户内运行Lambda,并执行另一个触发器,该触发器运行另一帐户Lambda: S3(账户A)->Lambda(账户B)-不可能 S3(账户A)--->Lambda(账户A)--->Lambda(账户B)-可能 有人能帮我选择哪一个吗?如果是这样,如何操作?在新的S3控制台中,转到S3控制台并打开您的存储桶。单击属性选项卡->事件。
有人能帮我选择哪一个吗?如果是这样,如何操作?在新的S3控制台中,转到S3控制台并打开您的存储桶。单击属性选项卡->事件。您需要授予S3调用Lambda函数的权限。请参阅:这两个选项都应该是可能的。所以你可以选择第一个选项,这是最低限度的 使用IAM中的跨帐户访问功能授予Lambda(帐户B)对S3(帐户A)的访问权限 这是通过在帐户B中创建IAM角色来实现的,该角色被授予帐户a中存储桶的访问权限,并允许Lambda(在帐户B中)承担该角色 有关更多详细信息,请参阅AWS提供的以下文档
- [示例2:铲斗]
Account-A.S3-bucket -> Account-B.Lambda-function
以下是我所做的:
- 在帐户A中创建了亚马逊S3存储桶
- 在帐户B中创建了Lambda函数
- 通过向Lambda函数添加了一个允许S3 bucket对Lambda函数调用
Lambda:InvokeFunction
- 在S3 Bucket中添加了一个Bucket策略,以允许从任何地方访问
(这应该被进一步锁定,但对于实验来说已经足够了)GetObject
- 为S3存储桶上的
配置了事件,通过其ARN引用Lambda函数ObjectCreate(All)
- 上传了一个文件到账户-a.S3-bucket
- 帐户-B.Lambda-功能已成功触发
@John的解决方案可行,但我想在他的答案中添加一些步骤
- S3存储桶和Lambda需要位于同一区域。例如,两者都应该在
区域中创建。不同区域会抛出如下错误:us-east-1
Account-A.S3-bucket -> Account-B.Lambda-function
aws lambda添加权限\
--区域{Account-B.Lambda区域,例如us-east-1}\
--函数名{Account-B.Lambda name}\
--语句id 1\
--principal s3.amazonaws.com\
--操作lambda:InvokeFunction\
--源arn arn:aws:s3::{Account-A.s3 name}\
--源帐户{account-A.account-id}\
--档案{Account-B.profile-name}
Account-A
的S3bucket和属性选项卡>下的事件Name:ObjectCreation
事件:ObjectCreate(全部)
发送至:Lambda函数
Lambda:添加Lambda函数ARN
Lambda函数ARN:
您的lambda arn
注意:Lambda函数可能仍会显示错误,但S3存储桶中添加的新对象会触发Lambda和打印(事件)日志出现在Cloudwatch日志中。以下是如何以清晰的步骤执行此操作: 我将(客户帐户)定义为包含S3资源的帐户,“服务帐户”定义为包含Lambda函数的帐户,该函数将访问S3资源
{“Sid”:“InvokeLambda”,“Action”:[“lambda:InvokeFunction”],“Resource”:“arn:aws:lambda:us-east-1:AccountB ID:function_name”,“Effect”:“Allow”,“Principal”:{“aws”:“AccountB ID”}}我试图为帐户设置一个bucket,但不允许我得到错误{“Version”:“2012-10-17”,“语句”:{“效果”:“允许”,“操作”:“sts:AssumeRole”,“资源”:“arn:aws:iam::PRODUCTION-ACCOUNT-ID:role/UpdateAPP”}我是否需要将“假定角色策略”附加到帐户B中我的IAM角色?您是否会说此问题与该问题重复?如果是,则要做的事情是将此问题标记为重复问题,并提供到另一个问题的链接。这将使问题进入队列,以便更高级别的代表用户投票决定是否将一个问题作为一个问题关闭另一个的副本。如果不是,请帮助我理解为什么不是。对我来说,这看起来基本上是同一个问题。我添加了getobject策略,但仍然被拒绝访问。此bucket具有读取对象的加密策略。我必须指定加密要通过的任何内容吗?请澄清您的意思”是否有加密策略?您的意思是使用SSE-KMS对对象进行加密?另外,您在执行什么操作以接收拒绝访问消息(is)