本頁面說明如何從 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,請按照下列步驟操作:
前往 Google Cloud 控制台的「Cloud Run」頁面:
如果您要設定要部署至其中的新服務,請依序選取「Deploy container」>「Service」。如果您要設定及部署現有服務,請按一下該服務,然後點選「編輯並部署新修訂版本」。
如果您要設定新的服務,請視需要填寫初始服務設定頁面,然後選取「透過 Identity-Aware Proxy (IAP) 執行進階驗證」。
如果您要設定及部署現有服務,請按一下該服務,然後選取「透過 Identity-Aware Proxy (IAP) 執行進階驗證」。
按一下「編輯政策」,建立情境感知存取權政策:
新增一或多個主體,並視需要指定每個主體必須符合的存取層級,才能存取應用程式。
按一下 [儲存]。
按一下 [儲存]。
gcloud
如要直接透過 Cloud Run 啟用 IAP,請在部署應用程式時新增 --iap
標記:
請使用下列任一指令部署 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
如要確認服務已啟用 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 保護資源的存取權」。
在 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 }
將以下內容新增至 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,請按照下列步驟操作:
前往 Google Cloud 控制台的「Cloud Run」頁面:
按一下要修改的現有服務。
按一下「安全性」,然後取消勾選「透過 Identity-Aware Proxy (IAP) 執行進階驗證」。
按一下 [儲存]。
gcloud
如要直接透過 Cloud Run 停用 IAP,請在部署應用程式時新增 --no-iap
旗標:
請使用下列任一指令部署 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
如要確認服務不再設定為啟用 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 服務的存取權。
控制台
如要新增或移除存取權,請按照下列步驟操作:
前往 Google Cloud 控制台的「Cloud Run」頁面:
按一下要修改的現有服務,然後點選「安全性」。
在「IAP」下方,按一下「編輯政策」。
如要新增存取權,請輸入主體,並視需要輸入要新增的存取層級。
如要移除現有主體的存取權,請按一下「存取層級」旁的「刪除政策」圖示。
按一下 [儲存]。
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 政策。
後續步驟
- 如需透過後端服務或負載平衡器啟用 IAP 的操作說明,請參閱「為 Cloud Run 啟用 IAP」一文。
- 如果您在為 Cloud Run 啟用 IAP 時遇到問題,請參閱錯誤疑難排解。
- 啟用外部身分。
- 啟用 OAuth 設定。
- 管理受 IAP 保護資源的存取權。
- 使用機構政策控管 IAP 啟用功能。