GSP872

總覽
API Gateway 透過明確定義的 REST API,讓您為服務提供安全的存取機制。無論服務實作機制為何,都能確保存取方式一致。一致的 API 可帶來下列好處:
- 方便應用程式開發人員使用您的服務
- 可讓您變更後端服務實作,而不影響公開 API
- 讓您充分運用 Google Cloud 內建的擴充、監控和安全性功能
在本實驗室中,您將在 API Gateway 上部署 API,確保後端服務的流量安全。
設定和需求
瞭解以下事項後,再點選「Start Lab」按鈕
請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」後就會開始計時,顯示可使用 Google Cloud 資源的時間。
您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。
為了順利完成這個實驗室,請先確認:
- 可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意事項:請使用無痕模式 (建議選項) 或私密瀏覽視窗執行此實驗室,這可以防止個人帳戶和學員帳戶之間的衝突,避免個人帳戶產生額外費用。
- 是時候完成實驗室活動了!別忘了,活動一旦開始將無法暫停。
注意事項:務必使用實驗室專用的學員帳戶。如果使用其他 Google Cloud 帳戶,可能會產生額外費用。
如何開始研究室及登入 Google Cloud 控制台
-
點選「Start Lab」按鈕。如果實驗室會產生費用,畫面上會出現選擇付款方式的對話方塊。左側的「Lab Details」窗格會顯示下列項目:
- 「Open Google Cloud console」按鈕
- 剩餘時間
- 必須在這個研究室中使用的臨時憑證
- 完成這個實驗室所需的其他資訊 (如有)
-
點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」。
接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。
提示:您可以在不同的視窗中並排開啟分頁。
注意:如果頁面中顯示「選擇帳戶」對話方塊,請點選「使用其他帳戶」。
-
如有必要,請將下方的 Username 貼到「登入」對話方塊。
{{{user_0.username | "Username"}}}
您也可以在「Lab Details」窗格找到 Username。
-
點選「下一步」。
-
複製下方的 Password,並貼到「歡迎使用」對話方塊。
{{{user_0.password | "Password"}}}
您也可以在「Lab Details」窗格找到 Password。
-
點選「下一步」。
重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。
注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
-
按過後續的所有頁面:
- 接受條款及細則。
- 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
- 請勿申請免費試用。
Google Cloud 控制台稍後會在這個分頁開啟。
注意:如要使用 Google Cloud 產品和服務,請點選「導覽選單」,或在「搜尋」欄位輸入服務或產品名稱。
啟動 Cloud Shell
Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。
-
點按 Google Cloud 控制台頂端的「啟用 Cloud Shell」圖示
。
-
系統顯示視窗時,請按照下列步驟操作:
- 繼續操作 Cloud Shell 視窗。
- 授權 Cloud Shell 使用您的憑證發出 Google Cloud API 呼叫。
連線建立完成即代表已通過驗證,而且專案已設為您的 Project_ID:。輸出內容中有一行文字,宣告本工作階段的 Project_ID:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud
是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵自動完成功能。
- (選用) 您可以執行下列指令來列出使用中的帳戶:
gcloud auth list
- 點按「授權」。
輸出內容:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (選用) 您可以使用下列指令來列出專案 ID:
gcloud config list project
輸出內容:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意:如需 gcloud
的完整說明,請前往 Google Cloud 參閱 gcloud CLI 總覽指南。
設定區域
設定這個實驗室的專案區域:
gcloud config set compute/region {{{project_0.default_region | "REGION"}}}
啟用必用的 API。
-
在 Cloud 控制台的「導覽選單」
中,依序點選「API 和服務」>「程式庫」。
-
在「搜尋」列中輸入「api gateway」,然後選取「API Gateway API」圖塊。
-
接著在下個畫面點選「啟用」按鈕。
工作 1:部署 API 後端
API Gateway 位於已部署的後端服務前方,負責處理所有傳入的要求。在本實驗室中,API Gateway 會將來電轉送至名為 helloGET 的 Cloud Functions 後端,其中包含的函式如下:
/**
* 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!');
};
- 在 Cloud 控制台中,複製 Cloud Functions 範例存放區:
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
- 變更為包含 Cloud Functions 程式碼範例的目錄:
cd nodejs-docs-samples/functions/helloworld/helloworldGet
- 如要使用 HTTP 觸發條件部署函式,請在包含函式的目錄中執行下列指令:
gcloud functions deploy helloGET --runtime nodejs20 --trigger-http --allow-unauthenticated --region {{{project_0.default_region | "REGION"}}}
注意:如果系統要求您授權 gcloud 指令使用憑證,請點選「Authorize」。部署 Cloud 函式需要幾分鐘的時間。請等待作業完成後再繼續操作。
警告:如果收到 IamPermissionDeniedException 錯誤,請重新執行上述指令。
點選「Check my progress」,確認目標已達成。
部署 API 後端
工作 2:測試 API 後端
- 當函式完成部署時,記下
httpsTrigger
的 url 屬性,或使用下列指令找到它:
gcloud functions describe helloGET --region {{{project_0.default_region | "REGION"}}}
輸出內容應類似下方的網址,其中 PROJECT_ID 是專案專屬的值。
- 將 PROJECT_ID 設為變數:
export PROJECT_ID={{{project_0.project_id}}}
- 前往該網址,叫用 Cloud 函式。您應該會看到「Hello World!」
訊息做為回應:
curl -v https://{{{project_0.default_region | "REGION"}}}-{{{project_0.project_id | "PROJECT_ID"}}}.cloudfunctions.net/helloGET
點選「Check my progress」,確認目標已達成。
測試 API 後端
建立 API 定義
API Gateway 會使用 API 定義,將呼叫轉送至後端服務。您可以使用包含特殊註解的 OpenAPI 規格,定義所需的 API Gateway 行為。本快速入門導覽課程的 OpenAPI 規格包含 Cloud Functions 後端的轉送指示。
- 從 Cloud Shell 返回主目錄:
cd ~
- 建立名為
openapi2-functions.yaml
的新檔案:
touch openapi2-functions.yaml
- 複製下列 OpenAPI 規格的內容,並將其貼到新建立的檔案中:
# openapi2-functions.yaml
swagger: '2.0'
info:
title: API_ID description
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://{{{project_0.default_region | "REGION"}}}-{{{project_0.project_id | "PROJECT_ID"}}}.cloudfunctions.net/helloGET
responses:
'200':
description: A successful response
schema:
type: string
- 請設定下列環境變數:
export API_ID="hello-world-$(cat /dev/urandom | tr -dc 'a-z' | fold -w ${1:-8} | head -n 1)"
- 執行下列指令,在 OpenAPI 規格檔案中替換上個步驟設定的變數:
sed -i "s/API_ID/${API_ID}/g" openapi2-functions.yaml
sed -i "s/PROJECT_ID/$PROJECT_ID/g" openapi2-functions.yaml
工作 3:建立閘道
現在您已準備好在 API Gateway 中建立及部署閘道。
-
在頂端的搜尋列輸入 API Gateway,然後從顯示的選項中選取。
-
點選「建立閘道」。接著在「API」部分:
- 確認「選取 API」輸入內容設為「建立新的 API」
- 在「顯示名稱」部分輸入
Hello World API
- 在「API ID」部分,請再次執行下列指令來取得 API ID,然後輸入至「API ID」欄位:
export API_ID="hello-world-$(cat /dev/urandom | tr -dc 'a-z' | fold -w ${1:-8} | head -n 1)"
echo $API_ID
- 在「API 設定」部分:
- 確認「選取設定」輸入內容設為「建立新的 API 設定」。
- 請按照下列步驟上傳先前建立的
openapi2-functions.yaml
檔案。
- 在 Cloud Shell 中執行下列指令:
cloudshell download $HOME/openapi2-functions.yaml
- 按一下「下載」。
注意: 檔案 openapi2-functions.yaml
已下載至本機。
- 選取「瀏覽」,然後從瀏覽器的下載位置選取檔案:
- 在「顯示名稱」欄位中輸入
Hello World Config
- 確認「選取服務帳戶」輸入內容設為「Compute Engine 預設服務帳戶」
- 在「閘道詳細資料」部分:
- 在「顯示名稱」欄位中輸入
Hello Gateway
- 將「位置」下拉式選單設為「」
- 點選「建立閘道」。
注意: 建立閘道作業需要幾分鐘 (約 10 分鐘) 才能完成。如要查看建立和部署程序的狀態,可以點按主導覽列中的「通知」圖示,顯示狀態通知,如下圖所示。請確認圖示狀態旁有綠色勾號,再繼續操作。
點選「Check my progress」,確認目標已達成。
建立閘道
測試 API 部署作業
現在,您可以使用部署閘道時產生的網址來傳送要求至 API。
- 在 Cloud Shell 中輸入下列指令,擷取 API Gateway 代管的新 API 的
GATEWAY_URL
:
export GATEWAY_URL=$(gcloud api-gateway gateways describe hello-gateway --location {{{project_0.default_region | "REGION"}}} --format json | jq -r .defaultHostname)
- 執行下列指令,確認已設定 GATEWAY_URL 環境變數:
echo $GATEWAY_URL
如果不是,代表您需要等候更久,API Gateway 才會完成部署。
- 執行下列 curl 指令,確認傳回的回應是
Hello World!
:
curl -s -w "\n" https://$GATEWAY_URL/hello
工作 4:使用 API 金鑰確保存取安全
如要安全地存取 API 後端,請產生與專案相關聯的 API 金鑰,並授予該金鑰呼叫 API 的存取權。如要建立 API 金鑰,請執行下列操作:
- 在 Cloud 控制台中,依序前往「API 和服務」>「憑證」。
- 選取「建立憑證」,然後從下拉式選單中選取「API 金鑰」。「已建立 API 金鑰」對話方塊中會顯示您新建立的金鑰。

點選「Check my progress」,確認目標已達成。
使用 API 金鑰確保存取安全
-
從對話方塊複製 API 金鑰,然後點選「關閉」。
-
在 Cloud Shell 執行下列指令,將 API 金鑰值儲存起來:
export API_KEY=REPLACE_WITH_COPIED_API_KEY
接著為服務啟用 API 金鑰支援功能。
- 在 Cloud Shell 中,使用下列指令取得剛建立的
Managed Service
名稱:
MANAGED_SERVICE=$(gcloud api-gateway apis list --format json | jq -r .[0].managedService | cut -d'/' -f6)
echo $MANAGED_SERVICE
- 接著使用剛建立的 API 的「代管服務」名稱
,執行下列指令,為服務啟用 API 金鑰支援功能:
gcloud services enable $MANAGED_SERVICE
修改 OpenAPI 規格,採用 API 金鑰安全性機制
在本節中,請修改已部署 API 的 API 設定,對所有流量強制執行 API 金鑰驗證安全性政策。
- 將
security
類型和 securityDefinitions
區段新增至名為 openapi2-functions2.yaml
的新檔案,如下所示:
touch openapi2-functions2.yaml
- 複製下列 OpenAPI 規格的內容,並將其貼到新建立的檔案中:
# openapi2-functions.yaml
swagger: '2.0'
info:
title: API_ID description
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://{{{project_0.default_region | "REGION"}}}-{{{project_0.project_id | "PROJECT_ID"}}}.cloudfunctions.net/helloGET
security:
- api_key: []
responses:
'200':
description: A successful response
schema:
type: string
securityDefinitions:
api_key:
type: "apiKey"
name: "key"
in: "query"
- 執行下列指令,在 OpenAPI 規格檔案中替換上個步驟設定的變數:
sed -i "s/API_ID/${API_ID}/g" openapi2-functions2.yaml
sed -i "s/PROJECT_ID/$PROJECT_ID/g" openapi2-functions2.yaml
- 下載更新後的 API 規格檔案,您將在下一個步驟中使用該檔案更新 Gateway 設定:
cloudshell download $HOME/openapi2-functions2.yaml
- 按一下「下載」。
工作 5:建立新的 API 設定並部署至現有閘道
- 在 Cloud 控制台中開啟 API Gateway 頁面 (依序點選「導覽選單」>「API Gateway」)。
- 從清單中選取 API,即可查看詳細資料。
- 選取「閘道」分頁標籤。
- 從可用的閘道清單中選取「Hello Gateway」
。
- 按一下「閘道」頁面頂端的「編輯」
。
- 在「API 設定」下方,將下拉式選單變更為「建立新的 API 設定」
。
- 在「上傳 API 規格」輸入方塊中,點選「瀏覽」並選取
openapi2-functions2.yaml
檔案。
- 在「顯示名稱」欄位輸入
Hello Config
。
- 在「選取服務帳戶」部分,選取「Qwiklabs 使用者服務帳戶」
。
- 按一下「更新」。
注意: 更新閘道作業可能需要幾分鐘才能完成。如要查看建立和部署程序的狀態,可以點按主導覽列中的「通知」圖示,顯示狀態通知,如下圖所示。請確認圖示狀態旁有綠色勾號,再繼續操作。
點選「Check my progress」,確認目標已達成。
建立新的 API 設定並部署至現有閘道
工作 6:使用 API 金鑰測試呼叫
- 如要使用 API 金鑰進行測試,請執行下列指令:
export GATEWAY_URL=$(gcloud api-gateway gateways describe hello-gateway --location {{{project_0.default_region | "REGION"}}} --format json | jq -r .defaultHostname)
curl -sL $GATEWAY_URL/hello
由於 curl
呼叫未提供 API 金鑰,因此您應該會看到類似下列錯誤的回應:
UNAUTHENTICATED:Method doesn't allow unregistered callers (callers without established identity)。請使用 API 金鑰或其他形式的 API 消費者身分來呼叫這個 API。
- 執行下列 curl 指令,並使用先前建立的 API 金鑰,透過
key
查詢參數呼叫 API:
curl -sL -w "\n" $GATEWAY_URL/hello?key=$API_KEY
如果沒有設定 API_KEY
環境變數,可以從左側選單依序前往「API 和服務」>「憑證」,取得 API 金鑰。金鑰會顯示在「API 金鑰」專區。
API 傳回的回應現在應為 Hello World!
。
注意:您可能需要多次執行這個指令,才能獲得預期的結果。
點選「Check my progress」,確認目標已達成。
使用 API 金鑰測試呼叫
恭喜!
您已成功使用 API Gateway 保護 API 後端。現在您可以產生其他 API 金鑰,開始加入新的 API 用戶端。
Google Cloud 教育訓練與認證
協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。
使用手冊上次更新日期:2024 年 10 月 9 日
實驗室上次測試日期:2024 年 10 月 9 日
Copyright 2025 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。