自訂 IAP

本文說明如何自訂 Identity-Aware Proxy (IAP) 設定。您可以透過這些設定控制下列行為:

* 與 Cloud Service Mesh 和 Google Kubernetes Engine 上的 Istio 相容。 * 處理 CORS 預檢要求。* 使用者驗證方式。* 存取遭拒時,向使用者顯示的錯誤頁面。

管理設定

您可以使用 Google Cloud 控制台、IAP API 或 Google Cloud CLI,查看及更新負載平衡器和 App Engine 應用程式的 IAP 設定。

如要更新所有資源 (包括資料夾、專案和組織) 的 IAP 設定,請使用 Google Cloud CLI 或 API。

如要在 IAP 中管理設定,請按照下列步驟操作:

控制台

如要使用 Google Cloud 控制台查看及修改設定,請按照下列步驟操作:

  1. 前往「Identity-Aware Proxy」頁面。
    前往「Identity-Aware Proxy」頁面
  2. 在「應用程式」分頁中找到資源。
  3. 開啟「更多動作」選單 ,然後按一下「設定」。
  4. 按一下 [儲存]。

gcloud

如要使用 Google Cloud CLI 取得及修改設定,請使用 gcloud iap settings get 和 gcloud iap settings set 指令,如下所示:

  • 如要取得專案、資料夾或組織的設定,請使用下列指令。如要使用 Google Cloud 控制台或 gcloud CLI 調整 IAP 設定,請參閱「自訂 IAP」。
gcloud iap settings get --project=PROJECT-ID
gcloud iap settings get --folder=FOLDER-ID
gcloud iap settings get --organization=ORGANIZATION-ID
  • 如要取得專案中特定 IAP 資源類型的設定,請按照下列步驟操作:
gcloud iap settings get --project=PROJECT-ID \
  --resource-type=RESOURCE-TYPE-NAME
  • 如要設定專案、資料夾、組織或專案下的 IAP 資源類型,請建立 JSON 或 YAML 檔案,並在其中加入所需的新設定,然後指定檔案路徑。詳情請參閱 gcloud iap settings set 主題:
gcloud iap settings set SETTING_FILE --project=PROJECT-ID \
  --resource-type=RESOURCE-TYPE-NAME

API

如要使用 IAP API 取得及修改設定,請使用 GET 或 PATCH HTTP 動詞,向 Google Cloud中的所選資源端點提出要求。結合 :iapSettings 路徑後置字串、資源路徑 (詳情請參閱「資源和權限」) 和適當的 HTTP 方法,即可取得或修改設定。詳情請參閱 getIapSettings() 和 updateIapSettings():

  • 如要取得或設定專案中特定 IAP 資源類型的設定,請按照下列步驟操作:
    https://iap.googleapis.com/v1/projects/PROJECT-ID/iap_web/appengine-APP-ID/services/SERVICE-ID/versions/VERSION-ID:iapSettings
    
  • 如要取得或設定專案設定,請按照下列步驟操作:

    https://iap.googleapis.com/v1/projects/PROJECT-ID:iapSettings
  • 如要取得或設定資料夾的設定,請按照下列步驟操作:

    https://iap.googleapis.com/v1/folders/FOLDER-ID:iapSettings
  • 如要取得或設定組織的設定,請按照下列步驟操作:

    https://iap.googleapis.com/v1/organizations/ORGANIZATION-ID:iapSettings

IAP 設定角色和權限

本節說明查看及更新 IAP 設定所需的角色和權限。

設定角色

您可以在組織、資料夾和專案層級授予 IAP 設定管理員 (roles/iap.settingsAdmin) 角色。如要查看 IAP 設定管理員角色授予的權限,請參閱「設定權限」。

如要進一步瞭解 IAP 的角色和權限,請參閱「Identity-Aware Proxy 角色和權限」。

下列基本角色提供這些權限:

  • 專案檢視者 (roles/viewer) 角色會授予所有 getSettings 權限。

  • 編輯者 (roles/editor) 角色會授予表格中說明的所有權限。

設定權限

下表列出讀取及修改各資源類型設定所需的 IAM 權限。如需不同資源類型的說明,請參閱「資源和權限」。

資源 查看設定的權限 修改設定的權限
組織 iap.organizations.getSettings iap.organizations.updateSettings
資料夾 iap.folders.getSettings iap.folders.updateSettings
專案 iap.projects.getSettings iap.projects.updateSettings
所有 Web 服務 iap.web.getSettings iap.web.updateSettings
網頁類型 iap.webTypes.getSettings iap.webTypes.updateSettings
網路服務 iap.webServices.getSettings iap.webServices.updateSettings
網路服務版本 iap.webServiceVersions.getSettings iap.webServiceVersions.updateSettings
網頁類型 iap.webTypes.getSettings iap.webTypes.updateSettings

如要進一步瞭解如何授予 IAM 角色,請參閱「授予、變更及撤銷存取權」。

自訂 IAP 設定

IAP 提供下列自訂設定:

欄位 說明
access_settings.cors_settings.allow_http_options 控制 HTTP OPTIONS (CORS 預檢)
access_settings.oauth_settings.login_hint 簡化 Google Workspace 網域使用者的登入程序
application_settings.access_denied_page_settings.access_denied_page_uri 存取遭拒時顯示自訂錯誤頁面
application_settings.csm_settings.rctoken_aud 核發 Cloud Service Mesh 和 Istio RCToken
access_settings.gcip_settings 使用 Identity Platform 進行驗證
access_settings.ReauthSettings 設定重新驗證政策。詳情請參閱「設定重新驗證」。

