為 Cloud Run 設定 Identity-Aware Proxy

本頁說明如何從 Cloud Run 啟用 Identity-Aware Proxy,並將流量轉送至 IAP 進行驗證,確保流量安全無虞。從 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 等部分服務可能無法向 IAP 驗證。

使用 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 區域名稱。 例如:europe-west1
    • 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 = "europe-west1"
      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 政策

後續步驟