我想將我的 AWS Lambda 函數訂閱至另一個帳戶中的 Amazon Simple Notification Service (Amazon SNS) 主題。
簡短描述
使用 Amazon SNS 主控台,將跨帳戶 AWS Lambda 訂閱新增至 Amazon SNS 主題。
解決方法
先決條件
在開始之前,請確保:
- Lambda 函數資源政策允許 SNS 調用函數。
- SNS 主題存取政策允許 Lambda 訂閱該主題。
注意: SNS 主題位於帳戶 A 中,而 Lambda 函數位於帳戶 B 中。
訂閱跨帳戶 Lambda 函數
可以透過兩種可能的方式將跨帳戶 Lambda 函數訂閱至 SNS 主題:
- 在帳戶 B 中,從 Lambda 主控台新增 SNS 觸發器
- 在帳戶 B (具有 Lambda 函數的帳戶) 中,從 SNS 主控台新增 Lambda 訂閱
建立資源
在帳戶 A 中建立 SNS 主題:
- 開啟 Amazon SNS 主控台,然後在左側面板上選取主題。
- 選擇建立主題,選取主題類型,然後輸入主題名稱。
- 向下捲動並選擇建立主題。
允許帳戶 B 對主題執行訂閱動作。
- 編輯主題存取政策,向帳戶 B 授予 sns:Subscribe 權限。
- 新增如下所示的政策聲明並儲存:
{
"Sid": "Allow-AccountB-To-Subscribe",
"Effect": "Allow",
"Principal": {
"AWS": ""
},
"Action": "sns:Subscribe",
"Resource": ""
}
注意:對於主體,請替換為 <AccountB> 具有 Lambda 函數的帳戶號碼。對於資源欄位,請替換為 <SNSTopicARN> SNS 主題的 Amazon Resource Name (ARN)。
在帳戶 B 中建立 Lambda 函數:
- 在 AWS Lambda 主控台上開啟函數頁面。然後,選擇建立函數。
- 輸入函數名稱。
- 對於執行角色,請選擇使用基本 Lambda 權限建立新角色。Lambda 會建立一個執行角色,向函數授予將日誌上傳到 Amazon CloudWatch 的權限。
- 向下捲動並選擇建立函數按鈕。
透過在 Lambda 主控台上新增觸發器來訂閱 Lambda 函數 (選項 1)
- 在 AWS Lambda 主控台上開啟函數頁面,然後選取您先前建立的函數。
- 選擇新增觸發器按鈕。
- 在觸發器組態頁面上,從下拉式清單中選取 SNS。
- 在 SNS 主題欄位上,貼上主題 ARN。
- 選取新增按鈕。
帳戶 A 中的 SNS 主題現在可以在帳戶 B 中調用您的 Lambda 函數。
測試組態
透過向 SNS 主題發佈訊息進行測試。
注意: 當您從 Lambda 主控台新增觸發器時,Lambda 會自動為 Amazon SNS 新增必要的權限,以便從此觸發器調用您的 Lambda 函數。
透過從 SNS 主控台新增訂閱來訂閱 Lambda 函數 (選項 2)
此選項會要求您明確授予 SNS 服務主體權限以執行 lambda:InvokeFunction 動作。
允許 SNS 服務主體調用 Lambda 函數。
在 Lambda 主控台的函數頁面上,選取您先前建立的函數。然後完成以下步驟:
- 選擇組態索引標籤,然後選擇權限。
- 向下捲動至以資源為基礎的政策區段。然後,選擇新增權限按鈕。
- 選取 AWS 服務,然後從下拉式清單中選擇 SNS。接著,填充欄位:
對於陳述式 ID,將其設定為 AllowSNSToInvokeFunction
對於來源 ARN,貼上先前建立的 SNS 主題的 ARN
對於動作,選擇 lambda:InvokeFunction
- 選擇儲存。
- 建立 Lambda 的 SNS 訂閱。
在帳戶 B 中,開啟 Amazon SNS 主控台。
- 在左側面板中,選擇訂閱。
- 選擇建立訂閱按鈕。
- 在主題 ARN 欄位中貼上帳戶 A 中 SNS 主題的 ARN。
- 從協定下拉式清單中選取 AWS Lambda。
- 在端點欄位上貼上 Lambda 函數的 ARN
- 向下捲動並選擇建立訂閱按鈕。
**注意:**請確保您從具有 Lambda 函數 (帳戶 B) 的 AWS 帳戶將 Lambda 函數訂閱至 SNS 主題。如果您嘗試從具有 SNS 主題 (帳戶 A) 的帳戶建立訂閱,則會收到下列錯誤:
Error code: AccessDeniedException - Error message: User: arn:aws:sts::XXXXXXX:XXXXXXX/XXXXX/XXXXXX is not authorized to perform: lambda:AddPermission on resource: arn:aws:lambda:region:XXXXXXX:function:XXXXXXX
相關資訊
使用 AWS Lambda 搭配 Amazon Simple Notification Service
當我嘗試將 Lambda 函數訂閱至我的 Amazon SNS 主題時,為什麼會收到授權錯誤?