自訂 IAP

本文將說明如何自訂 Identity-Aware Proxy (IAP) 設定。您可以透過這些設定控管行為,包括:

  • 與 Google Kubernetes Engine 上的 GKE Enterprise 和 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 getgcloud 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 取得及修改設定,請使用 GETPATCH 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.organizations.getSettings iap.organizations.updateSettings
資料夾 iap.folders.getSettings iap.folders.updateSettings
專案 iap.projects.getSettings iap.projects.updateSettings
所有網路服務 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 設定管理員 (roles/iap.settingsAdmin) 角色會授予所有這些權限,專案編輯者 (roles/editor) 也是如此。專案檢視者 (roles/viewer) 會授予所有 getSettings 權限。

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

自訂 IAP 設定

IAP 提供下列自訂設定:

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

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

您可以為網路式 IAP 資源設定設定,但無法為透過 用於 TCP 轉送的 IAP 存取的資源設定。

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 網域已設定為使用第三方單一登入服務供應商,系統會顯示自訂登入頁面,而非 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 錯誤頁面。

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

發出 GKE Enterprise 和 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 驗證使用者。

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

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 資源階層,請參閱「資源和權限」。