您可以在專案層級或任何較低的 IAP 資源層級套用設定。

您可以設定網頁式 IAP 資源,但無法設定透過 IAP for TCP 轉送存取的資源。

以 access_settings.cors_settings.allow_http_options 為例,您可以按照下列方式調整自訂設定:

YAML

access_settings:
  cors_settings:
    allow_http_options: "false"

JSON

{
  "access_settings": {
    "cors_settings": {
      "allow_http_options": "false"
    }
  }
}

以下各節將進一步說明各項設定。

允許 HTTP OPTIONS 要求 (CORS 預檢)

欄位 預設值
access_settings.cors_settings.allow_http_options false

網路的同源政策會禁止瀏覽器在網站之間傳送 AJAX 要求。根據預設,如果網頁來自某個來源,網頁上的 JavaScript 無法使用 AJAX,將要求傳送至由 IAP 保護且託管於其他來源的應用程式。

在某些情況下,瀏覽器會自動嘗試要求,但如果回應不含 Access-Control-Allow-Origin 標頭,則會捨棄回應內容。如要允許這類要求,請在應用程式的回應中加入這個標頭。

在其他情況下,瀏覽器會先傳送 CORS 預檢要求 (一種 HTTP OPTIONS 要求),再傳送跨源要求。如果應用程式未傳回適當的預檢回應 (包含必要的 Access-Control-* 回應標頭),瀏覽器就會封鎖要求並顯示錯誤。此外,由於預檢要求不會與任何驗證憑證 (例如 IAP 工作階段 Cookie) 一起傳送,因此 IAP 也會回應錯誤。

如要允許這些要求,請按照下列步驟操作:

  1. 在應用程式中加入程式碼,回應 OPTIONS 要求。

  2. 將 access_settings.cors_settings.allow_http_options 設定變更為 true,讓 IAP 將 OPTIONS 要求傳遞至應用程式。

使用 Google Workspace 網域進行驗證

欄位 預設值
access_settings.oauth_settings.login_hint ""

如果只有特定 Google Workspace 網域的成員會使用您的應用程式,您可以設定 IAP 來最佳化驗證流程。這麼做有幾個好處:

  • 如果使用者登入多個帳戶 (例如工作帳戶和個人帳戶),系統會自動選取工作帳戶,而不會顯示帳戶選取 UI。

  • 如果使用者未登入 Google 帳戶,登入 UI 會自動填入電子郵件地址的網域部分 (也就是說,使用者只需要輸入 alice,而不是 alice@example.com)。

  • 如果 Google Workspace 網域已設為使用第三方單一登入 (SSO) 服務供應商,系統會顯示自訂登入頁面,而非 Google 的登入頁面。

如要啟用這項行為,請將 access_settings.oauth_settings.login_hint 的值設為您的 Google Workspace 網域名稱 (例如 example.com)。網域擁有權必須經過驗證:您無法使用自己擁有的任意網際網路 DNS 網域。(已新增為 Google Workspace 主網域或次要網域的網域已通過驗證,因此可以在這裡使用)。

如需驗證網域外的使用者,可以使用程式輔助驗證。

詳情請參閱 OpenID Connect 說明文件。

設定自訂的「存取遭拒」錯誤頁面

注意:這項功能僅適用於付費企業安全訂閱方案。如有興趣,歡迎報名。
欄位 預設值
application_settings.access_denied_page_settings.access_denied_page_uri ""

您可以在這個欄位中設定網址,在政策拒絕存取時,將使用者重新導向至自訂頁面,而非預設的 IAP 錯誤頁面。

您也可以使用這項功能嵌入疑難排解網址。詳情請參閱「為自訂『存取遭拒』錯誤頁面啟用疑難排解網址」。

核發 Cloud Service Mesh 和 Istio RCToken 網格 ID

欄位 預設值
application_settings.csm_settings.rctoken_aud ""

如果您在 GKE 上使用 Istio,可以將 IAP 設為產生與 Istio 相容的 RCToken。如果這個欄位設為非空白字串,IAP 會新增含有 RCToken 的 Ingress-Authorization HTTP 標頭。aud 憑證附加資訊會設為這個欄位的值。

使用 Identity Platform 進行驗證

欄位 預設值
access_settings.gcip_settings null

根據預設,IAP 會使用 Google 的內建身分系統。如果設定這個欄位,IAP 會改用 Identity Platform 驗證使用者。

使用 Terraform 自訂 IAP

如要使用 Terraform 設定 IAP,請參閱 google_iap_settings。

瞭解資源階層中的設定沿用機制

IAP 一律會評估特定網路服務版本的要求。這類資源位於資源階層結構的最底層,如下所示:

- Organization
  - Folder
    - Project
      - All web services
        - Web service type
          - Web service
            - Web service version

為決定要套用至網路服務版本的設定,IAP 會先採用一組預設值,然後由上而下逐層檢查。系統會套用找到的設定,因此較低層級設定的值會覆寫較高層級設定的值。 舉例來說,如果 access_settings.cors_settings.allow_http_options 在專案層級設為 true,但在服務層級設為 false,則有效值會是 false。

如要進一步瞭解 IAP 資源階層,請參閱「資源和權限」。