使用 Google Cloud 控制台保護服務的流量安全

本頁面說明如何在 API Gateway 上部署 API,以便保護傳送至後端服務的流量。

請按照步驟,透過 Google Cloud 控制台部署新的 API,以便存取 Cloud Run 函式上的後端服務。本快速入門指南也說明如何使用 API 金鑰,保護後端免於遭到未經授權的存取。

事前準備

  1. 前往 Google Cloud 控制台的「API Gateway」頁面。

    前往 API Gateway

  2. API Gateway 要求您啟用下列 Google 服務:

    名稱 標題
    apigateway.googleapis.com API Gateway API
    servicemanagement.googleapis.com Service Management API
    servicecontrol.googleapis.com Service Control API

    如果您先前未為所選專案啟用這些服務,系統會提示您進行這項操作。

  3. 確認您已為專案啟用計費功能。

    瞭解如何啟用計費功能

部署 API 後端

API Gateway 位於已部署的後端服務前端,可處理所有傳入的要求。在這個快速入門課程中,API Gateway 會將傳入的呼叫轉送至名為 helloGET 的 Cloud Run 函式後端,其中包含下列函式:

/**
 * HTTP Cloud Function.
 * This function is exported by index.js, and is executed when
 * you make an HTTP request to the deployed function's endpoint.
 *
 * @param {Object} req Cloud Function request context.
 *                     More info: https://expressjs.com/en/api.html#req
 * @param {Object} res Cloud Function response context.
 *                     More info: https://expressjs.com/en/api.html#res
 */

exports.helloGET = (req, res) => {
  res.send('Hello World!');
};

請按照「快速入門:使用 Google Cloud CLI」中的步驟,下載 Cloud Run 函式範例程式碼,並部署 Cloud Run 函式後端服務。

建立 API 定義

API Gateway 會使用 API 定義將呼叫轉送至後端服務。您可以使用含有專門註解的 OpenAPI 規格,定義所選 API Gateway 行為。本快速入門導覽課程的 OpenAPI 規格包含 Cloud Run 函式後端的路由指示:

# openapi2-functions.yaml
swagger: '2.0'
info:
  title: API_ID optional-string
  description: Sample API on API Gateway with a Google Cloud Functions backend
  version: 1.0.0
schemes:
  - https
produces:
  - application/json
paths:
  /hello:
    get:
      summary: Greet a user
      operationId: hello
      x-google-backend:
        address: https://us-central1-PROJECT_ID.cloudfunctions.net/helloGET
      responses:
        '200':
          description: A successful response
          schema:
            type: string

如要使用前述範例中的 OpenAPI 規格定義 API,請按照下列步驟操作:

  1. 在指令列中,建立名為 openapi2-functions.yaml 的新檔案。

  2. 複製上一個範例中顯示的 OpenAPI 規格內容,並貼到新建立的檔案中。

  3. 請按照下列方式編輯檔案:

    1. title 欄位中,將 API_ID 替換成 API 名稱 (會在下一個步驟中建立),並將 optional-string 替換成您選擇的簡短說明。這個欄位的值會用於鑄造可授予此 API 存取權的 API 金鑰。如要瞭解 API ID 命名規則,請參閱「API ID 規定」。
    2. address 欄位中,將 PROJECT_ID 替換為您的 Google Cloud 專案名稱。

建立閘道

您現在已準備好在 API Gateway 中建立及部署閘道。

  1. 在 Google Cloud 控制台中開啟 API Gateway 頁面。

    前往 API Gateway

  2. 按一下「建立 Gateway」

  3. 在「API」部分中:

    1. 您可以選擇建立新的 API,也可以從「選取 API」下拉式選單中選取現有的 API。進行本教學課程時,請選取「建立新的 API」
    2. 輸入 API 的顯示名稱
    3. 輸入 API 的 API ID
    4. (選用) 使用鍵/值格式為 API 新增標籤。如要新增多個標籤,請按一下「新增標籤」,然後輸入其他值。
  4. 在「API 設定」部分中:

    1. 您可以選擇建立新的 API 設定,也可以從「Select a Config」下拉式選單中選取現有的 API 設定。進行本教學課程時,請選取「Create a new API config」(建立新的 API 設定)
    2. 使用檔案瀏覽器上傳用於定義 API 的 openapi2-functions.yaml
    3. 輸入 API 設定的顯示名稱。
    4. 從下拉式清單中選取服務帳戶。您選取的服務帳戶會用作 API Gateway 的身分。

    5. (選用) 使用鍵/值格式,在 API 設定中新增標籤。如要新增多個標籤,請按一下「新增標籤」,然後輸入其他值。

  5. 在「Gateway details」(閘道詳細資料) 部分:

    1. 輸入閘道的顯示名稱。系統會自動產生閘道網址。
    2. 在下拉式選單中選取閘道的位置。
    3. (選用) 使用鍵/值格式為網關新增標籤。如要新增多個標籤,請按一下「新增標籤」,然後輸入其他值。
  6. 按一下「建立 Gateway」

這會在新建立的閘道上部署 API 設定。在閘道上部署 API 設定時,會定義 API 用戶端可用來存取 API 的外部網址。

這項作業可能需要幾分鐘才能完成。如要查看建立和部署程序的狀態,您可以按一下主導覽列中的「通知」圖示,顯示狀態通知,如下圖所示:

