控制對 Lambda 函數 URL 的存取 - AWS Lambda

控制對 Lambda 函數 URL 的存取

注意

自 2025 年 10 月起,新的函式 URL 將同時需要 lambda:InvokeFunctionUrllambda:InvokeFunction 許可。

您可以透過 AuthType 參數及連接至特定函式的資源型政策,控制 Lambda 函式 URL 的存取權。這兩個元件的組態能決定誰可以對函數 URL 呼叫或執行其他管理動作。

AuthType 參數決定 Lambda 如何對函數 URL 的請求執行身分驗證或授權。設定函數 URL 時,您必須指定以下任一 AuthType 選項:

  • AWS_IAM – Lambda 使用 AWS Identity and Access Management (IAM),根據 IAM 委託人的身分政策和函數的資源型政策,對請求執行身分驗證和授權。如果您希望僅允許已進行身分驗證的使用者和角色透過函式 URL 來調用函式,請選擇此選項。

  • NONE – Lambda 不會在呼叫函數前執行任何身分驗證。然而,函數的資源型政策永遠有效,而且您必須授予公有存取權,您的函數 URL 才能接收請求。選擇此選項,即可允許使用者公開存取函數 URL,而且不必完成身分驗證。

如需進一步深入了解安全性的相關資訊,您可以使用 AWS Identity and Access Management Access Analyzer 取得函數 URL 外部存取情形的全面分析。IAM Access Analyzer 也能監控您 Lambda 函數新增或更新的許可,以協助您識別授予公有和跨帳戶存取權的許可。您可以免費使用 IAM Access Analyzer。若要開始使用 IAM Access Analyzer,請參閱使用 AWS IAM Access Analyzer

本頁提供了針對兩種身分驗證類型的資源型政策範例,也說明了如何使用 AddPermission API 操作或 Lambda 主控台來建立這些政策。如需有關設定許可後如何調用函式 URL 的資訊,請參閱呼叫 Lambda 函數 URL

使用 AWS_IAM 驗證類型

如果您選擇採用 AWS_IAM 身分驗證類型,則使用者必須擁有 lambda:InvokeFunctionUrllambda:InvokeFunction 許可才能調用 Lambda 函式 URL。視提出調用請求的使用者而定,您可能需要透過資源型政策才能授予此許可。

如果提出請求的主體與函式 URL 位於同一個 AWS 帳戶,則主體必須透過身分型政策取得 lambda:InvokeFunctionUrllambda:InvokeFunction 許可透過函式的資源型政策取得許可。換言之,若使用者已經透過資源型政策取得 lambda:InvokeFunctionUrllambda:InvokeFunction 許可,即可自行決定是否使用身分型政策。政策評估需遵循 Policy evaluation logic 中概述的規則。

如果提出請求的主體位於不同帳戶,則主體必須同時透過身分型政策取得 lambda:InvokeFunctionUrllambda:InvokeFunction 許可,並且針對其嘗試調用的函式,透過資源型政策取得許可。政策評估需遵循 Determining whether a cross-account request is allowed 中概述的規則。

以下資源型政策允許 AWS 帳戶 444455556666 中的 example 角色調用與函式 my-function 關聯的函式 URL。lambda:InvokedViaFunctionUrl 內容索引鍵會將 lambda:InvokeFunction 動作限制為函式 URL 呼叫。這意味著主體必須使用函式 URL 來調用函式。如未包含 lambda:InvokedViaFunctionUrl,則主體除了函式 URL 外,還可以透過其他調用方法來調用函式。

範例 – 跨帳戶資源型政策
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/example" }, "Action": "lambda:InvokeFunctionUrl", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "AWS_IAM" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/example" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function", "Condition": { "Bool": { "lambda:InvokedViaFunctionUrl": "true" } } } ] }

您可以依照下列步驟,透過主控台建立此資源型政策:

將 URL 呼叫許可授予其他帳戶 (主控台)
  1. 開啟 Lambda 主控台中的函數頁面

  2. 選擇您要授予 URL 呼叫許可的函數名稱。

  3. 依序選擇 Configuration (組態) 索引標籤和 Permissions (許可)。

  4. Resource-based policy (資源型政策) 底下,選擇 Add permissions (新增許可)。

  5. 選擇 Function URL (函數 URL)。

  6. 針對 Auth type (驗證類型) 選擇 AW_IAM

  7. 輸入政策陳述式的陳述式 ID

  8. 依據要向其授予許可的使用者或角色,在主體中輸入其帳戶 ID 或 Amazon Resource Name (ARN)。例如:444455556666

  9. 選擇儲存

或者,您也可以使用下列 add-permission AWS Command Line Interface (AWS CLI) 命令,建立此政策。使用 AWS CLI 時,必須分別新增 lambda:InvokeFunctionUrllambda:InvokeFunction 陳述式。例如:

aws lambda add-permission --function-name my-function \ --statement-id UrlPolicyInvokeURL \ --action lambda:InvokeFunctionUrl \ --principal 444455556666 \ --function-url-auth-type AWS_IAM
aws lambda add-permission --function-name my-function \ --statement-id UrlPolicyInvokeFunction \ --action lambda:InvokeFunction \ --principal 444455556666 \ --invoked-via-function-url

使用 NONE 驗證類型

重要

當函式 URL 身分驗證類型為 NONE,並且透過資源型政策授予公有存取權時,任何未經身分驗證的使用者只要取得函式 URL,即可調用對應函式。

在部分情況下,您可能需要將函式 URL 設定為公開存取。例如,您可能希望為直接透過 Web 瀏覽器提出的請求提供服務。如要允許使用者公開存取您的函數 URL,請選擇 NONE 驗證類型。

如果您選擇 NONE 驗證類型,Lambda 就不會使用 IAM 對存取函數 URL 的請求執行身分驗證。但是,函式必須具有允許 lambda:InvokeFunctionUrllambda:InvokeFunction 的資源型政策。當您透過主控台或 AWS Serverless Application Model (AWS SAM) 建立身分驗證類型為 NONE 的函式 URL 時,Lambda 會自動為您建立資源型政策。若您使用 AWS CLI、AWS CloudFormation,或直接使用 Lambda API,則必須自行新增政策

建議在使用 NONE 身分驗證類型時,在資源型政策中包含 lambda:InvokedViaFunctionUrl 內容索引鍵。此內容索引鍵可確保函式只能透過函式 URL 調用,而不能透過其他調用方法調用。

請注意有關此政策的下列資訊:

  • 所有實體都可以呼叫 lambda:InvokeFunctionUrllambda:InvokeFunction。這意味著任何擁有函式 URL 的使用者都可以調用函式。

  • lambda:FunctionUrlAuthType 條件索引鍵值為 NONE。這意味著,唯有當函式 URL 的身分驗證類型也是 NONE 時,此政策陳述式才會允許您存取函式 URL。

  • lambda:InvokedViaFunctionUrl 條件可確保函式只能透過函式 URL 調用,而不能透過其他調用方法調用。

