本頁說明如何從 Cloud Run 啟用 IAP,並將流量轉送至 IAP 進行驗證,確保流量安全無虞。從 Cloud Run 啟用 IAP 後,您就能透過預設 run.app
網址和負載平衡器等所有輸入路徑,一鍵轉送流量。
已知限制
- 專案必須位於機構內。
- 身分必須來自同一個機構。
- 您無法同時在負載平衡器和 Cloud Run 服務上設定 IAP。
- 啟用 IAP 後,部分整合服務 (例如 Pub/Sub) 可能會停止運作。
事前準備
啟用 IAP API。
必要的角色
如要取得啟用 IAP 的必要權限,請管理員授予您下列 IAM 角色:
-
專案的 Cloud Run 管理員 (
roles/run.admin
) -
授予 IAP 啟用服務的存取權:
專案的 IAP 政策管理員 (
roles/iap.admin
) -
建立啟用 IAP 的服務,或更新現有服務以啟用 IAP:
-
Artifact Registry 讀取者 (
roles/artifactregistry.reader
) 已部署的容器映像檔 -
服務帳戶使用者 (
roles/iam.serviceAccountUser
) 服務身分
-
Artifact Registry 讀取者 (
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
透過 Cloud Run 啟用 IAP
建議您直接透過 Cloud Run 啟用 IAP。
如果您在同一個 Cloud Run 服務上同時使用 IAP 和 Identity and Access Management (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 時,IAP 需要權限才能叫用 Cloud Run 服務。如果您使用 Google Cloud 控制台啟用 IAP,系統會將 Cloud Run 叫用者角色 (roles/run.invoker
) 指派給 IAP 服務代理,自動授予這項權限。
如要透過 Cloud Run 啟用 IAP,請按照下列步驟操作:
前往 Google Cloud 控制台的 Cloud Run 頁面:
如要設定及部署新服務,請依序選取「Deploy container」(部署容器)和「Service」(服務)。如要設定及部署現有服務,請按一下該服務,然後點選「Edit and deploy new revision」(編輯及部署新修訂版本)。
如要設定新服務,請視需要填寫初始服務設定頁面,然後選取「需要驗證」。選取「Identity-Aware Proxy (IAP)」。
如要設定及部署現有服務,請按一下該服務,然後選取「Require authentication」(需要驗證)。選取「Identity-Aware Proxy (IAP)」。
按一下「編輯政策」,建立情境感知存取權政策:
新增一或多個主體,並視需要新增每個主體必須符合的存取層級,達到該存取層級才能存取應用程式。
按一下 [儲存]。
按一下 [儲存]。
gcloud
如要直接從 Cloud Run 啟用 IAP,請在部署應用程式時新增 --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 區域的名稱。
例如:
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
。 - PROJECT_NUMBER:您的 Google Cloud 專案編號。
將叫用者權限授予 IAP 服務代理:
gcloud run services add-iam-policy-binding SERVICE_NAME \ --region=REGION \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-iap.iam.gserviceaccount.com \ --role=roles/run.invoker
更改下列內容:
- SERVICE_NAME:Cloud Run 服務名稱。
- REGION:Cloud Run 區域的名稱。
例如:
europe-west1
。 - PROJECT_NUMBER:您的 Google Cloud 專案編號。
如要確認服務已啟用 IAP,請執行下列指令:
gcloud beta run services describe SERVICE_NAME
輸出內容應包含下列字串:
Iap Enabled: true
現在,所有傳送至已設定 Cloud Run 服務的流量,都會先轉送至 IAP 進行驗證,然後再傳送至容器。
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
如要使用 Terraform 啟用 IAP,您必須更新服務定義,並新增 IAM 政策繫結,將叫用者權限授予 IAP。
在 Terraform 設定中,將
iap_enabled = true
新增至google_cloud_run_v2_service
資源,即可在服務上啟用 IAP: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" } } }
新增下列項目,將
roles/run.invoker
角色授予 IAP 服務代理。resource "google_cloud_run_v2_service_iam_member" "iap_invoker" { provider = google-beta project = google_cloud_run_v2_service.default.project location = google_cloud_run_v2_service.default.location name = google_cloud_run_v2_service.default.name role = "roles/run.invoker" member = "serviceAccount:service-"PROJECT_NUMBER@gcp-sa-iap.iam.gserviceaccount.com" }
將 PROJECT_NUMBER 替換為專案編號。
(選用步驟) 如要擷取目前的 IAM 政策資料,請在 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 }
停用 Cloud Run 的 IAP
您可以使用 Google Cloud 控制台或 gcloud CLI 停用 IAP。
控制台
如要透過 Cloud Run 停用 IAP,請按照下列步驟操作:
前往 Google Cloud 控制台的 Cloud Run 頁面:
按一下要修改的現有服務。
按一下「安全性」,然後選取「允許公開存取」。
按一下 [儲存]。
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 控制台或 gcloud 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。