使用員工身分聯盟設定 IAP

本頁面說明如何設定 Identity-Aware Proxy (IAP),以便使用員工身分聯盟。

使用 IAP 設定員工身分聯盟後,您就能透過外部識別資訊提供者 (IdP),使用 Identity and Access Management (IAM) 驗證及授權員工 (即員工、合作夥伴和承包商等使用者群組),讓使用者安全存取部署在Google Cloud 或地端部署的服務。

透過員工身分聯盟設定 IAP 後,您就能對受 IAP 保護的應用程式執行下列操作:

  • 將使用者重新導向至外部 IdP (例如 Okta) 登入。
  • 登入工作階段可設為 15 分鐘至 12 小時。
  • 僅允許 IdP 中的特定使用者或使用者組合存取應用程式。
  • 指定使用者可存取應用程式的情境。例如,只允許在一天中的特定時間存取。
您可以將 IAP 與員工身分聯盟搭配使用,套用至 IAP 支援的所有現有資源和負載平衡器。

為應用程式設定 IAP 和員工身分聯盟

使用員工身分聯盟設定 IAP 的主要工作如下:

  1. 設定工作團隊集區和提供者。
  2. 建立 OAuth 用戶端 ID 和密鑰。
  3. 啟用 IAP,並設定使用員工身分聯盟。

設定工作團隊集區和提供者

如要設定工作團隊集區和提供者,請按照下列其中一個提供者的操作說明進行:

設定工作階段持續時間時,請參閱「使用員工身分聯盟管理 IAP 工作階段」。

如要將第三方 IdP 的電子郵件地址對應至 Google Cloud,您必須在工作團隊集區提供者中,為 google.email 新增屬性對應。範例:google.email=assertion.email。

建立 OAuth 用戶端 ID 和密鑰

重要事項:您在下列步驟中建立的 OAuth 用戶端 ID 和密鑰,是為員工身分聯盟基礎架構建立。這與使用自訂 OAuth 設定啟用 IAP 時,所需的用戶端 ID 和密鑰不同,後者適用於 Google Identity。
  1. 請按照操作說明,在與這項設定所用工作團隊集區相同的組織中,建立 OAuth 用戶端 ID 和密鑰。專案不一定要與受 IAP 保護的資源位於相同專案。建立 OAuth 用戶端 ID 和密鑰時,請執行下列操作:

    1. 建立用戶端 ID 時,請使用重新導向 URI 的預留位置。建立用戶端 ID 後,請執行 describe OAuth 用戶端,取得產生的 clientID。

    2. 取得 clientID 後,請執行update OAuth 用戶端,將 allowed-redirect-uris 更新為:https://iap.googleapis.com/v1/oauth/clientIds/$CLIENT_ID:handleRedirect。

      其中 CLIENT_ID 是在上一個步驟中擷取的 clientID。

    3. 建立用戶端密鑰後,請執行 describe OAuth 用戶端憑證,取得產生的 clientSecret。

    請儲存 clientId 和 clientSecret,後續步驟會用到。

啟用 IAP 以使用員工身分聯盟

如要啟用 IAP 並搭配員工身分聯盟,請完成下列步驟。

啟用 IAP

在資源上啟用 IAP。

主控台

  1. 在 Google Cloud 控制台中,開啟「IAP」頁面。
    前往「IAP」頁面
  2. 選取專案。專案必須與先前建立的工作團隊集區位於同一個組織。這個專案不一定要是您建立 OAuth 用戶端 ID 和密鑰的專案。
  3. 按一下「Applications」(應用程式) 分頁標籤,然後找出要使用 IAP 限制存取權的應用程式。
  4. 在 IAP 資料欄中,將切換按鈕設為「On」(開啟)。

gcloud

如要使用 gcloud CLI 啟用 IAP,請按照適用服務的程序操作:

API

  1. 建立 settings.json 檔案。

    cat << EOF > settings.json
    {
    "iap":
      {
        "enabled":true,
     }
    }
    EOF
    
  2. 在 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 設定

如要設定 IAP 使用員工身分聯盟,請完成下列設定:

  • WorkforceIdentitySettings:先前建立的 OAuth 用戶端 ID 和密鑰。
  • IdentitySources:識別資訊來源。

詳情請參閱「IAP API」。

gcloud

  1. 請參考以下範例,建立 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
    
  2. 執行下列指令,更新資源的 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

  1. 請參考以下範例,建立 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
    
  2. 使用 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 均可選用。
  3. 在下列指令中,將 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 保護的資源。

主控台

  1. 在 Google Cloud 控制台中,開啟「IAP」頁面。
    前往「IAP」頁面
  2. 選取要使用 IAP 保護的資源。
  3. 按一下「Add Principal」(新增主體),然後新增要授予資源 IAM 角色的群組或個人主體 ID。
  4. 在「指派角色」中,選取「受 IAP 保護的網頁應用程式使用者」。
  5. 按一下「新增」。

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 on weekdays

API

這種方法會影響資源的整個 IAM 政策,因此不建議使用。錯誤可能會導致政策從資源中移除。

  1. 取得現有的 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。

  2. 在先前步驟取得的 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 on weekdays"
          }
        }
      ]
    }
    
  3. 更新 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 位址、時間和日期條件。

程式輔助驗證

IAP 支援服務帳戶 JWT 驗證,適用於設定 Workforce Identity Federation 的應用程式。如需操作說明,請參閱「使用服務帳戶 JWT 進行驗證」。

使用工作團隊集區時的限制

* 每個啟用 IAP 的應用程式只能設定一個工作團隊集區,且該集區只能包含一個提供者。* 工作團隊集區、OAuth 用戶端 ID 和密鑰,以及已啟用 IAP 的應用程式,都必須位於同一個組織。* 不支援裝置相關資訊的存取層級。 * 僅支援下列 IAP 設定: * CorsSettings * CsmSettings * AccessDeniedPageSettings.accessDeniedPageUri * CookieDomain * 只有 Google 服務帳戶支援透過員工身分聯盟進行程式輔助存取。

疑難排解

如需疑難排解資訊,請參閱「疑難排解和常見問題」。