如何搭配使用 1 鍵 Identity-Aware Proxy (IAP) 與 Cloud Run

1. 簡介

總覽

這個程式碼研究室會逐步說明如何從 Cloud Run 啟用 Identity-Aware Proxy,並將流量轉送至 IAP 進行驗證,確保流量安全無虞。從 Cloud Run 啟用 IAP 後,您就能透過所有輸入路徑 (包括預設的 run.app 網址和負載平衡器),以單一點擊動作轉送流量。

在本程式碼研究室中,您將部署 hello 容器服務。只有透過 IAP 加入許可清單的使用者才能存取服務。

如要瞭解其他已知限制,請參閱 Cloud Run 上的 IAP 說明文件

課程內容

  • 如何為 Cloud Run 啟用一鍵 IAP
  • 如何透過 IAP 授予使用者身分存取 Cloud Run 服務的權限

2. 事前準備

啟用 API

開始使用本程式碼研究室前,請先執行下列指令,啟用下列 API:

gcloud services enable \
    artifactregistry.googleapis.com \
    cloudbuild.googleapis.com \
    iap.googleapis.com \
    run.googleapis.com \
    cloudresourcemanager.googleapis.com

3. 建立環境變數

設定本程式碼研究室全程會用到的環境變數

export PROJECT_ID=<YOUR_PROJECT_ID>
export REGION=<YOUR_REGION>

export SERVICE_NAME=iap-example
export SERVICE_ACCOUNT_NAME=iap-example-sa
export PROJECT_NUMBER=$(gcloud projects describe "${PROJECT_ID}" --format="value(projectNumber)")

4. 部署已啟用 IAP 的服務

執行下列指令,建立服務帳戶 (做為 Cloud Run 服務身分):

gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \
  --display-name="IAP codelab CR identity"

部署已啟用 IAP 的 hello 容器映像檔。

gcloud beta run deploy ${SERVICE_NAME} \
    --image=us-docker.pkg.dev/cloudrun/container/hello \
    --region=${REGION} \
    --service-account $SERVICE_ACCOUNT_NAME@${PROJECT_ID}.iam.gserviceaccount.com \
    --no-allow-unauthenticated \
    --iap

注意:如果現在嘗試存取應用程式,會看到 You don't have access 錯誤頁面。在下一個步驟中,您將透過 IAP 授予使用者存取權。

5. 設定 IAP 存取權控管機制

建立 IAP 服務代理

gcloud beta services identity create --service=iap.googleapis.com --project=${PROJECT_ID}

將 Cloud Run 叫用者角色指派給 IAP 服務帳戶

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
  --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-iap.iam.gserviceaccount.com" \
  --role="roles/run.invoker"

透過 IAP 允許特定使用者或群組存取,授予使用者存取權

EMAIL_ADDRESS=<YOUR_EMAIL>

gcloud beta iap web add-iam-policy-binding \
    --resource-type=cloud-run \
    --service=${SERVICE_NAME} \
    --region=${REGION} \
    --member=user:${EMAIL_ADDRESS} \
    --role=roles/iap.httpsResourceAccessor \
    --condition=None

注意:如要使用群組,也可以在成員參數中輸入 group:your-group@example.com。

6. 測試應用程式

確認應用程式存取權

取得範例 Cloud Run 服務的網址。

gcloud run services describe ${SERVICE_NAME} --region ${REGION} --format 'value(status.url)'

在瀏覽器中開啟該網址,您應該會看到「It's Running! 恭喜!您已成功將容器映像檔部署至 Cloud Run

確認要移除應用程式的存取權

您可以執行下列指令,移除應用程式的存取權。

gcloud beta iap web remove-iam-policy-binding \
    --resource-type=cloud-run \
    --service=${SERVICE_NAME} \
    --region=${REGION} \
    --member=user:${EMAIL_ADDRESS} \
    --role=roles/iap.httpsResourceAccessor

請稍候幾分鐘,讓 IAM 政策生效。現在嘗試在瀏覽器中開啟網址,您會看到 You don't have access 錯誤頁面。

7. 恭喜!

恭喜您完成本程式碼研究室!

建議您參閱 Cloud Run IAP 說明文件。

涵蓋內容

  • 如何為 Cloud Run 啟用一鍵 IAP
  • 如何透過 IAP 授予使用者身分存取 Cloud Run 服務的權限

8. 清理

為避免產生非預期費用 (例如 Cloud Run 服務的叫用次數不慎超過免費層級的每月 Cloud Run 叫用次數配額),您可以刪除在步驟 6 中建立的 Cloud Run 服務 iap-example

如要刪除 Cloud Run 服務,請前往 Cloud Run Cloud 控制台 (https://console.cloud.google.com/run),然後刪除 iap-example 服務。

如要刪除整個專案,請前往「管理資源」,選取專案,然後選擇「刪除」。刪除專案後,您必須在 Cloud SDK 中變更專案。如要查看所有可用專案的清單,請執行 gcloud projects list