本頁面說明如何設定 Identity-Aware Proxy (IAP),以使用員工身分聯盟。
使用 IAP 設定員工身分聯盟時,您可以透過身分與存取權管理 (IAM),使用外部身分識別提供者 (IdP) 驗證及授權工作團隊 (例如員工、合作夥伴和約聘人員等使用者群組),讓使用者安全地存取部署在Google Cloud 或地端的服務。
透過員工身分聯盟設定 IAP 後,您就能對受 IAP 保護的應用程式執行下列操作:
- 將使用者重新導向至外部 IdP (例如 Okta) 登入。
- 設定登入工作階段,時間長度介於 15 分鐘至 12 小時之間。
- 只允許 IdP 中的特定使用者或使用者群組存取應用程式。
- 指定使用者可存取應用程式的情境。例如,只允許在一天中的特定時段存取。
您可以在 IAP 支援的所有現有資源和負載平衡器上,搭配員工身分聯盟使用 IAP。
為應用程式設定 IAP 和員工身分聯盟
使用員工身分聯盟設定 IAP 包含下列主要工作:
- 設定工作團隊集區和提供者。
- 建立 OAuth 用戶端 ID 和密鑰。
- 啟用 IAP,並設定使用員工身分聯盟。
設定工作團隊集區和提供者
如要設定員工集區和提供者,請按照「員工身分聯盟」中的操作說明進行,並在設定工作階段時間長度時,參閱「使用員工身分聯盟工作階段管理 IAP」。
如要將第三方 IdP 的電子郵件地址對應至 Google Cloud,您必須在工作團隊集區提供者中新增 google.email 的屬性對應。範例:google.email=assertion.email。
建立 OAuth 用戶端 ID 和密鑰
按照指示在與工作團隊集區相同的機構中,建立 OAuth 用戶端 ID 和密鑰,以用於這項設定。專案不必與受 IAP 保護的資源位於同一專案。建立 OAuth 用戶端 ID 和密鑰時,請按照下列步驟操作:
建立用戶端 ID 時,請使用重新導向 URI 的預留位置。建立用戶端 ID 後,請
describe執行 OAuth 用戶端,取得產生的clientID。取得
clientID後,請執行updateOAuth 用戶端 ,將allowed-redirect-uris更新為下列項目:https://iap.googleapis.com/v1/oauth/clientIds/$CLIENT_ID:handleRedirect。其中
CLIENT_ID是在上一個步驟中擷取的clientID。建立用戶端密鑰後,請執行
describeOAuth 用戶端憑證,取得產生的clientSecret。
請儲存
clientId和clientSecret,因為後續步驟會用到。
啟用 IAP 以使用員工身分聯盟
如要透過員工身分聯盟啟用 IAP,請完成下列步驟。
啟用 IAP
在資源上啟用 IAP。
主控台
- 在 Google Cloud 控制台中,開啟「IAP」頁面。
前往 IAP 頁面 - 選取專案。專案必須與您先前建立的工作人員集區位於同一個機構。專案不一定要是您建立 OAuth 用戶端 ID 和密鑰的專案。
- 按一下「應用程式」分頁標籤,然後找出要使用 IAP 限制存取權的應用程式。
- 在 IAP 資料欄中,將切換按鈕設為「On」(開啟)。
gcloud
如要使用 gcloud CLI 啟用 IAP,請按照適用服務的程序操作:
- Cloud Run 適用的 IAP:
- App Engine 適用的 IAP
- Compute Engine 適用的 IAP
API
建立
settings.json檔案。cat << EOF > settings.json { "iap": { "enabled":true, } } EOF在 App Engine 上啟用 IAP。
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth 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.enabled"如要在 Compute Engine 上啟用 IAP,請使用下列網址:
https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/REGION/backendServices/BACKEND_SERVICE_NAME?updateMask=iap.enabled。
更新應用程式內購設定
如要設定 IAP 使用員工身分聯盟,請設定下列項目:
WorkforceIdentitySettings:先前建立的 OAuth 用戶端 ID 和密鑰。IdentitySources:身分來源。
詳情請參閱「IAP API」。
gcloud
以以下範例為參考,建立
iap_settings.yaml檔案。CLIENT_ID=clientId CLIENT_SECRET=clientSecret WORKFORCE_POOL_NAME=locations/global/workforcePools/test-pool cat <<EOF > iap_settings.yaml access_settings: identity_sources: ["WORKFORCE_IDENTITY_FEDERATION"] workforce_identity_settings: workforce_pools: ["$WORKFORCE_POOL_NAME"] oauth2: client_id: "$CLIENT_ID" client_secret: "$CLIENT_SECRET" EOF執行下列指令,更新資源的 IAP 設定。
gcloud iap settings set iap_settings.yaml --project=PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE更改下列內容:
- PROJECT:專案 ID。
RESOURCE_TYPE:IAP 資源類型。資源類型必須是
cloud-run(預覽版)、app-engine、iap_web、compute、organization或folder。如果是
cloud-run資源類型,請使用--region旗標指出 Cloud Run 服務的部署區域。SERVICE:服務名稱。
app-engine和compute皆可選填。
如要瞭解指令詳情,請參閱 gcloud iap settings set。
API
參考下列範例,建立
iap_settings.json設定檔。CLIENT_ID=clientId CLIENT_SECRET=clientSecret WORKFORCE_POOL_NAME=locations/global/workforcePools/test-pool cat <<EOF > iap_settings.json { "access_settings": { "identity_sources": ["WORKFORCE_IDENTITY_FEDERATION"], "workforce_identity_settings": { "workforce_pools": ["$WORKFORCE_POOL_NAME"], "oauth2": { "client_id": "$CLIENT_ID", "client_secret": "$CLIENT_SECRET", } } } } EOF使用 gcloud CLI 取得資源名稱,然後從輸出內容複製
RESOURCE_NAME,因為您會在後續步驟中用到這個名稱。gcloud iap settings get \ --project=PROJECT \ --resource-type=RESOURCE_TYPE \ --service=SERVICE更改下列內容:
- PROJECT:專案 ID。
- RESOURCE_TYPE:IAP 資源類型。資源類型必須是
appengine、iap_web、compute、organization、folder或cloud_run-$REGION(搶先版),其中 $REGION 是部署 Cloud Run 服務的區域。 - SERVICE:服務名稱。
app-engine和compute皆可選填。
在下列指令中,將
RESOURCE_NAME替換為上一步的RESOURCE_NAME。curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d @iap_settings.json \ "https://iap.googleapis.com/v1/RESOURCE_NAME:iapSettings?updateMask=iapSettings.accessSettings.identitySources,iapSettings.accessSettings.workforceIdentitySettings.workforcePools,iapSettings.accessSettings.workforceIdentitySettings.oauth2.clientId,iapSettings.accessSettings.workforceIdentitySettings.oauth2.clientSecret"
授予受 IAP 保護資源的存取權
如要存取受 IAP 保護的資源,使用者必須擁有資源的「受 IAP 保護的網頁應用程式使用者」角色。您可以將「受 IAP 保護的網頁應用程式使用者」角色授予單一使用者 (主體) 或一組使用者 (主體集,對應至群組、特定屬性或整個使用者集區)。
系統不支援無限制存取受 IAP 保護的資源。
主控台
- 在 Google Cloud 控制台中,開啟「IAP」頁面。
前往「應用程式內結帳」頁面 - 選取要使用 IAP 保護的資源。
- 按一下「新增主體」,然後新增要授予資源 IAM 角色的群組或個人的主體 ID。
- 在「指派角色」中,選取「受 IAP 保護的網頁應用程式使用者」。
- 按一下「新增」。
gcloud
執行下列指令。
gcloud iap web add-iam-policy-binding \
--member=PRINCIPAL_IDENTIFIER \
--role='roles/iap.httpsResourceAccessor' \
--project=PROJECT_ID \
--resource-type=RESOURCE_TYPE \
--service=SERVICE \
--condition=CONDITION
請替換下列項目:
- PRINCIPAL_IDENTIFIER:主體 ID。
- PROJECT_ID:專案 ID。
- RESOURCE_TYPE:IAP 資源類型,可以是
app-engine或backend-services。 - SERVICE:(選用) 服務名稱。
- CONDITION:(選用) IAM 條件。 以下是使用存取層級設定的條件範例:
expression="accessPolicies/12345678/accessLevels/iap_test_access_level" in request.auth.access_levels,title=iap-test-access-level,description=only access in weekdays
API
不建議使用這個方法,因為這會影響資源的整個 IAM 政策。錯誤可能會從資源中移除政策。
取得現有的 IAM 政策繫結。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d {} \ "https://iap.googleapis.com/v1/RESOURCE_NAME:getIamPolicy" -o iam_policy_bindings.json將 RESOURCE_NAME 替換為您在先前步驟中取得的 RESOURCE_NAME。
從上一個步驟取得
iam_policy_bindings.json檔案後,請移除版本和 etag 行,並新增要為主體 ID 新增的繫結。詳情請參閱「瞭解允許政策」。{ "bindings": [ { // existing bindings }, { "role": "roles/iap.httpsResourceAccessor", "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/iap-test-pool/subject/iap-test-subject" ], "condition": { "expression": "\"accessPolicies/12345678/accessLevels/iap_test_access_level\" in request.auth.access_levels", "title": "iap-test-access-level", "description": "only access in week days" } } ] }更新 IAM 政策繫結。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d "{"policy":$(cat iam_policy_bindings.json)}" \ "https://iap.googleapis.com/v1/RESOURCE_NAME:setIamPolicy"將 RESOURCE_NAME 替換為您在先前步驟中取得的 RESOURCE_NAME。
詳情請參閱「GetIamPolicy」和「SetIamPolicy」。
(選用) 設定情境感知存取權
您也可以選擇設定情境感知存取規則,進行進階授權。
如要設定存取層級,請參閱「建立及套用存取層級」。使用員工身分聯盟時,無法根據裝置資訊設定存取層級。您仍可使用以要求情境為準的存取層級,並根據 IP 位址、時間和日期設定條件。
程式輔助驗證
如果應用程式已設定 Workforce Identity Federation,IAP 支援服務帳戶 JWT 驗證。如需操作說明,請參閱使用服務帳戶 JWT 進行驗證。
使用工作團隊集區時的限制
- 每個啟用 IAP 的應用程式只能設定一個工作團隊集區,且該集區只能包含一個供應商。
- 工作團隊集區、OAuth 用戶端 ID 和密鑰,以及啟用 IAP 的應用程式,都必須位於同一個機構。
- 系統不支援裝置相關資訊的存取層級。
- 系統僅支援下列 IAP 設定:
- 員工身分聯盟的程式輔助存取權僅支援 Google 服務帳戶。
疑難排解
如需疑難排解資訊,請參閱「疑難排解和常見問題」。