簡體   English   中英

從外部賬戶使用 SNS 調用 Lambda

[英]Invoke Lambda using SNS from Outside Account

我一直在關注 Amazon 的以下博客文章(場景 3:從另一個帳戶中的 Amazon S3 存儲桶通知觸發 Lambda 函數)關於授權 Lambda 函數用於各種用途。 我想設置一個 Lambda 函數來接受來自外部帳戶的 SNS 消息(在具有 lambda 函數的帳戶外部)。

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>

有沒有人能夠從另一個帳戶中的“遠程”SNS 調用 Lambda 函數? 我有點困惑我可能哪里出錯了……根據博客文章中的說明,我完全希望遠程 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.

如果提供者賬戶授權擁有 lambda 的消費者賬戶訂閱 SNS 主題,您就可以。 這可以在主題頁面下的“編輯主題策略”中完成。

以下是允許 lambda 從外部帳戶偵聽 SNS 主題的步驟摘要:

  1. 消費者賬戶創建 lambda,
  2. 消費者帳戶通過指定提供者的 SNS 主題 ARN 將事件源添加到 AWS 控制台中的 lambda(不要擔心此處的錯誤消息),
  3. 提供商賬戶將 SNS 訂閱權限添加到第三方 AWS 賬戶中創建的消費者 IAM 賬戶(通過上述“編輯主題策略”完成),
  4. 消費者使用第 2 步中的 IAM 賬戶通過 AWS CLI 添加對提供商賬戶的訂閱。

之前對我有用的第 4 步示例命令:

aws sns subscribe --topic-arn <provider_sns_arn> --protocol lambda --notification-endpoint <consumer_lambda_arn> --profile consumer-IAM-account

今天有類似的要求。 總結起來有3個步驟。 假設111111111是具有 SNS 主題的生產者帳戶, 2222222222是具有 lambda 的消費者,並且

  1. 允許 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"
  2. 允許主題調用 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"
  3. 將 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"

在 AWS Lambda 開發人員指南中有一個教程,其中 AWS CLI 命令用於設置從屬於另一個賬戶的 SNS 調用 Lambda 函數。

該過程與接受的答案中的過程非常相似。 訂閱無需確認。 aws sns subscribe命令之后,它已准備好進行測試。

我遇到了同樣的問題。 該錯誤是因為您正在從擁有 SNS 主題的帳戶調用 SNS 訂閱函數。 雖然這看起來合乎邏輯並且是您通常的做法,但 AWS 希望您在涉及跨賬戶訪問時采用相反的方式 - 您必須從擁有 Lambda 函數的賬戶調用 SNS 訂閱函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM