為 Cloud Run 設定 Identity-Aware Proxy

本頁面說明如何從 Cloud Run 啟用 Identity-Aware Proxy,並透過轉送至 IAP 進行驗證,確保 Cloud Run 服務的流量安全。啟用 Cloud Run 的 IAP 後,您就能透過單鍵操作,將流量從所有輸入路徑 (包括預設 run.app 網址和負載平衡器) 轉送。

已知限制

  • 專案必須位於機構中。
  • 身分必須來自同一個機構。
  • 您無法同時在負載平衡器和 Cloud Run 服務上設定 IAP。
  • 啟用 IAP 後,部分整合服務 (例如 Pub/Sub) 可能會停止運作。

事前準備

透過 Cloud Run 啟用 IAP

您可以透過 Cloud Run 啟用 IAP。

如果您在同一個 Cloud Run 服務上同時使用 IAP 和 IAM,請注意下列條件:

  • 會執行 IAP 和 IAM 檢查。

  • 系統會先執行 IAP 檢查,並根據 IAP 設定接受或封鎖要求。

  • 如果要求通過 IAP 檢查,IAP 就會使用自己的服務帳戶,向 Cloud Run 的 IAM 檢查進行驗證。

  • 由於 IAP 檢查會先執行,因此 Pub/Sub 等部分服務可能無法正確驗證。

使用 Google Cloud 控制台、Google Cloud CLI 或 Terraform,啟用 Cloud Run 的 IAP。

控制台

如要透過 Cloud Run 啟用 IAP,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Cloud Run」頁面:

    前往 Cloud Run

  2. 如果您要設定要部署至其中的新服務,請依序選取「Deploy container」>「Service」。如果您要設定及部署現有服務,請按一下該服務,然後點選「編輯並部署新修訂版本」

  3. 如果您要設定新的服務,請視需要填寫初始服務設定頁面,然後選取「透過 Identity-Aware Proxy (IAP) 執行進階驗證」

  4. 如果您要設定及部署現有服務,請按一下該服務,然後選取「透過 Identity-Aware Proxy (IAP) 執行進階驗證」

  5. 按一下「編輯政策」,建立情境感知存取權政策:

    • 新增一或多個主體,並視需要指定每個主體必須符合的存取層級,才能存取應用程式。

    • 按一下 [儲存]

  6. 按一下 [儲存]

gcloud

如要直接透過 Cloud Run 啟用 IAP,請在部署應用程式時新增 --iap 標記:

  1. 請使用下列任一指令部署 Cloud Run 服務:

    新服務:

    gcloud beta run deploy SERVICE_NAME \
    --region=REGION \
    --image=IMAGE_URL \
    --no-allow-unauthenticated \
    --iap

    現有服務:

    gcloud beta run services update SERVICE_NAME \
    --region=REGION \
    --iap

    取代:

    • SERVICE_NAME 替換為 Cloud Run 服務名稱。
    • REGION 與 Cloud Run 區域名稱。
    • IMAGE_URL 與容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用的是 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的形狀為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  2. 如要確認服務已啟用 IAP 並完成設定,請執行下列指令:

    gcloud beta run services describe SERVICE_NAME

    輸出內容應包含以下字串:

    Iap Enabled: true

您現在可以將所有傳送至已設定 Cloud Run 服務的流量,轉送至 IAP 進行驗證,然後再傳送至容器。

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

新增 IAM 政策,將 Cloud Run 叫用者 (roles/run.invoker) 授予 IAP 服務代理人。詳情請參閱「管理受 IAP 保護資源的存取權」。

  1. 在 Terraform 設定中,將下列內容新增至 google_cloud_run_v2_service_iam_policy 資源。

    data "google_cloud_run_v2_service_iam_policy" "policy" {
      project = google_cloud_run_v2_service.default.project
      location = google_cloud_run_v2_service.default.location
      name = google_cloud_run_v2_service.default.name
    }
    
  2. 將以下內容新增至 Terraform 設定中的 google_cloud_run_v2_service 資源。

    resource "google_cloud_run_v2_service" "default" {
      provider = google-beta
      name     = "cloudrun-iap-service"
      location = "us-central1"
      ingress      = "INGRESS_TRAFFIC_ALL"
      launch_stage = "BETA"
      iap_enabled  = true
    
      template {
        containers {
          image = "us-docker.pkg.dev/cloudrun/container/hello"
        }
      }
    }
    

在 Cloud Run 中停用 IAP

您可以使用 Google Cloud 控制台或 Google Cloud CLI 停用 IAP。

控制台

如要停用 Cloud Run 中的 IAP,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Cloud Run」頁面:

    前往 Cloud Run

  2. 按一下要修改的現有服務。

  3. 按一下「安全性」,然後取消勾選「透過 Identity-Aware Proxy (IAP) 執行進階驗證」

  4. 按一下 [儲存]

gcloud

如要直接透過 Cloud Run 停用 IAP,請在部署應用程式時新增 --no-iap 旗標:

  1. 請使用下列任一指令部署 Cloud Run 服務:

    新服務:

    gcloud beta run deploy SERVICE_NAME \
    --region=REGION \
    --image=IMAGE_URL \
    --no-iap

    現有服務:

    gcloud beta run services update SERVICE_NAME \
    --region=REGION \
    --no-iap

    取代:

    • SERVICE_NAME 替換為 Cloud Run 服務名稱。
    • REGION 與 Cloud Run 區域名稱。
    • IMAGE_URL 與容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用的是 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的形狀為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  2. 如要確認服務不再設定為啟用 IAP,請執行下列指令:

    gcloud beta run services describe SERVICE_NAME

    輸出內容應不再包含下列字串:

    Iap Enabled: true

您不再將所有傳送至已設定 Cloud Run 服務的流量,轉送至 IAP 進行驗證,再傳送至容器。

管理使用者或群組存取權

根據預設,Cloud Run 的 IAP 會使用 Google 帳戶中的機構內身分。您可以使用 Google Cloud 控制台或 Google Cloud CLI,新增或移除 Cloud Run 服務的存取權。

控制台

如要新增或移除存取權,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Cloud Run」頁面:

    前往 Cloud Run

  2. 按一下要修改的現有服務,然後點選「安全性」

  3. 在「IAP」下方,按一下「編輯政策」

  4. 如要新增存取權,請輸入主體,並視需要輸入要新增的存取層級。

  5. 如要移除現有主體的存取權,請按一下「存取層級」旁的「刪除政策」圖示。

  6. 按一下 [儲存]

gcloud

如要為機構內的個別使用者或群組新增或移除 Cloud Run 服務存取權,請執行下列任一指令:

  • 新增存取權的方式如下:

    gcloud beta iap web add-iam-policy-binding \
    --member=user:USER_EMAIL \
    --role=roles/iap.httpsResourceAccessor \
    --region=REGION \
    --resource-type=cloud-run \
    --service=SERVICE_NAME
  • 如何移除存取權:

    gcloud beta iap web remove-iam-policy-binding \
    --member=user:USER_EMAIL \
    --role=roles/iap.httpsResourceAccessor \
    --region=REGION \
    --resource-type=cloud-run \
    --service=SERVICE_NAME
  • 查看存取權:

    gcloud beta iap web get-iam-policy \
    --region=REGION \
    --resource-type=cloud-run \
    --service=SERVICE_NAME

取代:

  • USER_EMAIL 與使用者的電子郵件地址。
  • REGION 與 Cloud Run 區域名稱。
  • SERVICE_NAME 改為 Cloud Run 服務名稱。

疑難排解

服務代理失敗導致設定 IAM 錯誤

首次在新專案中啟用 IAP 可能會導致以下錯誤:

Setting IAM permissions failed

這是因為 Cloud Run 服務代理失敗。如要解決這個問題,請再次啟用 IAP,或手動設定 IAM 政策

後續步驟