狀態通知的通知面板

完成後,您可以在「Gateways」(網關) 到達網頁上查看網關的詳細資料。

前往 API Gateway

請記下閘道網址。這會在下一個步驟中用於測試部署作業。

測試 API 部署作業

現在,您可以使用部署閘道時產生的網址,傳送要求至 API。

在瀏覽器中輸入下列網址,其中:

  • GATEWAY_URL 會指定已部署的閘道網址。
  • hello 是 API 設定中指定的路徑。
https://GATEWAY_URL/hello

例如:

https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev/hello

瀏覽器應會顯示 Hello World! 訊息。

您已成功建立及部署 API Gateway!

使用 API 金鑰確保存取安全

如要安全地存取 API 後端,您可以產生與專案相關聯的 API 金鑰,並授予該金鑰呼叫 API 的存取權。詳情請參閱「透過 API 金鑰限制 API 存取權」。

如果您尚未擁有與本快速入門課程中使用的 Google Cloud 專案相關聯的 API 金鑰,可以按照「建立 API 金鑰」中的步驟新增金鑰。

如要使用 API 金鑰確保閘道存取安全,請按照下列步驟操作:

  1. 為服務啟用 API 金鑰支援功能:
    1. 在 Google Cloud 控制台中,依序前往「API 和服務」>「Library」
    2. 在搜尋列中輸入剛才建立的 API 的 Managed Service 名稱。您可以在 API 的「Managed Service」專案欄中找到這個值,例如:
      my-api-123abc456def1.apigateway.my-project.cloud.goog
    3. 在服務的到達網頁中,按一下「啟用」
  2. 修改用來建立 API 設定的 OpenAPI 規格,加入對所有流量強制執行 API 金鑰驗證安全性政策的指令。新增 security 類型和 securityDefinitions,如下所示:
        # openapi2-functions.yaml
        swagger: '2.0'
        info:
          title: API_ID optional-string
          description: Sample API on API Gateway with a Google Cloud Functions backend
          version: 1.0.0
        schemes:
          - https
        produces:
          - application/json
        paths:
          /hello:
            get:
              summary: Greet a user
              operationId: hello
              x-google-backend:
                address:https://us-central1.PROJECT_ID.cloudfunctions.net/helloGET
              security:
              - api_key: []
              responses:
                '200':
                  description: A successful response
                  schema:
                    type: string
        securityDefinitions:
          # This section configures basic authentication with an API key.
          api_key:
            type: "apiKey"
            name: "key"
            in: "query"
        
    當要求存取規格中定義的所有路徑時,securityDefinition 會將您的 API 設定為要求以名為 key 的查詢參數形式傳遞 API 金鑰。
  3. 建立並部署新的 API 設定至現有閘道:
    1. 前往「Gateways」(網關) 到達網頁。

      前往 API Gateway

    2. 從清單中選取閘道,即可查看詳細資料。
    3. 按一下「編輯」,開啟閘道設定窗格。
    4. 在「API 設定」部分:
      1. 從下拉式選單中選取「Create a new API config」
      2. 使用檔案瀏覽器上傳已修改的 OpenAPI 規格。
      3. 輸入新 API 設定的顯示名稱。
      4. 從下拉式清單中選取服務帳戶。您選取的服務帳戶會做為 API Gateway 的身分。
      5. (選用) 使用鍵/值格式,在 API 設定中新增標籤。如要新增多個標籤,請按一下「新增標籤」,然後輸入其他值。
    5. 按一下 [Update]

測試 API 金鑰

建立並部署修改後的 API 之後,請嘗試提出要求。

在瀏覽器中輸入下列網址,其中:

  • GATEWAY_URL 會指定已部署的閘道網址。
  • hello 是 API 設定中指定的路徑。
https://GATEWAY_URL/hello

例如:

https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev/hello

這應該會產生下列錯誤:

UNAUTHENTICATED:Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.

接著,在瀏覽器中輸入下列網址,其中:

  • GATEWAY_URL 會指定已部署的閘道網址。
  • hello 是 API 設定中指定的路徑。
  • API_KEY 會指定您在「使用 API 金鑰確保存取安全」一文中建立的 API 金鑰。
https://GATEWAY_URL/hello?key=API_KEY

接著,瀏覽器中應該會顯示 Hello World!

恭喜!您已成功使用 API Gateway 保護 API 後端。現在您可以產生其他 API 金鑰,開始加入新的 API 用戶端。

追蹤 API 活動

  1. 在Google Cloud 主控台的「API Gateway」頁面中查看 API 活動圖表。按一下 API,即可在「總覽」頁面中查看活動圖表。要求可能需要一些時間才能反映在圖表中。

  2. 在「Logs Explorer」頁面中查看您的 API 要求記錄。您可以在Google Cloud 控制台的「API Gateway」頁面中找到「Logs Explorer」頁面的連結。

    前往 API Gateway

    進入 API Gateway 頁面後,請按照下列步驟操作:

    1. 選取要查看的 API。
    2. 按一下 [Details] (詳細資料) 分頁標籤。
    3. 按一下「Logs」下方的連結。

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取您在本快速入門中所用資源的費用,您可以:

或者,您也可以刪除本教學課程中使用的 Google Cloud 專案。

後續步驟