View a markdown version of this page

Lambda 耐用函數的安全性和許可 - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Lambda 耐用函數的安全性和許可

AWS Lambda 耐久函數需要特定的 IAM 許可,才能執行和管理持久的執行。僅授予每個委託人所需的許可,以遵循最低權限原則。

耐用函數的 IAM 許可

對於最持久的執行 API 動作,Lambda 會針對持久的執行 ARN 授權請求,而不是函數 ARN。持久性執行是函數版本的子資源,其 ARN 會擴展函數 ARN:

arn:aws:lambda:region:account-id:function:function-name:qualifier/durable-execution/execution-name/execution-id

持久性執行 ARN 中的限定詞一律為 $LATEST或版本編號。

如果您的政策在資源元素中指定不合格的函數 ARN,Lambda 會拒絕請求,因為不合格的 ARN 永遠不會符合持久的執行 ARN。若要授予存取權,請將限定詞模式附加至函數 ARN:

  • arn:aws:lambda:us-east-1:123456789012:function:my-function:* – 符合每個版本的耐久執行。

  • arn:aws:lambda:us-east-1:123456789012:function:my-function:1/durable-execution/* – 僅符合 第 1 版的耐久執行。

大多數政策使用 :*表單,因為版本編號可能會隨每次部署而變更。

別名不適用於持久的執行許可

您可以透過別名叫用耐久的 函數,但產生的執行 ARN 包含已解析的版本編號。

執行角色許可

您耐用函數的執行角色必須具有建立檢查點和擷取執行狀態的許可。下列政策顯示最低必要許可:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:CheckpointDurableExecution", "lambda:GetDurableExecutionState" ], "Resource": "arn:aws:lambda:region:account-id:function:function-name:*" } ] }

當您使用主控台建立耐用的函數時,Lambda 會自動將這些許可新增至執行角色。如果您使用 AWS CLI 或 建立函數 AWS CloudFormation,請將這些許可新增至您的執行角色。

若要讓 Lambda 擔任您的執行角色,角色的信任政策必須將 Lambda 服務主體 (lambda.amazonaws.com) 指定為信任的服務。下列範例顯示授予 Lambda 擔任角色許可的信任政策。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
最低權限原則

Resource元素範圍限定為特定函數 ARNs,而不是使用萬用字元。這只會將執行角色限制為需要它們的函數的檢查點操作。

範例多個函數的範圍許可
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:CheckpointDurableExecution", "lambda:GetDurableExecutionState" ], "Resource": [ "arn:aws:lambda:us-east-1:123456789012:function:orderProcessor:*", "arn:aws:lambda:us-east-1:123456789012:function:paymentHandler:*" ] } ] }

或者,您可以使用 AWS 受管政策AWSLambdaBasicDurableExecutionRolePolicy,其中包含必要的持久執行許可,以及 Amazon CloudWatch Logs 的基本 Lambda 執行許可。

管理持久性執行的許可

Lambda lambda:GetDurableExecution會針對持久性執行 ARN 授權 lambda:GetDurableExecutionHistory、 和 lambda:StopDurableExecution動作。

若要列出函數的耐久執行,請使用 lambda:ListDurableExecutionsByFunction。Lambda 會針對請求中的函數 ARN 授權此動作。下列規則適用於 ARN 比對:

  • 授予不合格函數 ARN 的政策只會比對使用不合格函數名稱的請求。

  • 授予合格 ARN 的政策只會比對使用合格函數名稱的請求。

如需詳細資訊,請參閱參考政策資源區段中的函數

若要比對使用任一格式的函數名稱提出的請求,請同時包含不合格和合格的函數 ARN,如下列政策所示:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ManageDurableExecutions", "Effect": "Allow", "Action": [ "lambda:GetDurableExecution", "lambda:GetDurableExecutionHistory", "lambda:StopDurableExecution" ], "Resource": "arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction:*" }, { "Sid": "ListDurableExecutions", "Effect": "Allow", "Action": "lambda:ListDurableExecutionsByFunction", "Resource": [ "arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction", "arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction:*" ] } ] }

傳送回呼的許可

傳送回呼結果的外部系統使用 lambda:SendDurableExecutionCallbackSuccesslambda:SendDurableExecutionCallbackFailurelambda:SendDurableExecutionCallbackHeartbeat動作。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "SendCallbacks", "Effect": "Allow", "Action": [ "lambda:SendDurableExecutionCallbackSuccess", "lambda:SendDurableExecutionCallbackFailure", "lambda:SendDurableExecutionCallbackHeartbeat" ], "Resource": "arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction:*" } ] }

Lambda 會針對建立回呼之持久執行的 ARN 授權回呼請求。

狀態加密

Lambda 耐用函數會加密靜態執行資料。每個函數執行都會維持其他執行無法存取的隔離狀態。您可以設定客戶受管金鑰來加密持久的執行資料。如需詳細資訊,請參閱加密 AWS Lambda 持久的執行資料

檢查點資料包括:

  • 步驟結果和錯誤

  • 鏈結調用輸入

如需靜態加密之耐久執行資料的完整清單,請參閱 加密的內容

當 Lambda 讀取或寫入檢查點資料時,所有資料都會使用 TLS 在傳輸中加密。

使用自訂序列化程式和還原序列化程式進行自訂加密

對於關鍵安全需求,您可以使用自訂序列化程式和使用耐用 SDK 的還原序列化程式 (SerDer) 來實作自己的加密和解密機制。此方法可讓您完全控制用來保護檢查點資料的加密金鑰和演算法。

重要

當您使用自訂加密時,您會失去 Lambda 主控台和 API 回應中操作結果的可見性。檢查點資料會在執行歷史記錄中顯示加密,且無法在未解密的情況下進行檢查。

函數的執行角色對自訂 SerDer 實作中使用的 AWS KMS 金鑰的需求kms:Encryptkms:Decrypt許可。

CloudTrail 日誌記錄

Lambda 會將檢查點操作記錄為其中的資料事件 AWS CloudTrail。您可以使用 CloudTrail 在建立檢查點時稽核、追蹤執行狀態變更,以及監控對持久執行資料的存取。

檢查點操作會顯示在具有下列事件名稱的 CloudTrail 日誌中:

  • CheckpointDurableExecution - 步驟完成並建立檢查點時記錄

  • GetDurableExecutionState - 當 Lambda 在重播期間擷取執行狀態時記錄

若要啟用耐用函數的資料事件記錄,請設定 CloudTrail 追蹤來記錄 Lambda 資料事件。如需詳細資訊,請參閱《CloudTrail 使用者指南》中的記錄資料事件

範例:檢查點操作的 CloudTrail 日誌項目

{ "eventVersion": "1.08", "eventTime": "2024-11-16T10:30:45Z", "eventName": "CheckpointDurableExecution", "eventSource": "lambda.amazonaws.com", "requestParameters": { "functionName": "myDurableFunction", "executionId": "exec-abc123", "stepId": "step-1" }, "responseElements": null, "eventType": "AwsApiCall" }

跨帳戶考量事項

如果您跨 AWS 帳戶叫用耐久的函數,呼叫帳戶需要 lambda:InvokeFunction 許可,但檢查點操作一律使用函數帳戶中的執行角色。呼叫帳戶無法直接存取檢查點資料或執行狀態。

此隔離可確保檢查點資料在函數的帳戶內保持安全,即使從外部帳戶調用也一樣。

繼承的 Lambda 安全功能

耐用的函數會從 Lambda 繼承所有安全、控管和合規功能。其中包括 VPC 連線、環境變數加密、無效字母佇列、預留並行、函數 URLs、程式碼簽署,以及 SOC、PCI DSS 和 HIPAA 等合規認證。

如需 Lambda 安全性功能的詳細資訊,請參閱《Lambda 開發人員指南》中的 中的安全性 AWS Lambda。持久性函數的唯一額外安全考量是本指南中記錄的 IAM 許可。