如何疑難排解 Lambda 許可問題?

上次更新日期:2022 年 10 月 26 日

我有幾個與 AWS Lambda 函數相關的許可問題。我應該採取哪些疑難排解步驟?

簡短描述

引發 Lambda 函數許可問題的原因如下:

  • Lambda 函數沒有執行程式碼中動作的許可。
  • 負責叫用 Lambda 函數的 AWS 服務沒有足夠的許可來叫用該函數。
  • 使用者帳戶沒有建立、更新或刪除 Lambda 資源的適當許可。
  • 由於缺少 Amazon Elastic Compute Cloud (Amazon EC2) 許可,Lambda 沒有建立彈性網路界面的許可。

解決方案

許可考量

  • Lambda 函數的執行角色是 AWS Identity and Access Management (IAM) 角色,可授予函數存取 AWS 服務和資源的許可。您可以在建立函數時提供此角色,而 Lambda 會在叫用函數時擔任該角色。您可以建立具有將日誌傳送到 Amazon CloudWatch 以及將追蹤資料上傳到 AWS X-Ray 的許可的執行角色。
  • 您可以隨時從 Lambda 函數的執行角色新增或移除許可。您也可以將 Lambda 函數設定為使用不同的角色。為您的函數使用 AWS SDK 呼叫的任何 AWS 服務新增許可。然後,為 Lambda 用來開啟選用功能的 AWS 服務新增許可。
  • 您可以在建立 Lambda 函數時提供執行角色。當您叫用新的 Lambda 函數時,Lambda 會藉由擔任執行角色,自動為您的函數提供臨時憑證。您不必在函數程式碼中呼叫 sts:AssumeRole。當您將許可新增至 Lambda 函數時,也會更新函數的程式碼或組態。透過更新函數的程式碼或組態,您函數的執行中執行個體會被迫停止,以便取代它們。如需詳細資訊,請參閱將資源型政策用於 Lambda
  • 使用資源型政策,為每個資源授與其他 AWS 帳戶或組織的使用許可。資源型政策可以授予 AWS 服務的許可,以代表您叫用 Lambda 函數。
  • 若要叫用或管理 Lambda 函數,請授與帳戶許可。建立單個資源型政策,將許可授與 AWS Organizations 中的整個組織。使用資源型政策將叫用許可授與 AWS 服務,以便叫用函數以回應指定的帳戶活動。
  • 資源型政策適用於單一函數、版本、別名或層版本。資源型政策向一或多個 AWS 服務和帳戶授予許可。對於需要存取多個資源或使用資源型政策不支援的 API 動作的受信任帳戶,請使用跨帳戶角色。如需詳細資訊,請參閱 Lambda 許可
  • 使用 IAM 身分型政策授與帳戶中的使用者存取 Lambda 的許可。身分型政策可以直接套用至使用者,或套用至與使用者相關聯的群組和角色。授予其他帳戶中的使用者許可,以在您的帳戶中擔任角色並存取您的 Lambda 資源。
  • Lambda 提供 AWS 受管政策,以授予 Lambda API 動作的存取權。受管政策可能會授予其他用於開發和管理 Lambda 資源的 AWS 服務的存取權。Lambda 會視需要更新這些受管政策,以確保您的使用者可以存取發佈的新功能。如需詳細資訊,請參閱 Lambda 的身分型 IAM 政策

疑難排解步驟

1.    如果 Lambda 函數應該叫用另一個函數或另一個 AWS 服務,但叫用失敗,請檢查 Lambda 執行角色。
如需詳細資訊,請參閱 Lambda 執行角色

2.    確認 AWS 服務或使用者已針對 lambda:InvokeFunction 動作設定許可。
如需詳細資訊,請參閱 AWS Lambda 的動作、資源和條件金鑰

3.    在跨帳戶案例中,存取來源和目標帳戶,以檢查擔任 IAM 角色以叫用 Lambda 函數所需的許可。
如需詳細資訊,請參閱我如何設定 Lambda 函數以擔任另一個 AWS 帳戶中的 IAM 角色?

4.    若要連線至 VPC,Lambda 函數的執行角色必須具有下列許可:
ec2:CreateNetworkInterface
ec2:DescribeNetworkInterfaces
ec2:DeleteNetworkInterface

5.    將非工作中的許可集與您的任何工作設定進行比較,以解決許可問題。您也可以參考 AWS 文件以驗證許可。

6.    來源帳戶必須具有叫用 Lambda 函數所需的許可。檢閱 Lambda 函數所需的事件來源映射許可。事件來源映射會使用函數執行角色中的許可來讀取和管理事件來源中的項目。許可、事件結構、設定和輪詢行為會因事件來源而異。如需詳細資訊,請參閱疑難排解 AWS Lambda 身分和存取權

7.    檢查您的 AWS CloudTrail 日誌,以追蹤對 Lambda 進行的 API 呼叫。檢閱 CloudTrail 收集的資訊,以判斷:
向 Lambda 提出的要求。
提出要求的來源 IP 位址。
提出要求的人員。
提出要求的時間。
如需詳細資訊,請參閱使用 CloudTrail 記錄 Lambda API 呼叫

8.    如果仍然無法解決問題,請在 AWS Support 建立案例。在您的案例中提供下列資訊:

  • Lambda 函數的 ARN。
  • Lambda 函數設定上的工作流程,包括所有內含 AWS 服務。
  • 有關問題是間歇性或連續性發生的詳細資訊。
  • 有關問題是否為跨帳戶案例的詳細資訊。
  • 涉及的許可和/或 IAM 角色名稱。
  • 完整的 .txt 格式 CloudWatch 日誌,從問題發生開始。這些 CloudWatch 日誌用於識別 Lambda 函數錯誤,包括逾時問題、初始化持續時間和許可問題。
  • 問題的確切時間戳記,帶有時區或 UTC 時間戳記。

備註:由於安全和隱私權因素,AWS Support 代表無法存取客戶的 CloudWatch 日誌。