使用主機名稱和路徑條件

本頁面說明主機名稱和路徑的 身分與存取權管理 (IAM) 條件

您可以使用要求網址的主機名稱和路徑,保護 Identity-Aware Proxy (IAP) 資源。舉例來說,request.path.startsWith IAM 條件只有在網址路徑以 /admin 開頭時,才會授予存取權給「特殊存取權限」群組中的員工。

如要進一步瞭解主機名稱和路徑條件的使用方式,請參閱「要求屬性」一文。

字串正規化

網址有主機名稱和路徑。例如,網址 https://sheets.google.com/create?query=param 的主機名稱為 sheets.google.com,路徑為 /create

後端解譯主機名稱和路徑的方式有很多種。為免產生混淆,IAP 檢查政策時會將主機名稱和路徑字串正規化。

當要求使用非正規路徑,IAP 會進行兩項政策檢查。如果非正規化路徑通過政策檢查,IAP 會將路徑正規化並開始進行第二項政策檢查。非正規化和正規化後的路徑都通過政策檢查,系統才會授予存取權。

舉例來說,如果要求含有路徑 /internal;some_param/admin,IAP 首先會對非正規化路徑 (/internal) 進行其中一項政策檢查。如果檢查通過,IAP 會對正規化路徑 (/internal/admin) 進行第二項政策檢查。

主機名稱

主機名稱正規化程序包括:

  • 移除結尾的句點 (.)
  • 將字元轉換成小寫字元
  • 轉換成 ASCII

包含非 ASCII 字元的網域名稱會進一步使用 Punycode 編碼來正規化。您必須使用 Punycode 來編碼主機名稱字串,以便進行比對。

如要使用 Punycode 將主機名稱字串標準化,請使用 Punycoder 這類轉換器。

以下是正規化主機名稱範例:

  • FOO.com 已正規化為 foo.com
  • café.fr 已正規化為 xn--caf-dma.fr

路徑

路徑正規化涉及以下步驟:

  • 移除路徑參數
  • 移除絕對等值的相對路徑

包含所有字元的路徑參數 (包括 ; 到下一個 / 或路徑結尾的參數)。

路徑部分開頭為 ..; 的要求將視為無效。例如 /..;bar//bar/..;/ 會傳回 HTTP 400: Bad Request 錯誤。

以下是正規化路經範例:

  • /internal;some_param/admin 已正規化為 /internal/admin
  • /a/../b 已正規化為 /b
  • /bar;param1/baz;baz;param2 已正規化為 /bar/baz

子網域結尾

含有 request.host.endsWith("google.com") 的政策組合會同時符合 sub_domain.google.comtestgoogle.com。如果您的目標是將政策限制為結尾為 google.com 的子網域,請將政策設為 request.host.endsWith(".google.com")