範例 – NONE 身分驗證類型的預設資源型政策
JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "FunctionURLAllowPublicAccess", "Effect": "Allow", "Principal": "*", "Action": "lambda:InvokeFunctionUrl", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "NONE" } } }, { "Sid": "FunctionURLInvokeAllowPublicAccess", "Effect": "Allow", "Principal": "*", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Condition": { "Bool": { "lambda:InvokedViaFunctionUrl": "true" } } } ] }
使用 AWS CLI 建立資源型政策

除非透過主控台或 AWS SAM 建立身分驗證類型為 NONE 的函式 URL,否則您必須自行新增資源型政策。使用下列命令為 lambda:InvokeFunctionUrllambda:InvokeFunction 許可建立陳述式。每個陳述式都必須在個別命令中進行新增。

aws lambda add-permission \ --function-name UrlTestFunction \ --statement-id UrlPolicyInvokeURL \ --action lambda:InvokeFunctionUrl \ --principal * \ --function-url-auth-type NONE
aws lambda add-permission \ --function-name UrlTestFunction \ --statement-id UrlPolicyInvokeFunction \ --action lambda:InvokeFunction \ --principal * \ --invoked-via-function-url
注意

如果您刪除具有驗證類型 NONE 的函數 URL,Lambda 不會自動刪除關聯的資源型政策。如果您想要刪除此政策,則必須手動執行。

如果函式資源型政策並未授予 lambda:invokeFunctionUrllambda:InvokeFunction 許可,則當使用者嘗試調用函式 URL 時,將收到 403 Forbidden 錯誤代碼。即使函式 URL 使用 NONE 身分驗證類型,也會發生這種情況。

控管和存取權控制

除了函數 URL 呼叫許可之外,您也可以控制函數 URL 設定動作的存取權。Lambda 支援以下適用於函數 URL 的 IAM 政策動作:

  • lambda:InvokeFunctionUrl – 使用函數 URL 呼叫 Lambda 函數。

  • lambda:CreateFunctionUrlConfig – 建立函數 URL 並設定其 AuthType

  • lambda:UpdateFunctionUrlConfig – 更新函數 URL 組態及其 AuthType

  • lambda:GetFunctionUrlConfig – 檢視函數 URL 的詳細資訊。

  • lambda:ListFunctionUrlConfigs – 列出函數 URL 組態。

  • lambda:DeleteFunctionUrlConfig – 刪除函數 URL。

如要允許或拒絕函數 URL 存取其他 AWS 實體,請在 IAM 政策中加入這些動作。例如,下列政策為 AWS 帳戶的 example 角色授予 444455556666 許可,使其能在帳戶 123456789012 中更新函數 my-function 的函數 URL。

範例 跨帳戶函數 URL 政策
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/example" }, "Action": "lambda:UpdateFunctionUrlConfig", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function" } ] }

條件索引鍵

如要精細控制函式 URL 的存取權,請使用條件內容索引鍵。Lambda 為函式 URL 支援下列內容索引鍵:

  • lambda:FunctionUrlAuthType:定義描述函式 URL 所用身分驗證類型的列舉值。此值可以是 AWS_IAMNONE

  • lambda:InvokedViaFunctionUrl:將 lambda:InvokeFunction 動作限制為透過函式 URL 進行的呼叫。這可確保該函式只能使用函式 URL 調用,而不能透過其他調用方法調用。如需使用 lambda:InvokedViaFunctionUrl 內容索引鍵的資源型政策範例,請參閱使用 AWS_IAM 驗證類型使用 NONE 驗證類型中的範例。

您可以在與函式相關聯的政策中使用這些內容索引鍵。例如,您可能希望限制哪些人可以變更函數 URL 的組態。若要針對 URL 驗證類型為 NONE 的所有函數拒絕所有 UpdateFunctionUrlConfig 請求,您可以定義以下政策:

範例 明確拒絕請求的函數 URL 政策
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action":[ "lambda:UpdateFunctionUrlConfig" ], "Resource": "arn:aws:lambda:us-east-1:123456789012:function:*", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "NONE" } } } ] }

若要為 AWS 帳戶的 example 角色授予 444455556666 許可,允許此角色對 URL 驗證類型為 AWS_IAM 的函數提出 CreateFunctionUrlConfigUpdateFunctionUrlConfig 請求,您可以定義以下政策:

範例 明確允許請求的函數 URL 政策
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/example" }, "Action":[ "lambda:CreateFunctionUrlConfig", "lambda:UpdateFunctionUrlConfig" ], "Resource": "arn:aws:lambda:us-east-1:123456789012:function:*", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "AWS_IAM" } } } ] }

您也可以在服務控制政策(SCP) 中使用此條件索引鍵。在 AWS Organizations 中使用 SCP 管理整個組織的許可。例如,若要拒絕使用者建立或更新使用 AWS_IAM 以外驗證類型的函數 URL,請使用以下服務控制政策:

範例 明確拒絕請求的函數 URL SCP
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Deny", "Action":[ "lambda:CreateFunctionUrlConfig", "lambda:UpdateFunctionUrlConfig" ], "Resource": "arn:aws:lambda:*:123456789012:function:*", "Condition": { "StringNotEquals": { "lambda:FunctionUrlAuthType": "AWS_IAM" } } } ] }