本文說明何時以及如何自訂 Identity-Aware Proxy (IAP) 的 OAuth 設定。
IAP 會使用 Google 代管的 OAuth 用戶端驗證使用者。
Google 代管的 OAuth 用戶端會限制使用者存取權,當使用者透過瀏覽器存取啟用 IAP 的應用程式時,只能由同一機構的使用者存取。
使用自訂 OAuth 設定的時機
您必須使用自訂 OAuth 設定才能執行下列操作:
- 允許機構外的使用者存取支援應用程式內購功能的應用程式。
- 在驗證期間顯示自己的品牌資訊。
- 如何啟用應用程式的程式輔助存取權。
自訂 OAuth 設定時,您必須設定 OAuth 同意畫面。這項功能需要應用程式的品牌資訊通過 Google 驗證程序。如要進一步瞭解驗證程序,請參閱「設定 OAuth 同意畫面」。
您必須負責建立及管理自訂 OAuth 用戶端的憑證。包括安全儲存用戶端金鑰,並在必要時與授權使用者共用。
Google 管理的 OAuth 用戶端和自訂 OAuth 用戶端比較
Google 代管的 OAuth 用戶端無法透過程式碼存取受 IAP 保護的應用程式。不過,如果應用程式使用 Google 管理的 OAuth 用戶端,且受到 IAP 保護,您還是可以透過程式碼存取這些應用程式,方法是使用透過 programmatic_clients
設定或服務帳戶 JWT 設定的個別 OAuth 用戶端。
下表比較 Google 管理的 OAuth 用戶端和自訂 OAuth 用戶端。
Google 管理的 OAuth 用戶端 | 自訂 OAuth 用戶端 | |
---|---|---|
使用者 | 僅供內部使用 | 內部和外部 |
品牌 | Google Cloud 品牌 | 客戶自有品牌 |
OAuth 設定 | Google 已設定 | 由客戶設定 |
OAuth 憑證 | Google 代管 | 由客戶管理 |
應用程式存取權 | 僅限瀏覽器流程 | 瀏覽器流程和程式輔助存取 |
使用自訂 OAuth 用戶端設定啟用 IAP
以下各節說明如何針對不同資源使用自訂 OAuth 用戶端設定啟用 IAP。
App Engine
控制台
如果您尚未設定專案的 OAuth 同意畫面,系統會提示您進行設定。如要設定 OAuth 同意畫面,請參閱「設定 OAuth 同意畫面」。
設定 IAP 存取權
-
前往「Identity-Aware Proxy」頁面。
前往「Identity-Aware Proxy」頁面 - 選取要使用 IAP 保護的專案。
- 找出您要授予存取權的資源,然後勾選旁邊的核取方塊。
- 在右側面板中,按一下「Add principal」(新增管理員)。
-
在隨即顯示的「Add principals」(新增主體) 對話方塊中,輸入群組或個別使用者的電子郵件地址,這些群組或個別使用者應擁有專案的「IAP-Secured Web App User」(受 IAP 保護的網路應用程式使用者) 角色。
以下類型的主體可以擁有這個角色:
- Google 帳戶:user@gmail.com
- Google 群組:admins@googlegroups.com
- 服務帳戶:server@example。gserviceaccount.com
- Google Workspace 網域:example.com
請務必新增您可以存取的 Google 帳戶。
- 從「Roles」(角色) 下拉式清單中選取「Cloud IAP」>「IAP-secured Web App User」(受 IAP 保護的網路應用程式使用者)。
- 按一下「Save」(儲存)。
正在啟用 IAP
-
在「Identity-Aware Proxy」頁面的「APPLICATIONS」下方,尋找您要限制存取權的應用程式。如要為資源啟用 IAP,請在「IAP」欄中
- 在隨即顯示的「Turn on IAP」(開啟 IAP) 視窗中,按一下「Turn On」(開啟),確認您要使用 IAP 保護資源。啟用 IAP 後,系統會要求您提供負載平衡器所有連線的登入憑證。只有在專案中擁有「IAP-Secured Web App User」角色的帳戶才能取得存取權。
gcloud
您需要最新版的 gcloud CLI,才能設定專案和 IAP。如需安裝 gcloud CLI 的操作說明,請參閱「安裝 gcloud CLI」。
-
如要驗證,請使用 Google Cloud CLI 執行下列指令。
gcloud auth login
- 如要登入,請前往顯示的網址。
- 登入之後,複製顯示的驗證碼並貼到指令列中。
-
執行下列指令,指定包含您要使用 IAP 保護的資源的專案。
gcloud config set project PROJECT_ID
- 請按照「為 IAP 建立 OAuth 用戶端」一文中的指示設定 OAuth 同意畫面,並建立 OAuth 用戶端。
- 儲存 OAuth 用戶端 ID 和密碼。
-
如要啟用 IAP,請執行下列指令。
gcloud iap web enable \ --oauth2-client-id=CLIENT_ID \ --oauth2-client-secret=CLIENT_SECRET \ --resource-type=app-engine
啟用 IAP 後,您可以使用 gcloud CLI 以 IAM 角色 roles/iap.httpsResourceAccessor
修改 IAP 存取權政策。進一步瞭解如何管理角色和權限。
API
請按照「為 IAP 建立 OAuth 用戶端」一文中的指示設定 OAuth 同意畫面,並建立 OAuth 用戶端。
儲存 OAuth 用戶端 ID 和密碼。
執行下列指令來準備
settings.json
檔案。cat << EOF > settings.json { "iap": { "enabled": true, "oauth2ClientId": "CLIENT_ID", "oauth2ClientSecret":" CLIENT_SECRET" } } EOF
執行下列指令,啟用 IAP。
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d @settings.json \ "https://appengine.googleapis.com/v1/apps/PROJECT_ID?updateMask=iap"
啟用 IAP 後,您可以使用 Google Cloud CLI 以 IAM 角色 roles/iap.httpsResourceAccessor
修改 IAP 存取權政策。進一步瞭解如何管理角色和權限。
Compute Engine
控制台
如果您尚未設定專案的 OAuth 同意畫面,系統會提示您進行設定。如要設定 OAuth 同意畫面,請參閱「設定 OAuth 同意畫面」。
如果您執行的是 GKE 叢集 1.24 以上版本,可以使用 Kubernetes Gateway API 設定 IAP 和 GKE。如要這樣做,請完成下列步驟,然後按照「設定應用程式內購功能」中的操作說明進行。請勿設定 BackendConfig
。
設定 IAP 存取權
-
前往「Identity-Aware Proxy」頁面。
前往「Identity-Aware Proxy」頁面 - 選取要使用 IAP 保護的專案。
-
找出您要授予存取權的資源,然後勾選旁邊的核取方塊。
如果您沒有看到任何資源,請確認資源已建立,且 BackendConfig Compute Engine ingress 控制器已同步。
如要確認後端服務可用,請執行下列 gcloud 指令:
gcloud compute backend-services list
- 在右側面板中,按一下「Add principal」。
-
在隨即顯示的「Add principals」(新增主體) 對話方塊中,輸入群組或個別使用者的電子郵件地址,這些群組或個別使用者應擁有專案的「IAP-Secured Web App User」(受 IAP 保護的網路應用程式使用者) 角色。
以下類型的主體可以擁有這個角色:
- Google 帳戶:user@gmail.com
- Google 群組:admins@googlegroups.com
- 服務帳戶:server@example。gserviceaccount.com
- Google Workspace 網域:example.com
請務必新增您可以存取的 Google 帳戶。
- 從「Roles」(角色) 下拉式清單中選取「Cloud IAP」>「IAP-secured Web App User」(受 IAP 保護的網路應用程式使用者)。
- 按一下「Save」(儲存)。
正在啟用 IAP
-
在「Identity-Aware Proxy」頁面的「APPLICATIONS」下方,找出您要限制存取權的 instance group 所服務的負載平衡器。如要為資源啟用 IAP,請在「IAP」欄中
如要啟用 IAP:- 負載平衡器前端設定中至少一個通訊協定必須為 HTTPS。瞭解如何設定負載平衡器。
-
您需要具備
compute.backendServices.update
、clientauthconfig.clients.create
和clientauthconfig.clients.getWithSecret
權限。這些權限係由諸如專案編輯者角色等角色來授予。詳情請參閱「管理受 IAP 保護資源的存取權」。
- 在隨即顯示的「Turn on IAP」(開啟 IAP) 視窗中,按一下「Turn On」(開啟),確認您要使用 IAP 保護資源。啟用 IAP 後,系統會要求您提供負載平衡器所有連線的登入憑證。只有在專案中擁有「IAP-Secured Web App User」角色的帳戶才能取得存取權。
gcloud
您需要最新版的 gcloud CLI,才能設定專案和 IAP。如需安裝 gcloud CLI 的操作說明,請參閱「安裝 gcloud CLI」。
-
如要驗證,請使用 Google Cloud CLI 執行下列指令。
gcloud auth login
- 如要登入,請前往顯示的網址。
- 登入之後,複製顯示的驗證碼並貼到指令列中。
-
執行下列指令,指定包含您要使用 IAP 保護的資源的專案。
gcloud config set project PROJECT_ID
- 請按照「為 IAP 建立 OAuth 用戶端」一文中的指示設定 OAuth 同意畫面,並建立 OAuth 用戶端。
- 儲存 OAuth 用戶端 ID 和密碼。
-
如要啟用 IAP,請執行全域或區域範圍的指令。
全域範圍 區域範圍gcloud compute backend-services update BACKEND_SERVICE_NAME \ --global \ --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
gcloud compute backend-services update BACKEND_SERVICE_NAME \ --region REGION_NAME \ --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
啟用 IAP 後,您可以使用 gcloud CLI 以 IAM 角色 roles/iap.httpsResourceAccessor
修改 IAP 存取權政策。進一步瞭解如何管理角色和權限。
API
請按照「為 IAP 建立 OAuth 用戶端」一文中的指示設定 OAuth 同意畫面,並建立 OAuth 用戶端。
儲存 OAuth 用戶端 ID 和密碼。
執行下列指令來準備
settings.json
檔案。cat << EOF > settings.json { "iap": { "enabled": true, "oauth2ClientId": "CLIENT_ID", "oauth2ClientSecret": "CLIENT_SECRET" } } EOF
執行下列指令,啟用 IAP。
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d @settings.json \ "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/REGION/backendServices/BACKEND_SERVICE_NAME"
啟用 IAP 後,您可以使用 gcloud CLI 以 IAM 角色 roles/iap.httpsResourceAccessor
修改 IAP 存取權政策。進一步瞭解如何管理角色和權限。
Cloud Run
控制台
如果您尚未設定專案的 OAuth 同意畫面,系統會提示您進行設定。如要設定 OAuth 同意畫面,請參閱「設定 OAuth 同意畫面」一文。
設定 IAP 存取權
- 開啟「Identity-Aware Proxy」頁面。
前往 Identity-Aware Proxy - 選取要使用 IAP 保護的專案。
- 在「應用程式」下方,選取要新增成員的負載平衡器後端服務旁的核取方塊。
- 在右側面板中,按一下「Add member」(新增成員)。
在「Add members」(新增成員) 對話方塊中,輸入群組或個別使用者的帳戶,這些群組或個別使用者應擁有專案的「IAP-secured Web App User」(受 IAP 保護的網路應用程式使用者) 角色。成員可為以下類型的帳戶:
- Google 帳戶:user@gmail.com - 這也可以是 Google Workspace 帳戶,例如 user@google.com 或其他 Google Workspace 網域。
- Google 群組:admins@googlegroups.com
- 服務帳戶:server@example.gserviceaccount.com
- Google Workspace 網域:example.com
從「Roles」清單中選取「Cloud IAP」>「IAP-secured Web App User」。
按一下 [儲存]。
正在啟用 IAP
- 在 IAP 頁面的「Applications」下方,找出您要限制存取權的負載平衡器後端服務。按一下「IAP」切換按鈕,為資源啟用 IAP。
- 在隨即顯示的「Turn on IAP」(開啟 IAP) 視窗中,按一下「Turn On」(開啟),確認您要使用 IAP 保護資源。啟用 IAP 後,系統會要求您提供負載平衡器所有連線的登入憑證。只有在專案中擁有「IAP-Secured Web App User」角色的帳戶才能取得存取權。
如要授權 IAP 將流量傳送至後端 Cloud Run 服務,請按照「將主體新增至服務」中的指示,新增下列主體和角色。
- Principal:
service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
- 角色:Cloud Run 叫用者
- Principal:
gcloud
- 請按照「為 IAP 建立 OAuth 用戶端」一文中的指示設定 OAuth 同意畫面,並建立 OAuth 用戶端。
- 儲存 OAuth 用戶端 ID 和密碼。
- 如果您尚未建立服務帳戶,請執行下列指令。如果您先前已建立服務帳戶,執行這項指令不會建立重複的服務帳戶。
gcloud beta services identity create \ --service=iap.googleapis.com --project=PROJECT_ID
- 執行下列指令,為先前步驟建立的服務帳戶授予叫用者權限。
gcloud run services add-iam-policy-binding SERVICE-NAME \ --member='serviceAccount:service-PROJECT-NUMBER@gcp-sa-iap.iam.gserviceaccount.com' \ --role='roles/run.invoker'
視負載平衡器後端服務是全球性或地區性而定,執行全域或區域範圍的指令來啟用 IAP。使用上一個步驟中的 OAuth 用戶端 ID 和密鑰。
全域範圍
gcloud compute backend-services update BACKEND_SERVICE_NAME \ --global \ --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
區域範圍
取代下列內容:gcloud compute backend-services update BACKEND_SERVICE_NAME \ --region REGION_NAME \ --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
- BACKEND_SERVICE_NAME:後端服務名稱。
- CLIENT_ID:上一個步驟中的 OAuth 用戶端 ID。
- CLIENT_SECRET:上一個步驟的 OAuth 用戶端密鑰。
- REGION_NAME:您要啟用 IAP 的地區。
啟用 IAP 後,您可以使用 Google Cloud CLI,以身分與存取權管理角色 roles/iap.httpsResourceAccessor
修改 IAP 存取權政策。詳情請參閱「管理角色和權限」。
Google Kubernetes Engine
控制台
如果您尚未設定專案的 OAuth 同意畫面,系統會提示您進行設定。如要設定 OAuth 同意畫面,請參閱「設定 OAuth 同意畫面」。
如果您執行的是 GKE 叢集 1.24 以上版本,可以使用 Kubernetes Gateway API 設定 IAP 和 GKE。如要這樣做,請完成下列步驟,然後按照「設定應用程式內購功能」中的操作說明進行。請勿設定 BackendConfig
。
設定 IAP 存取權
-
前往「Identity-Aware Proxy」頁面。
前往「Identity-Aware Proxy」頁面 - 選取要使用 IAP 保護的專案。
-
找出您要授予存取權的資源,然後勾選旁邊的核取方塊。
如果您沒有看到任何資源,請確認資源已建立,且 BackendConfig Compute Engine ingress 控制器已同步。
如要確認後端服務可用,請執行下列 gcloud 指令:
gcloud compute backend-services list
- 在右側面板中,按一下「Add principal」。
-
在隨即顯示的「Add principals」(新增主體) 對話方塊中,輸入群組或個別使用者的電子郵件地址,這些群組或個別使用者應擁有專案的「IAP-Secured Web App User」(受 IAP 保護的網路應用程式使用者) 角色。
以下類型的主體可以擁有這個角色:
- Google 帳戶:user@gmail.com
- Google 群組:admins@googlegroups.com
- 服務帳戶:server@example。gserviceaccount.com
- Google Workspace 網域:example.com
請務必新增您可以存取的 Google 帳戶。
- 從「Roles」(角色) 下拉式清單中選取「Cloud IAP」>「IAP-secured Web App User」(受 IAP 保護的網路應用程式使用者)。
- 按一下「Save」(儲存)。
正在啟用 IAP
-
在「Identity-Aware Proxy」頁面的「APPLICATIONS」下方,找出您要限制存取權的 instance group 所服務的負載平衡器。如要為資源啟用 IAP,請在「IAP」欄中
如要啟用 IAP:- 負載平衡器前端設定中至少一個通訊協定必須為 HTTPS。瞭解如何設定負載平衡器。
-
您需要具備
compute.backendServices.update
、clientauthconfig.clients.create
和clientauthconfig.clients.getWithSecret
權限。這些權限係由諸如專案編輯者角色等角色來授予。詳情請參閱「管理受 IAP 保護資源的存取權」。
- 在隨即顯示的「Turn on IAP」(開啟 IAP) 視窗中,按一下「Turn On」(開啟),確認您要使用 IAP 保護資源。啟用 IAP 後,系統會要求您提供負載平衡器所有連線的登入憑證。只有在專案中擁有「IAP-Secured Web App User」角色的帳戶才能取得存取權。
GKE
設定 BackendConfig
如果您執行的是 GKE 叢集 1.24 以上版本,可以使用 Kubernetes Gateway API 設定 IAP 和 GKE。如需操作說明,請參閱「設定 IAP」一節。
請按照「為 IAP 建立 OAuth 用戶端」一文中的指示設定 OAuth 同意畫面,並建立 OAuth 用戶端。
建立 Kubernetes 密鑰來包裝 OAuth 用戶端。
取代下列內容:kubectl create secret generic MY_SECRET --from-literal=client_id=CLIENT_ID \ --from-literal=client_secret=CLIENT_SECRET
MY_SECRET
:要建立的密鑰名稱CLIENT_ID
:OAuth 用戶端 IDCLIENT_SECRET
:OAuth 用戶端密鑰
您應該會收到確認訊息,指出系統已成功建立密鑰,如下所示:
secret "MY_SECRET" created
將 OAuth 憑證新增至 BackendConfig。
apiVersion: cloud.google.com/v1 kind: BackendConfig metadata: name: CONFIG_DEFAULT namespace: my-namespace spec: iap: enabled: true oauthclientCredentials: secretName: MY_SECRET
將 Service 通訊埠與 BackendConfig 建立關聯,啟用 IAP。請參閱「將 BackendConfig 與輸入連結」。建立這類關聯的其中一種方法,是將服務的所有通訊埠預設為 BackendConfig,方法是在 Service 資源中新增下列註解:
metadata: annotations: beta.cloud.google.com/backend-config: '{"default": "CONFIG_DEFAULT"}}'
啟用 IAP 後,您可以使用 gcloud CLI 以 IAM 角色 roles/iap.httpsResourceAccessor
修改 IAP 存取權政策。進一步瞭解如何管理角色和權限。
疑難排解
如果您參照的 secretName
不存在或結構不正確,將顯示下列錯誤訊息之一:
BackendConfig default/config-default is not valid: error retrieving secret "foo": secrets "foo" not found.
如要解決這個錯誤,請確認您已如步驟 2 所述正確建立 Kubernetes 密鑰。BackendConfig default/config-default is not valid: secret "foo" missing client_secret data.
如要解決這個錯誤,請確認您已正確建立 OAuth 憑證。此外,請確認您已參照正確的client_id
和client_secret
鍵。