

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

# 設定 API Gateway Lambda 授權方
<a name="configure-api-gateway-lambda-authorization"></a>

建立 Lambda 函數後，可以將 Lambda 函數設定為 API 的授權方。然後，可以設定方法來調用 Lambda 授權方，以判斷呼叫者是否可以調用您的方法。您可以在與您建立 API 的相同帳戶或不同帳戶中建立 Lambda 函數。

您可以使用 API Gateway 主控台的內建工具，或使用 [Postman](https://www.postman.com/) 來測試 Lambda 授權方。如需有關如何使用 Postman 測試 Lambda 授權方函數的指示，請參閱 [使用 API Gateway Lambda 授權方呼叫 API](call-api-with-api-gateway-lambda-authorization.md)。

## 設定 Lambda 授權方 (主控台)
<a name="configure-api-gateway-lambda-authorization-with-console"></a>

 下列程序顯示如何在 API Gateway REST API 主控台建立 Lambda 授權方。若要進一步了解不同類型的 Lambda 授權方，請參閱 [選擇 Lambda 授權方的類型](apigateway-use-lambda-authorizer.md#api-gateway-lambda-authorizer-choose)。

------
#### [ REQUEST authorizer ]

**設定 `REQUEST` Lambda 授權方**

1. 在以下網址登入 API Gateway 主控台：[https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)。

1. 選取 API，然後選擇**授權方**。

1. 選擇**建立授權方**。

1. 針對**授權方名稱**，輸入授權方的名稱。

1. 針對**授權方類型**，選取 **Lambda**。

1. 針對 **Lambda 函數**，選取您建立 Lambda 授權方函數 AWS 區域 的 ，然後輸入函數名稱。

1. 將 **Lambda 調用角色**保留空白，以便讓 API Gateway REST API 主控台設定資源型政策。此政策會授與 API Gateway 許可，以調用 Lambda 授權方函數。您也可以選擇輸入 IAM 角色的名稱，以允許 API Gateway 調用 Lambda 授權方函數。如需範例角色，請參閱 [建立可擔任的 IAM 角色](integrating-api-with-aws-services-lambda.md#api-as-lambda-proxy-setup-iam-role-policies)。

1. 針對 **Lambda 事件承載**，選取**請求**。

1. 針對**身分來源類型**，選取參數類型。支援的參數類型為 `Header`、`Query string`、`Stage variable` 與 `Context`。若要新增更多身分來源，請選擇**新增參數**。

1. 若要快取授權方產生的授權政策，請將**授權快取**保持開啟狀態。啟用政策快取時，您可以修改 **TTL** 值。將 **TTL** 設定為零會停用政策快取。

   如果啟用快取，您的授權方必須傳回適用於 API 之所有方法的政策。若要強制執行方法特定的政策，請使用內容變數 `$context.path` 和 `$context.httpMethod`。

1. 選擇**建立授權方**。

------
#### [ TOKEN authorizer ]

**設定 `TOKEN` Lambda 授權方**

1. 在以下網址登入 API Gateway 主控台：[https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)。

1. 選取 API，然後選擇**授權方**。

1. 選擇**建立授權方**。

1. 針對**授權方名稱**，輸入授權方的名稱。

1. 針對**授權方類型**，選取 **Lambda**。

1. 針對 **Lambda 函數**，選取您建立 Lambda 授權方函數 AWS 區域 的 ，然後輸入函數名稱。

1. 將 **Lambda 調用角色**保留空白，以便讓 API Gateway REST API 主控台設定資源型政策。此政策會授與 API Gateway 許可，以調用 Lambda 授權方函數。您也可以選擇輸入 IAM 角色的名稱，以允許 API Gateway 調用 Lambda 授權方函數。如需範例角色，請參閱 [建立可擔任的 IAM 角色](integrating-api-with-aws-services-lambda.md#api-as-lambda-proxy-setup-iam-role-policies)。

1. 針對 **Lambda 事件承載**，選取**權杖**。

1. 針對**權杖來源**，輸入包含授權權杖的標頭名稱。呼叫者必須包含此名稱的標頭，才能將授權字符傳送到 Lambda 授權方。

1. 或者，針對**符記驗證**，輸入 RegEx 陳述式。API Gateway 會對此表達式執行輸入字符的初始驗證，並在成功驗證時調用授權方。

1. 若要快取授權方產生的授權政策，請將**授權快取**保持開啟狀態。啟用政策快取時，**權杖來源**中指定的標頭名稱會成為快取金鑰。啟用政策快取時，您可以修改 **TTL** 值。將 **TTL** 設定為零會停用政策快取。

   如果啟用快取，您的授權方必須傳回適用於 API 之所有方法的政策。若要強制執行方法特定政策，您可以關閉**授權快取**。

1. 選擇**建立授權方**。

------

建立 Lambda 授權方之後，您可以測試該授權方。下列程序顯示如何測試您的 Lambda 授權方。

------
#### [ REQUEST authorizer ]

**測試 `REQUEST` Lambda 授權方**

1. 在以下網址登入 API Gateway 主控台：[https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)。

1. 選取授權方的名稱。

1. 在**測試授權方**下，輸入身分來源的值。

   如果您使用的是 [`REQUEST` 授權方 Lambda 函數範例](apigateway-use-lambda-authorizer.md#api-gateway-lambda-authorizer-request-lambda-function-create)，請執行以下操作：

   1. 選取**標頭**並輸入 **headerValue1**，然後選擇**新增參數**。

   1. 在**身分來源類型**底下，選取**查詢字串**並輸入 **queryValue1**，然後選擇**新增參數**。

   1. 在**身分來源類型**底下，選取**階段變數**並輸入 **stageValue1**。

   您無法修改測試調用的內容變數，但您可以修改 Lambda 函數的 **API Gateway Authorizer** 測試事件範本。然後，您可以使用修訂內容變數來測試 Lambda 授權方函數。如需詳細資訊，請參閱《AWS Lambda 開發人員指南》**中的[在主控台測試 Lambda 函數](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html)。

1. 選擇**測試授權方**。

------
#### [ TOKEN authorizer ]

**測試 `TOKEN` Lambda 授權方**

1. 在以下網址登入 API Gateway 主控台：[https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)。

1. 選取授權方的名稱。

1. 在**測試授權方**下，輸入字符的值。

   如果您使用的是 [`TOKEN` 授權方 Lambda 函數範例](apigateway-use-lambda-authorizer.md#api-gateway-lambda-authorizer-token-lambda-function-create)，請執行以下操作：

   1. 對於 **authorizationToken** 值，輸入 **allow**。

1. 選擇**測試授權方**。

    如果您的 Lambda 授權方成功拒絕測試環境中的請求，測試會以 `200 OK` HTTP 回應來回應。然而，在測試環境之外，API Gateway 會傳回 `403 Forbidden` HTTP 回應，方法請求失敗。

------

## 設定 Lambda 授權方 (AWS CLI)
<a name="configure-api-gateway-lambda-authorization-cli"></a>

以下 [create-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-authorizer.html) 命令指示使用 AWS CLI建立 Lambda 授權方。

------
#### [ REQUEST authorizer ]

以下 [create-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-authorizer.html) 命令會建立 `REQUEST` 授權方，並使用 `Authorizer` 標頭和 `accountId` 內容變數作為身分來源：

```
aws apigateway create-authorizer \
    --rest-api-id 1234123412 \
    --name 'First_Request_Custom_Authorizer' \
    --type REQUEST \
    --authorizer-uri 'arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123412341234:function:customAuthFunction/invocations' \
    --identity-source 'method.request.header.Authorization,context.accountId' \
    --authorizer-result-ttl-in-seconds 300
```

------
#### [ TOKEN authorizer ]

以下 [create-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-authorizer.html) 命令會建立 `TOKEN` 授權方，並使用 `Authorization` 標頭作為身分來源：

```
aws apigateway create-authorizer \
    --rest-api-id 1234123412 \
    --name 'First_Token_Custom_Authorizer' \
    --type TOKEN \
    --authorizer-uri 'arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123412341234:function:customAuthFunction/invocations' \
    --identity-source 'method.request.header.Authorization' \
    --authorizer-result-ttl-in-seconds 300
```

------

建立 Lambda 授權方之後，您可以測試該授權方。以下 [test-invoke-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/test-invoke-authorizer.html) 命令會測試 Lambda 授權方：

```
aws apigateway test-invoke-authorizer --rest-api-id 1234123412 \
   --authorizer-id efg1234 \
   --headers Authorization='Value'
```

## 設定使用 Lambda 授權方 (主控台) 的方法
<a name="configure-api-gateway-lambda-authorization-method-console"></a>

設定 Lambda 授權方之後，您必須將其連接至 API 的方法。如果您的授權方使用授權快取，請務必更新政策以控制其他方法的存取。

**設定 API 方法使用 Lambda 授權方**

1. 在以下網址登入 API Gateway 主控台：[https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)。

1. 選取 API。

1. 選擇**資源**，然後選擇新方法，或選擇現有方法。

1. 在**方法請求**索引標籤的**方法請求設定**下，選擇**編輯**。

1. 針對**授權方**，從下拉式選單選取您剛才建立的 Lambda 授權方。

1.  (選用) 如果您要將授權權杖傳遞至後端，請選擇 **HTTP 請求標頭**。選擇**新增標頭**，然後新增授權標頭的名稱。在**名稱**中，輸入標頭名稱，此名稱須符合您在建立 API 的 Lambda 授權方時指定的**符記來源**名稱。此步驟不適用於 `REQUEST` 授權方。

1. 選擇**儲存**。

1. 選擇**部署 API** 將 API 部署到階段。針對使用階段變數的 `REQUEST` 授權方，您還必須定義必要的階段變數，並在**階段編輯器**頁面上指定這些變數的值。

## 設定使用 Lambda 授權方的方法 (AWS CLI)
<a name="configure-api-gateway-lambda-authorization-method-cli"></a>

設定 Lambda 授權方之後，您必須將其連接至 API 的方法。您可以建立新的方法，或使用修補程式操作，將授權方連接到現有方法。如果您的授權方使用授權快取，請務必更新政策以控制其他方法的存取。

以下 [put-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html) 命令會建立使用 Lambda 授權方的新方法：

```
aws apigateway put-method --rest-api-id 1234123412 \
  --resource-id a1b2c3 \
  --http-method PUT \
  --authorization-type CUSTOM \
  --authorizer-id efg1234
```

以下 [update-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-method.html) 命令會更新現有方法以使用 Lambda 授權方：

```
aws apigateway update-method \
    --rest-api-id 1234123412 \
    --resource-id a1b2c3 \
    --http-method PUT \
    --patch-operations op="replace",path="/authorizationType",value="CUSTOM" op="replace",path="/authorizerId",value="efg1234"
```