

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

# 控制對 Lambda 函數 URL 的存取
<a name="urls-auth"></a>

**注意**  
自 2025 年 10 月起，新的函數 URL 將同時需要 `lambda:InvokeFunctionUrl` 和 `lambda:InvokeFunction` 許可。

您可以透過 [AuthType](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunctionUrlConfig.html#lambda-CreateFunctionUrlConfig-request-AuthType) 參數及連接至特定函數的[資源型政策](access-control-resource-based.md)，控制 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html)。

本頁提供了針對兩種身分驗證類型的資源型政策範例，也說明了如何使用 [AddPermission](https://docs.aws.amazon.com/lambda/latest/api/API_AddPermission.html) API 操作或 Lambda 主控台來建立這些政策。如需有關設定許可後如何調用函數 URL 的資訊，請參閱[呼叫 Lambda 函數 URL](urls-invocation.md)。

**Topics**
+ [使用 `AWS_IAM` 驗證類型](#urls-auth-iam)
+ [使用 `NONE` 驗證類型](#urls-auth-none)
+ [控管和存取權控制](#urls-governance)

## 使用 `AWS_IAM` 驗證類型
<a name="urls-auth-iam"></a>

如果您選擇採用 `AWS_IAM` 身分驗證類型，則使用者必須擁有 `lambda:InvokeFunctionUrl` 和 `lambda:InvokeFunction` 許可才能調用 Lambda 函數 URL。視提出調用請求的使用者而定，您可能需要透過[資源型政策](access-control-resource-based.md)才能授予此許可。

如果提出請求的委託人與函數 URL AWS 帳戶 位於相同位置，則委託人必須在其[身分型政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)中****具有 `lambda:InvokeFunctionUrl`和 `lambda:InvokeFunction` 許可，**或在**函數的資源型政策中授予許可。換言之，若使用者已經透過資源型政策取得 `lambda:InvokeFunctionUrl` 和 `lambda:InvokeFunction` 許可，即可自行決定是否使用身分型政策。政策評估需遵循 [Policy evaluation logic](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html) 中概述的規則。

如果提出請求的主體位於不同帳戶，則主體必須**同時**透過身分型政策取得 `lambda:InvokeFunctionUrl` 和 `lambda:InvokeFunction` 許可，**並且**針對其嘗試調用的函式，透過資源型政策取得許可。政策評估需遵循 [Determining whether a cross-account request is allowed](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html#policy-eval-cross-account) 中概述的規則。

下列資源型政策允許 中`example` AWS 帳戶 `444455556666`的角色叫用與函數 相關聯的函數 URL`my-function`。[lambda：InvokedViaFunctionUrl](https://docs.aws.amazon.com/lambda/latest/api/API_AddPermission.html#lambda-AddPermission-request-InvokedViaFunctionUrl) 內容索引鍵會將 `lambda:InvokeFunction` 動作限制為函數 URL 呼叫。這意味著主體必須使用函數 URL 來調用函數。如未包含 `lambda:InvokedViaFunctionUrl`，則主體除了函數 URL 外，還可以透過其他調用方法來調用函數。

**Example – 跨帳戶資源型政策**    
****  

```
{
  "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 主控台中的[函數頁面](https://console.aws.amazon.com/lambda/home#/functions)。

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

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

1. 在 **Resource-based policy** (資源型政策) 底下，選擇 **Add permissions** (新增許可)。

1. 選擇 **Function URL** (函數 URL)。

1. 針對 **Auth type** (驗證類型) 選擇 **AW\$1IAM**。

1. 輸入政策陳述式的**陳述式 ID**。

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

1. 選擇**儲存**。

或者，您可以使用下列 [add-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html) AWS Command Line Interface (AWS CLI) 命令建立此政策。使用 時 AWS CLI，您必須分別新增 `lambda:InvokeFunctionUrl`和 `lambda: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` 驗證類型
<a name="urls-auth-none"></a>

**重要**  
當函數 URL 身分驗證類型為 `NONE`，並且透過[資源型政策](access-control-resource-based.md)授予公有存取權時，任何未經身分驗證的使用者只要取得函數 URL，即可調用對應函數。

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

如果您選擇 `NONE` 驗證類型，Lambda 就不會使用 IAM 對存取函數 URL 的請求執行身分驗證。但是，函式必須具有允許 `lambda:InvokeFunctionUrl` 和 `lambda:InvokeFunction` 的資源型政策。當您`NONE`使用主控台或 AWS Serverless Application Model (AWS SAM) 建立具有身分驗證類型的函數 URL 時，Lambda 會自動為您建立以資源為基礎的政策。如果您直接使用 AWS CloudFormation AWS CLI或 Lambda API，則必須[自行新增政策](#policy-cli)。

建議在使用 `NONE` 身分驗證類型時，在資源型政策中包含 [lambda:InvokedViaFunctionUrl](https://docs.aws.amazon.com/lambda/latest/api/API_AddPermission.html#lambda-AddPermission-request-InvokedViaFunctionUrl) 內容索引鍵。此內容索引鍵可確保函數只能透過函數 URL 調用，而不能透過其他調用方法調用。

請注意有關此政策的下列資訊：
+ 所有實體都可以呼叫 `lambda:InvokeFunctionUrl` 和 `lambda:InvokeFunction`。這意味著任何擁有函數 URL 的使用者都可以調用函數。
+ `lambda:FunctionUrlAuthType` 條件索引鍵值為 `NONE`。這意味著，唯有當函數 URL 的身分驗證類型也是 `NONE` 時，此政策陳述式才會允許您存取函數 URL。
+ `lambda:InvokedViaFunctionUrl` 條件可確保函數只能透過函數 URL 調用，而不能透過其他調用方法調用。

**Example – NONE 身分驗證類型的預設資源型政策**    
****  

```
{
  "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 建立身分驗證類型為 的函數 URL`NONE`，否則您必須自行新增資源型政策。使用下列命令為 `lambda:InvokeFunctionUrl` 和 `lambda: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:invokeFunctionUrl` 和 `lambda:InvokeFunction` 許可，則當使用者嘗試調用函數 URL 時，將收到 403 Forbidden 錯誤代碼。即使函數 URL 使用 `NONE` 身分驗證類型，也會發生這種情況。

## 控管和存取權控制
<a name="urls-governance"></a>

除了函數 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。

若要允許或拒絕其他 AWS 實體的函數 URL 存取，請在 IAM 政策中包含這些動作。例如，下列政策授予 `example`角色 AWS 帳戶 更新**my-function**帳戶 中函數的函數 URL 的`444455556666`許可`123456789012`。

**Example 跨帳戶函數 URL 政策**    
****  

```
{
    "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"
        }
    ]
}
```

### 條件索引鍵
<a name="urls-condition-keys"></a>

如要精細控制函數 URL 的存取權，請使用條件內容索引鍵。Lambda 為函數 URL 支援下列內容索引鍵：
+ `lambda:FunctionUrlAuthType`：定義描述函數 URL 所用身分驗證類型的列舉值。此值可以是 `AWS_IAM` 或 `NONE`。
+ `lambda:InvokedViaFunctionUrl`：將 `lambda:InvokeFunction` 動作限制為透過函數 URL 進行的呼叫。這可確保該函數只能使用函數 URL 調用，而不能透過其他調用方法調用。如需使用 `lambda:InvokedViaFunctionUrl` 內容索引鍵的資源型政策範例，請參閱[使用 `AWS_IAM` 驗證類型](#urls-auth-iam)與[使用 `NONE` 驗證類型](#urls-auth-none)中的範例。

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

**Example 明確拒絕請求的函數 URL 政策**    
****  

```
{
    "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"
                }
            }
        }
    ]
}
```

若要授予 `example`角色 AWS 帳戶 `444455556666`許可，以對 URL 驗證類型為 的函數進行 `CreateFunctionUrlConfig`和 `UpdateFunctionUrlConfig`請求`AWS_IAM`，您可以定義下列政策：

**Example 明確允許請求的函數 URL 政策**    
****  

```
{
    "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"
                }
            }
        }
    ]
}
```

您也可以在服[務控制政策](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)(SCP) 中使用此條件索引鍵。在 AWS Organizations中使用 SCP 管理整個組織的許可。例如，若要拒絕使用者建立或更新使用 `AWS_IAM` 以外驗證類型的函數 URL，請使用以下服務控制政策：

**Example 明確拒絕請求的函數 URL SCP**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action":[
                "lambda:CreateFunctionUrlConfig",
                "lambda:UpdateFunctionUrlConfig"
            ],
            "Resource": "arn:aws:lambda:*:123456789012:function:*",
            "Condition": {
                "StringNotEquals": {
                    "lambda:FunctionUrlAuthType": "AWS_IAM"
                }
            }
        }
    ]
}
```