設定 API Gateway Lambda 授權方 - Amazon API Gateway

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

設定 API Gateway Lambda 授權方

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

您可以使用 API Gateway 主控台中的內建工具或使用 Postman 來測試 Lambda 授權方。如需如何使用 Postman 測試 Lambda 授權方函數的指示,請參閱 API 使用 API Gateway Lambda 授權方呼叫

設定 Lambda 授權方 (主控台)

下列程序說明如何在API閘道RESTAPI主控台中建立 Lambda 授權方。若要進一步了解不同類型的 Lambda 授權方,請參閱 選擇 Lambda 授權方的類型

REQUEST authorizer
設定 REQUEST Lambda 授權方
  1. https://console.aws.amazon.com/apigateway 登入API閘道主控台。

  2. 選取 API,然後選擇授權方

  3. 選擇建立授權方

  4. 針對授權方名稱,輸入授權方的名稱。

  5. 針對授權方類型,選取 Lambda

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

  7. Lambda 調用角色保持空白,讓API閘道RESTAPI主控台設定資源型政策。政策會授予 API Gateway 調用 Lambda 授權方函數的許可。您也可以選擇輸入IAM角色的名稱,以允許 API Gateway 叫用 Lambda 授權方函數。如需範例角色,請參閱 建立可擔任的 IAM 角色

  8. 針對 Lambda 事件承載,選取請求

  9. 針對身分來源類型,選取參數類型。支援的參數類型為 HeaderQuery stringStage variableContext。若要新增更多身分來源,請選擇新增參數

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

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

  11. 選擇建立授權方

TOKEN authorizer
設定 TOKEN Lambda 授權方
  1. https://console.aws.amazon.com/apigateway 登入API閘道主控台。

  2. 選取 API,然後選擇授權方

  3. 選擇建立授權方

  4. 針對授權方名稱,輸入授權方的名稱。

  5. 針對授權方類型,選取 Lambda

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

  7. Lambda 調用角色保持空白,讓API閘道RESTAPI主控台設定資源型政策。政策會授予 API Gateway 調用 Lambda 授權方函數的許可。您也可以選擇輸入IAM角色的名稱,以允許 API Gateway 叫用 Lambda 授權方函數。如需範例角色,請參閱 建立可擔任的 IAM 角色

  8. 針對 Lambda 事件承載,選取權杖

  9. 針對權杖來源,輸入包含授權權杖的標頭名稱。呼叫者必須包含此名稱的標頭,才能將授權權杖傳送給 Lambda 授權方。

  10. (選用) 針對權杖驗證 ,輸入 RegEx 陳述式。API Gateway 會針對此表達式執行輸入權杖的初始驗證,並在驗證成功後叫用授權方。

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

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

  12. 選擇建立授權方

建立 Lambda 授權方之後,您可以進行測試。下列程序說明如何測試 Lambda 授權方。

REQUEST authorizer
測試 REQUEST Lambda 授權方
  1. https://console.aws.amazon.com/apigateway 登入API閘道主控台。

  2. 選取授權方的名稱。

  3. 測試授權方 下,輸入身分來源的值。

    如果您使用的是 REQUEST 授權方 Lambda 函數範例,請執行下列動作:

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

    2. 身分來源類型底下,選取查詢字串並輸入 queryValue1,然後選擇新增參數

    3. 身分來源類型底下,選取階段變數並輸入 stageValue1

    您無法修改測試調用的內容變數,但可以修改 Lambda 函數的 API Gateway Authorizer 測試事件範本。然後,您可以使用修改的內容變數來測試 Lambda 授權方函數。如需詳細資訊,請參閱 AWS Lambda 開發人員指南 中的在 主控台中測試 Lambda 函數

  4. 選擇測試授權方

TOKEN authorizer
測試 TOKEN Lambda 授權方
  1. https://console.aws.amazon.com/apigateway 登入API閘道主控台。

  2. 選取授權方的名稱。

  3. 測試授權方 下,輸入權杖的值。

    如果您使用的是 TOKEN 授權方 Lambda 函數範例,請執行下列動作:

    1. 對於 authorizationToken,輸入 allow

  4. 選擇測試授權方

    如果您的 Lambda 授權方成功拒絕測試環境中的請求,測試會以200 OKHTTP回應回應。但是,在測試環境之外,APIGateway 會傳回403 ForbiddenHTTP回應,且方法請求失敗。

設定 Lambda 授權方 (AWS CLI)

下列 create-authorizer 命令會顯示 ,以使用 建立 Lambda 授權方 AWS CLI。

REQUEST authorizer

下列範例會建立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

下列範例會建立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命令顯示如何測試 Lambda 授權方:

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

設定方法以使用 Lambda 授權方 (主控台)

設定 Lambda 授權方之後,您必須將其連接至 的方法API。

設定使用 Lambda 授權方API的方法
  1. https://console.aws.amazon.com/apigateway 登入API閘道主控台。

  2. 選取 API。

  3. 選擇 資源 ,然後選擇新方法或選擇現有方法。

  4. 方法請求索引標籤的方法請求設定下,選擇編輯

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

  6. (選用) 如果您要將授權權杖傳遞至後端,請選擇HTTP請求標頭 。選擇新增標頭,然後新增授權標頭的名稱。對於名稱 ,輸入與您為 建立 Lambda 授權方時指定的權杖來源名稱相符的標頭名稱API。此步驟不適用於 REQUEST 授權方。

  7. 選擇 Save (儲存)。

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

設定方法以使用 Lambda 授權方 (AWS CLI)

設定 Lambda 授權方之後,您必須將其連接至 的方法API。您可以建立新的方法,或使用修補操作將授權方連接至現有方法。

下列 put-method 命令說明如何建立使用 Lambda 授權方的新方法:

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

下列 update-method 命令顯示如何更新現有方法以使用 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"