我一直关注以下来自亚马逊的博客文章(场景3:从另一个帐户中的Amazon S3存储桶通知触发Lambda函数)关于授权Lambda函数用于各种用途。我想设置一个Lambda函数来接受来自外部帐户的SNS消息(带有lambda函数的acct外部)。
https://aws.amazon.com/blogs/compute/easy-authorization-of-aws-lambda-functions/
我希望添加远程调用函数的权限,如下所示:
$ aws lambda add-permission \
--function-name MyFunction \
--region us-west-2 \
--statement-id Id-123 \
--action "lambda:InvokeFunction" \
--principal sns.amazonaws.com \
--source-arn arn:aws:sns:::<topic name> \
--source-account <account number> \
--profile adminuser
然后我尝试转到我的SNS主题并将Lambda设置为端点,并在第一个帐户中输入lambda函数的远程ARN。这不能很好地工作,因为端点期望帐户中的函数具有arn ...
B计划: 尝试通过CLI创建订阅以规避控制台中的限制......
aws sns --profile adminuser \
--region us-west-2 subscribe
--topic-arn arn:aws:sns:us-west-2:<account #>:<topic name>
--protocol lambda
--notification-endpoint arn:aws:lambda:us-west-2:<account id>:function:<lambda function name>
响应:
A client error (AuthorizationError) occurred when calling the Subscribe operation: The account <account id> is not the owner of the lambda function arn:aws:lambda:us-west-2:<account id>:function:<function name>
是否有人能够从&#34;遥控器&#34;中调用Lambda函数? SNS在另一个账号?我对可能出错的地方感到有点难过......根据博客文章中的说明,我完全希望远程SNS能够工作:
Note: Amazon SNS (Simple Notification Service) events sent to Lambda works the same way, with “sns.amazonaws.com” replacing “s3.amazonaws.com” as the principal.
答案 0 :(得分:4)
如果提供者帐户授权拥有lambda的使用者帐户订阅SNS主题,则可以。这可以在topics page下的“编辑主题政策”中完成。
以下是允许lambda从外部帐户收听SNS主题的步骤摘要:
以前为第4步工作的示例命令:
aws sns subscribe --topic-arn <provider_sns_arn> --protocol lambda --notification-endpoint <consumer_lambda_arn> --profile consumer-IAM-account
答案 1 :(得分:1)
在AWS Lambda开发人员指南中,有一个tutorial,其中AWS CLI命令用于设置从属于另一个帐户的SNS调用Lambda函数。
该程序与接受答案中的程序非常相似。订阅不必确认。它已准备好在aws sns subscribe
命令之后立即进行测试。
答案 2 :(得分:1)
今天有类似的要求。概括来说,有3个步骤。假设111111111
是具有SNS主题的生产者帐户,而2222222222
是具有lambda的消费者,并且
允许Lambda函数订阅主题
aws sns --profile SNS_Owner_Profile add-permission \
--topic-arn "arn:aws:sns:us-east-1:111111111:your-sns-top" \
--label "AllowCrossAccountSns" \
--aws-account-id "2222222222" \
--action-name "Receive" "Subscribe"
允许主题调用Lambda函数,
aws lambda --profile Lambda_Owner_Profile add-permission \
--function-name "your-lambda-function" \
--statement-id "allowCrossAccountSNS" \
--principal "sns.amazonaws.com" \
--action "lambda:InvokeFunction" \
--source-arn "arn:aws:sns:us-east-1:111111111:your-sns-top"
将lambda函数订阅该主题。
aws sns --profile Lambda_Owner_Profile subscribe \
--topic-arn "arn:aws:sns:us-east-1:111111111:your-sns-top" \
--protocol "lambda" \
--notification-endpoint "arn:aws:lambda:us-east-1:2222222222:function:your-lambda-function"
答案 3 :(得分:0)
我遇到了同样的问题。该错误是因为您正在从拥有SNS主题的帐户中调用SNS订阅功能。虽然这看起来很合理,并且通常会这样做,但是AWS希望您在进行跨账户访问时采取另一种方式-您必须从拥有Lambda函数的账户中调用SNS订阅函数。 / p>