IAM Conditions 的屬性參考資料

本文說明條件運算式支援的屬性。

支援的條件屬性

以下各節會摘要說明支援的屬性,並指出哪些Google Cloud 服務可辨識各個屬性。

資源屬性

下列屬性與要求主體的資源有關。

屬性 用量摘要 支援的 Google Cloud 服務
資源服務屬性

根據使用的 Google Cloud 服務管理存取權。

您可以在允許政策角色繫結中使用這項屬性。

  • Agent Registry
  • Apigee
  • Application Integration
  • Apigee API 中心
  • 備份和災難復原服務
  • BigQuery
  • BigQuery Reservation API
  • Bigtable
  • 二進位授權
  • Cloud Deploy
  • Customer Experience Agent Studio
  • Cloud Key Management Service
  • Cloud Logging
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Dataform
  • Cloud DNS
  • Google Kubernetes Engine
  • Firestore
  • Identity-Aware Proxy
  • Integration Connectors
  • Google Cloud Managed Service for Apache Kafka
  • 網路安全整合服務
  • Parameter Manager
  • Cloud NGFW
  • Pub/Sub Lite
  • Resource Manager
  • Secret Manager
  • Spanner
資源類型屬性

依據資源類型管理存取權。

您可以在允許政策角色繫結中使用這項屬性。

  • Agent Registry
  • Apigee
  • Application Integration
  • Apigee API 中心
  • BigQuery
  • BigQuery Reservation API
  • Bigtable
  • 二進位授權
  • Customer Experience Agent Studio
  • Cloud Key Management Service
  • Cloud Logging
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Dataform
  • Cloud DNS
  • Google Kubernetes Engine
  • Firestore
  • Cloud NGFW
  • Identity-Aware Proxy
  • Integration Connectors
  • Google Cloud Managed Service for Apache Kafka
  • 網路安全整合服務
  • Parameter Manager
  • Pub/Sub Lite
  • Resource Manager
  • Secret Manager
  • Spanner
資源名稱屬性

根據資源名稱管理存取權。

您可以在允許政策角色繫結中使用這項屬性。

  • Agent Registry
  • Apigee
  • Application Integration
  • Apigee API 中心
  • 備份和災難復原服務
  • BigQuery
  • BigQuery Reservation API
  • Bigtable
  • 二進位授權
  • Cloud Deploy
  • Customer Experience Agent Studio
  • Cloud Key Management Service
  • Cloud Logging
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Dataform
  • Cloud DNS
  • Google Kubernetes Engine
  • Firestore
  • Cloud NGFW
  • Integration Connectors
  • Google Cloud Managed Service for Apache Kafka
  • 網路安全整合服務
  • Parameter Manager
  • Pub/Sub Lite
  • Secret Manager
  • Spanner
資源標記

根據資源附加的標記管理存取權。

這項屬性可用於下列位置:

  • 允許政策角色繫結
  • 拒絕政策拒絕規則

所有 Google Cloud 服務 (請參閱「繼承條件支援」)

如要進一步瞭解資源屬性,請參閱本頁的「資源屬性」一節。

主體屬性

下列屬性與提出要求的主體有關。

屬性 用量摘要 支援的主體類型

主體類型屬性

根據要求中的主體類型套用政策。

您可以在主體存取邊界政策的政策繫結中使用這項屬性。

  • Google 帳戶
  • 員工身分集區身分
  • workload identity pool 身分
  • 服務帳戶

主體屬性

根據要求中的主體身分套用政策。

您可以在主體存取邊界政策的政策繫結中使用這項屬性。

  • Google 帳戶
  • 員工身分集區身分
  • workload identity pool 身分
  • 服務帳戶

如要進一步瞭解主體屬性,請參閱本頁的「主體屬性」一節。

要求屬性

下列屬性與要求詳細資料有關。

屬性 用量摘要 支援的 Google Cloud 服務

存取層級屬性

根據特定存取層級管理存取權。

存取層級是根據要求和要求者的原始屬性 (例如來源 IP 位址、裝置屬性和時間) 計算得出的屬性。舉例來說,onNetwork 存取層級可能會要求提出要求的裝置必須來自特定 IP 位址範圍。存取層級是由組織的管理員定義。

您可以在允許政策角色繫結中使用這項屬性。

Identity-Aware Proxy

API 屬性

根據特定 Google CloudAPI 或服務提供的資料管理存取權。

您可以在允許政策角色繫結中使用這項屬性。

並非所有服務都能辨識所有 API 屬性。如要查看可辨識各項屬性的服務清單,請參閱「API 屬性」。

日期/時間屬性

設定 Google Cloud 資源的存取權,包括可到期、排定或限時存取權。

您可以在允許政策角色繫結中使用這些屬性。

所有 Google Cloud 服務 (請參閱「繼承條件支援」)

目的地 IP/通訊埠屬性

根據要求的目的地 IP 位址和/或通訊埠管理存取權。舉例來說,Compute Engine 虛擬機器 (VM) 執行個體可能會公開外部 IP (例如 10.0.0.2),但公開通訊埠 22 可能僅供管理用途。

用於 Identity-Aware Proxy TCP 轉送。

您可以在允許政策角色繫結中使用這些屬性。

Identity-Aware Proxy

轉送規則屬性

指定主體可以建立的轉送規則類型。舉例來說,您可以允許主體為內部 Google Cloud 負載平衡器建立轉送規則,處理源自 Google Cloud 網路內部的流量,但不允許為外部 Google Cloud 負載平衡器建立轉送規則,處理源自網際網路的流量。

您可以在允許政策角色繫結中使用這些屬性。

網址路徑/主機屬性

根據要求的網址路徑和/或主機管理存取權。舉例來說,條件可以指定 https://example.com 為一般網域使用者可存取的主要應用程式,而 https://hr.example.com/admin 則用於存取應用程式中只有人力資源管理員可存取的頁面。

您可以在允許政策角色繫結中使用這些屬性。

  • Identity-Aware Proxy
  • Cloud Run

如要進一步瞭解要求屬性,請參閱本頁的「要求屬性」一節。

支援繼承條件

除了在某些服務專屬資源的允許政策中新增條件外,您也可以在組織、資料夾或專案層級,為資源新增條件式角色繫結。在容器資源層級新增條件式角色繫結時,其他資源會透過資源階層繼承這些繫結。如果資源不允許允許政策中的條件,或沒有允許政策,繼承條件就很有用。

在組織、資料夾或專案層級使用屬性時,請注意,大多數屬性僅適用於特定資源類型。如果條件的某部分使用資源不支援的屬性,則該部分條件一律不會解讀為授予存取權。舉例來說,條件 resource.name.endsWith == devResource 絕不會授予任何 IAM 資源的存取權,因為 IAM 資源不提供資源名稱。

為避免這個問題,請使用資源類型和資源服務屬性,限制條件範圍。舉例來說,下列條件會針對 Compute Engine 執行個體以外的所有資源類型評估為 true;相較之下,對於 Compute Engine 執行個體,條件會檢查資源名稱:

resource.type != 'compute.googleapis.com/Disk' ||
    resource.name.endsWith('devResource')

資源屬性

資源服務、資源類型和資源名稱屬性通常用於變更角色繫結提供的存取權授予範圍。如果角色包含適用於不同資源專屬屬性的權限,您可以使用資源條件,為特定類型或特定服務授予角色的部分權限。

resource.service 屬性

resource.service 屬性可讓您根據使用的Google Cloud 服務設定條件。舉例來說,您可以設定條件,限制使用者存取採用 cloudresourcemanager.googleapis.com 服務的資源。如需支援的值清單,請參閱「資源服務值」。

您可以在允許政策角色繫結中使用 resource.service 屬性。

屬性變數 resource.service
屬性類型

string

如需支援的值清單,請參閱「資源服務值」。

支援的運算子 ,
詳細資料 在條件中使用 resource.type 屬性時,請檢查屬性是否完全相等 () 或完全不相等 ()。其他比較 (例如檢查前置字元或後置字元) 可能會產生非預期的結果。
範例

傳回 Compute Engine 資源的 true:

resource.service == "compute.googleapis.com"
支援的服務
  • Agent Registry
  • Apigee
  • Application Integration
  • Apigee API 中心
  • 備份和災難復原服務
  • BigQuery
  • BigQuery Reservation API
  • Bigtable
  • 二進位授權
  • Cloud Deploy
  • Customer Experience Agent Studio
  • Cloud Key Management Service
  • Cloud Logging
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Dataform
  • Cloud DNS
  • Google Kubernetes Engine
  • Firestore
  • Identity-Aware Proxy
  • Integration Connectors
  • Google Cloud Managed Service for Apache Kafka
  • 網路安全整合服務
  • Parameter Manager
  • Cloud NGFW
  • Pub/Sub Lite
  • Resource Manager
  • Secret Manager
  • Spanner

resource.type 屬性

resource.type 屬性可讓您根據資源類型設定條件。舉例來說,您可以設定條件,限制使用者存取 storage.googleapis.com/Object 類型的資源。如需支援的值清單,請參閱「資源類型值」。

如果條件使用 resource.name 屬性,強烈建議您使用 resource.type 屬性,控管條件適用的資源類型。詳情請參閱本頁的「resource.name 屬性」一節。

您可以在允許政策角色繫結中使用 resource.type 屬性。

屬性變數 resource.type
屬性類型

string

如需支援的值清單,請參閱「資源類型值」。

支援的運算子 ,
詳細資料 在條件中使用 resource.type 屬性時,請檢查屬性是否完全相等 () 或完全不相等 ()。其他比較 (例如檢查前置字元或後置字元) 可能會產生非預期的結果。
範例

除非資源是 Compute Engine 映像檔,否則會傳回 true:

resource.type != "compute.googleapis.com/Image"

只有在資源為 Compute Engine 映像檔或永久磁碟時,才會傳回 true:

(resource.type == "compute.googleapis.com/Image" ||
 resource.type == "compute.googleapis.com/Disk")
支援的資源類型
Agent Registry
  • 技能
  • 技能修訂版本
Apigee
  • API 產品屬性
  • API 產品
  • API Proxy
  • API Proxy 鍵/值對應項目
  • API Proxy 鍵/值對應
  • API Proxy 修訂版本
  • 快取
  • 開發人員應用程式屬性
  • 開發人員應用程式
  • 開發人員屬性
  • 開發人員
  • 環境鍵/值對應項目
  • 環境鍵/值對應
  • 匯出項目
  • 流程掛鉤
  • 金鑰儲存庫別名
  • 金鑰庫
  • 查詢
  • 費率方案
  • 參考資料
  • 共用流程修訂版本
  • 共用流程
  • 目標伺服器
  • 追蹤 (偵錯) 工作階段
Application Integration
  • 驗證設定
  • 執行作業
  • 整合版本
  • 整合
  • 位置
  • 停權
Apigee API 中心
  • API
  • API 作業
  • 定義
  • 部署作業
  • 規格
  • 版本
備份和災難復原服務
  • backup vault
BigQuery
  • 資料集
  • 模型
  • 處理常式
  • Tables
BigQuery Reservation API
  • 作業
  • BI 預留項目
  • 承諾使用資源
  • 位置
  • 預留項目
Bigtable
  • 叢集
  • 執行個體
  • Tables
二進位授權
  • 驗證者
  • 持續驗證設定
  • 政策
Customer Experience Agent Studio
  • 應用程式
  • 作業
Cloud Key Management Service
  • 加密編譯金鑰版本
  • 加密編譯金鑰
  • 金鑰環
  • 位置
Cloud Logging
  • 記錄檔值區
  • 記錄檢視
Cloud NGFW
  • 位址群組
  • 防火牆端點關聯
  • 防火牆端點
  • 安全性設定檔群組
  • 安全性設定檔
Cloud SQL
  • 備份執行作業
  • 執行個體
Cloud Storage
  • bucket
  • 資料夾 (位於已啟用階層命名空間的 bucket)
  • 代管資料夾
  • 物件
Compute Engine
  • 後端服務 (全域和區域)
  • 防火牆
  • 轉送規則 (全域和區域)
  • 圖片
  • 執行個體範本
  • 執行個體
  • 永久磁碟 (區域性和可用區)
  • 快照
  • 目標 HTTP(S) Proxy (全域和區域)
  • 目標安全資料傳輸層 (SSL) Proxy
  • 目標 TCP Proxy
Dataform
  • 編譯結果
  • 位置
  • 版本設定
  • 存放區
  • 工作流程設定
  • 工作流程叫用
  • 工作區
Cloud DNS
  • 資源記錄集
Google Cloud
  • 位置1
Google Kubernetes Engine
  • 叢集
Firestore
  • 資料庫
Identity-Aware Proxy
  • 所有後端服務和 App Engine 應用程式
  • 所有通道資源
  • 所有通道可用區
  • 所有 Web 服務
  • App Engine 應用程式服務版本
  • App Engine 應用程式服務
  • Compute Engine 後端服務
  • 通道執行個體
Integration Connectors
  • 連線
  • 連線結構定義中繼資料
  • 端點連結
  • 事件訂閱項目
  • 代管可用區
Google Cloud Managed Service for Apache Kafka
  • 叢集
  • 用戶群組
  • 作業
  • 主題
Parameter Manager
  • 參數版本
  • 參數
Pub/Sub Lite
  • 位置
  • 訂閱項目
  • 主題
網路安全整合服務
  • 攔截部署項目群組
  • 攔截部署項目
  • 攔截端點群組
  • 攔截端點群組關聯
  • 鏡像部署項目群組
  • 鏡像部署項目
  • 鏡像端點群組
  • 鏡像端點群組關聯
Resource Manager
  • 專案
Secret Manager
  • 密鑰版本
  • 密鑰
Spanner
  • 備份
  • 資料庫
  • 執行個體

1 Cloud Key Management Service 會將這類資源做為金鑰環資源的父項。

resource.name 屬性

resource.name 屬性可讓您根據資源名稱的全部或部分設定條件。如需資源名稱格式清單,請參閱「資源名稱格式」。

resource.name 屬性僅適用於特定資源類型,這些類型列於本節的表格中。強烈建議您將條件的適用範圍限制在預期的資源類型。如果角色包含不提供 resource.name 屬性的資源類型權限,請務必確保這些權限不受檢查 resource.name 的條件部分限制。

以下範例說明如何確保這項行為。在本範例中,條件允許存取 Cloud Storage bucket 和物件以外的所有資源類型。相較之下,對於 bucket 和物件,條件只允許存取 bucket example-bucket 及其包含的物件:

(resource.type != 'storage.googleapis.com/Bucket' &&
 resource.type != 'storage.googleapis.com/Object') ||
resource.name.startsWith('projects/_/buckets/example-bucket')

請注意,條件的第一部分會檢查資源是否既非 bucket 也非物件。如果資源類型不同,無論資源名稱為何,整個條件都會評估為 true。

此外,請注意,條件會檢查 resource.type 屬性,而非 resource.service 屬性。檢查 resource.type 屬性有幾個好處:

  • 這項政策會將 resource.name 檢查限制在適當的資源組合。舉例來說,如果您想授予特定名稱 Compute Engine 執行個體的存取權,建議排除 Compute Engine 執行個體以外的所有資源類型。
  • 如果服務日後新增資源類型,這項設定可防止條件範圍變更。

最後請注意,條件會使用 startsWith() 函式評估資源名稱,而不是使用 運算子檢查是否相等。由於條件會查看資源名稱的開頭,因此會比對值區以及該值區中的物件。如果檢查是否相等,則只會比對 bucket。

您無法使用萬用字元 (例如 *) 比對多個資源名稱。請考慮下列替代方案:

  • 使用 extract() 函式從資源名稱擷取值。例如,您可以從 Compute Engine VM 執行個體的資源名稱中擷取專案 ID,然後編寫參照該專案 ID 的條件運算式。

    詳情請參閱本頁的「從屬性擷取值」一節。

  • 使用 startsWith() 或 endsWith() 函式編寫條件,評估資源名稱的開頭或結尾。

您可以在允許政策角色繫結中使用 resource.name 屬性。

屬性變數 resource.name
屬性類型

string

每種資源類型都有特定的資源名稱格式。如需格式清單,請參閱「資源名稱格式」。

支援的函式與運算子 startsWith(), endsWith(), extract(), ,
詳細資料

resource.name 包含要求中目標資源的相對資源名稱。相對資源名稱是不含前置正斜線 (/) 的 URI 路徑。

startsWith() 函式會採用前置字串常值,並根據 resource.name 進行評估。

endsWith() 函式會採用要與 resource.name 進行評估的後置字串常值。

extract() 函式會使用擷取範本擷取 resource.name 的部分內容。詳情請參閱本頁的「從資源名稱擷取值」一節。

和 運算子用於與整個 resource.name 或擷取的 resource.name 部分進行比較。

範例

除非資源名稱識別出名為 secret-bucket-123 的 Cloud Storage bucket,否則會傳回 true:

resource.name != "projects/_/buckets/secret-bucket-123"

如果資源名稱開頭為指定前置字串,則傳回 true,格式為 Compute Engine VM 執行個體使用的格式:

resource.name.startsWith("projects/project-123/zones/us-east1-b/instances/prod-")

如果資源名稱開頭為指定的前置字串,則傳回 true,格式為 Cloud Storage bucket 使用的格式:

resource.name.startsWith("projects/_/buckets/my_bucket/objects/test-object-")

如果資源名稱結尾為指定後置字串,則傳回 true,例如 Cloud Storage 物件的副檔名:

resource.name.endsWith(".jpg")

傳回專案名稱或編號 (如有):

resource.name.extract("projects/{project}/")
支援的資源類型
Agent Registry
  • 技能
  • 技能修訂版本
Apigee
  • API 產品屬性
  • API 產品
  • API Proxy
  • API Proxy 鍵/值對應項目
  • API Proxy 鍵/值對應
  • API Proxy 修訂版本
  • 快取
  • 開發人員應用程式屬性
  • 開發人員應用程式
  • 開發人員屬性
  • 開發人員
  • 環境鍵/值對應項目
  • 環境鍵/值對應
  • 匯出項目
  • 流程掛鉤
  • 金鑰儲存庫別名
  • 金鑰庫
  • 查詢
  • 費率方案
  • 參考資料
  • 共用流程修訂版本
  • 共用流程
  • 目標伺服器
  • 追蹤 (偵錯) 工作階段
Application Integration
  • 驗證設定
  • 執行作業
  • 整合版本
  • 整合
  • 位置
  • 停權
Apigee API 中心
  • API
  • API 作業
  • 定義
  • 部署作業
  • 規格
  • 版本
備份和災難復原服務
  • backup vault
BigQuery
  • 資料集
  • 模型
  • 處理常式
  • Tables
BigQuery Reservation API
  • 作業
  • BI 預留項目
  • 承諾使用資源
  • 位置
  • 預留項目
Bigtable
  • 叢集
  • 執行個體
  • Tables
二進位授權
  • 驗證者
  • 持續驗證設定
  • 政策
Cloud Deploy
  • 自動化執行作業
  • 自動化作業
  • 自訂目標類型
  • 推送管道
  • 工作執行作業
  • 版本
  • 推出作業
  • 目標
Customer Experience Agent Studio
  • 應用程式
  • 作業
Cloud Key Management Service
  • 加密編譯金鑰
  • 加密編譯金鑰版本
  • 金鑰環
Cloud Logging
  • 記錄檔值區
  • 記錄檢視
Cloud NGFW
  • 位址群組
  • 防火牆端點關聯
  • 防火牆端點
  • 安全性設定檔群組
  • 安全性設定檔
Cloud SQL
  • 備份執行作業
  • 執行個體
Cloud Storage
  • bucket
  • 資料夾 (位於已啟用階層命名空間的 bucket)
  • 代管資料夾
  • 物件
Compute Engine
  • 後端服務 (全域和區域)
  • 防火牆
  • 轉送規則 (全域和區域)
  • 圖片
  • 執行個體範本
  • 執行個體
  • 永久磁碟 (區域性和可用區)
  • 快照
  • 目標 HTTP(S) Proxy (全域和區域)
  • 目標安全資料傳輸層 (SSL) Proxy
  • 目標 TCP Proxy
Google Kubernetes Engine
  • 叢集
Firestore
  • 資料庫
Dataform
  • 編譯結果
  • 位置
  • 版本設定
  • 存放區
  • 工作流程設定
  • 工作流程叫用
  • 工作區
Cloud DNS
  • 資源記錄集
Integration Connectors
  • 連線
  • 連線結構定義中繼資料
  • 端點連結
  • 事件訂閱項目
  • 代管可用區
Google Cloud Managed Service for Apache Kafka
  • 叢集
  • 用戶群組
  • 作業
  • 主題
Parameter Manager
  • 參數版本
  • 參數
Pub/Sub Lite
  • 位置
  • 訂閱項目
  • 主題
網路安全整合服務
  • 攔截部署項目群組
  • 攔截部署項目
  • 攔截端點群組
  • 攔截端點群組關聯
  • 鏡像部署項目群組
  • 鏡像部署項目
  • 鏡像端點群組
  • 鏡像端點群組關聯
Secret Manager
  • 密鑰版本
  • 密鑰
Spanner
  • 備份
  • 資料庫
  • 執行個體

資源標記

資源標記函式可讓您根據附加至支援資源的標記,或由這些資源的子系繼承的標記,設定條件。舉例來說,您可以設定條件,只為附加 env: prod 標記的資源授予角色。如要進一步瞭解如何使用標記控管存取權,請參閱「標記和存取控管」。

每個標記都包含一個鍵和一個值。每個鍵和值都有幾種不同的 ID 類型:

  • 永久 ID:全域不重複,且無法重複使用。舉例來說,標記鍵的永久 ID 可能是 tagKeys/123456789012,標記值的永久 ID 可能是 tagValues/567890123456。
  • 簡稱。在定義鍵的專案或組織中,每個鍵的簡稱不得重複,且每個值的簡稱在相關聯的鍵中也不得重複。舉例來說,標記鍵的簡稱可以是 env,標記值的簡稱可以是 prod。
  • 命名空間名稱:在標記索引鍵的簡稱中,加入組織的數字 ID 或專案 ID。舉例來說,為組織建立的標記鍵可能有名稱空間名稱 123456789012/env。如要瞭解如何取得組織 ID,請參閱「取得組織資源 ID」。為專案建立的標記鍵可能具有命名空間名稱 myproject/env。如要瞭解如何取得專案 ID,請參閱「識別專案」。

如需選擇條件中要使用的 ID 類型,請參閱「標記定義和 ID」。

您可以使用標記條件,設定任何資源的存取權條件。這包括具有自身標記的資源,以及從其他資源繼承標記的資源。如要進一步瞭解標記如何透過資源階層沿用,請參閱「標記沿用設定」。

不過, Google Cloud 控制台的某些區域無法辨識具有標記條件的允許政策角色繫結。因此,如果您的角色具有標記條件, Google Cloud 控制台可能會錯誤地禁止您執行特定動作。如果遇到這個問題,請改用其他方法 (例如 gcloud CLI) 執行操作。

您可以在下列項目中使用標記條件:

  • 允許政策角色繫結
  • 拒絕政策拒絕規則

您可以使用下列函式,根據標記設定條件:

函式 說明
resource.hasTagKey(
  keyName: string
)
  bool

檢查要求資源是否具有指定索引鍵的標記。系統會依據命名空間名稱查詢標記鍵。如要使用永久 ID 檢查標記鍵,請使用 resource.hasTagKeyId() 函式。

參數
keyName:標記鍵的命名空間名稱,前置字串為組織的數字 ID 和正斜線。例如:123456789012/env。
範例

如果要求資源含有鍵為 env 的標記,則傳回 true:

resource.hasTagKey('123456789012/env')
resource.hasTagKeyId(
  keyId: string
)
  bool

檢查要求資源是否具有指定索引鍵的標記。系統會依據永久 ID 查詢標記鍵。 如要使用命名空間名稱檢查標記鍵,請使用 resource.hasTagKey() 函式。

參數
keyId:標記鍵的永久 ID。例如:tagKeys/123456789012。
範例

如果要求資源含有鍵為 tagKeys/123456789012 的標記,則傳回 true:

resource.hasTagKeyId('tagKeys/123456789012')
resource.matchTag(
  keyName: string,
  valueShortName: string
)
  bool

檢查要求的資源是否具有指定鍵和值的標記。系統會依據命名空間名稱查詢鍵,並依據簡稱查詢值。如要使用永久 ID 檢查標記鍵和值,請使用 resource.matchTagId() 函式。

參數
  • keyName:標記鍵的命名空間名稱,前置字串為組織的數字 ID 和正斜線。例如:123456789012/env。
  • valueShortName:標記值的簡稱。 例如:prod。
範例

如果要求資源含有鍵為 123456789012/env 且值為 prod 的標記,則傳回 true:

resource.matchTag('123456789012/env', 'prod')
resource.matchTagId(
  keyId: string,
  valueId: string
)
  bool

檢查要求的資源是否具有指定鍵和值的標記。系統會依據鍵和值的永久 ID 進行查詢。如要使用命名空間限定名稱檢查標記索引鍵,並使用簡稱檢查值,請使用 resource.matchTag() 函式。

參數
  • keyId:標記鍵的永久 ID。例如:tagKeys/123456789012。
  • valueId:標記值的永久 ID。例如:tagValues/567890123456。
範例

如果要求資源含有鍵為 tagKeys/123456789012 且值為 tagValues/567890123456 的標記,則傳回 true:

resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456')

主體屬性

主體屬性可讓您根據發出要求的主體編寫條件。您可以使用這些屬性,精細指定要對哪些主體強制執行政策。

您可以在主體存取邊界政策的政策繫結中使用主體屬性。

principal.type 屬性

principal.type 屬性可讓您根據發出要求的主體類型設定條件。舉例來說,您可以為主體存取邊界政策的政策繫結新增條件,確保政策只會對服務帳戶強制執行。

您可以在主體存取邊界政策的政策繫結中使用主體屬性。

屬性變數 principal.type
屬性類型

string

支援的運算子 , , in
支援的主體類型
Google 帳戶
iam.googleapis.com/WorkspaceIdentity
員工身分集區身分
iam.googleapis.com/WorkforcePoolIdentity
workload identity pool 身分
iam.googleapis.com/WorkloadPoolIdentity
服務帳戶
iam.googleapis.com/ServiceAccount
代理身分
iam.googleapis.com/AgentPoolIdentity
範例

如果要求中的主體是服務帳戶,則評估為 true:

principal.type == "iam.googleapis.com/ServiceAccount"
        

如果要求中的主體是代理身分,則評估結果為 true:

principal.type == "iam.googleapis.com/AgentPoolIdentity"
        

如果要求中的主體是 Google Workspace 身分或工作團隊身分集區身分,則評估為 true:

principal.type in ["iam.googleapis.com/WorkspaceIdentity", "iam.googleapis.com/WorkforcePoolIdentity"]
        

principal.subject 屬性

principal.subject 屬性可讓您根據發出要求的主體設定條件。舉例來說,您可以為主體存取邊界政策的政策繫結新增條件,確保只有電子郵件地址結尾為 @example.com 的主體,才會強制執行政策。

如果您在條件中使用 principal.subject 屬性,建議您也使用 principal.type 屬性,控管條件適用的主體類型。這是因為主體 ID 在不同主體類型之間不一定是不重複的。舉例來說,example-user@example.com 識別碼可以識別 Google 帳戶或員工身分集區中的使用者。

除了 principal.subject 屬性之外,您也可以使用 principal.type 屬性,確保條件只會比對具有預期類型的主體。舉例來說,下列運算式會比對電子郵件地址結尾為 @example.com 的 Google 帳戶:

principal.type == 'iam.googleapis.com/WorkspaceIdentity' &&
principal.subject.endsWith('@example.com')

您可以在主體存取邊界政策的政策繫結中使用主體屬性。

屬性變數 principal.subject
屬性類型

string

支援的運算子

, , in, startsWith(), endsWith()

支援的主體
Google 帳戶

ID:使用者的電子郵件地址

範例:alex@example.com

員工身分集區身分

ID:身分的主體屬性值

範例:raha@altostrat.com

workload identity pool 身分

ID:身分的主體屬性值

服務帳戶

ID:服務帳戶的電子郵件地址

範例:my-service-account@my-project.iam.gserviceaccount.com

代理身分

ID:代理身分,開頭為 resources/

範例: resources/aiplatform/projects/9876543210/locations/us-central1/reasoningEngines/my-test-agent

範例

如果要求中的主體結尾為 @example.com,則評估結果為 true:

principal.subject.endsWith("@example.com")
        

如果要求中的主體開頭為 resources/aiplatform,則會評估為 true,這適用於使用 Vertex AI 平台的代理身分:

principal.subject.startsWith("resources/aiplatform/")
        

如果要求中的主體是 example-service-account@example-project.iam.gserviceaccount.com,則評估結果為 true:

principal.subject == "example-service-account@example-project.iam.gserviceaccount.com"
        

要求屬性

要求屬性可讓您建立條件,評估要求的詳細資料,例如存取層級、日期和時間、目的地 IP 位址和通訊埠 (適用於 IAP TCP 建立通道),或預期網址的路徑/主機 (適用於 IAP 和 Cloud Run)。

存取層級屬性

使用者可透過存取層級屬性設定條件,要求必須符合一或多個存取層級才能獲得授權。您可以在允許政策角色繫結中使用存取層級屬性。

存取層級屬性衍生自要求的屬性,例如來源 IP 位址、裝置屬性和時段。舉例來說,名為 fullyTrusted 的存取層級可能會要求提出要求的裝置必須由公司擁有,且設有螢幕鎖定。onNetwork 存取層級可能會要求提出要求的裝置來自特定 IP 位址範圍。如要進一步瞭解存取層級,請參閱 Access Context Manager 說明文件。

只有在使用 Identity-Aware Proxy 存取通道執行個體,或存取在 App Engine 或 Compute Engine 後端服務上執行的網頁應用程式時,才能使用存取層級屬性。更具體來說,只有在要求檢查下列任一權限時,才能使用存取層級屬性:

  • iap.tunnelInstances.accessViaIAP
  • iap.webServiceVersions.accessViaIAP

有條件地授予下列預先定義角色時,可以使用存取層級屬性:

  • 受 IAP 保護的通道使用者 (roles/iap.tunnelResourceAccessor)

    包含單一權限:iap.tunnelInstances.accessViaIAP。

  • 受 IAP 保護的網頁應用程式使用者 (roles/iap.httpsResourceAccessor)

    包含單一權限:iap.webServiceVersions.accessViaIAP。

您也可以使用存取層級屬性,有條件地授予包含這些權限的自訂角色。自訂角色不得包含任何其他權限。

request.auth.access_levels 屬性

屬性變數 request.auth.access_levels
屬性類型 list<string>
支援的運算子 in
詳細資料

如要檢查要求是否符合特定存取層級,請使用 in 運算子:

ACCESS_LEVEL_FULL_NAME in request.auth.access_levels

存取層級的全名格式如下:

accessPolicies/POLICY_NUMBER/accessLevels/ACCESS_LEVEL
範例

如果要求符合 CorpNet 存取層級,則傳回 true:

"accessPolicies/199923665455/accessLevels/CorpNet"
    in request.auth.access_levels
支援的資源類型 適用於使用 Identity-Aware Proxy 存取通道執行個體、通道目的地群組、在 Google Cloud 負載平衡上執行的網頁應用程式,或在 App Engine 上執行的網頁應用程式的要求。

API 屬性

API 屬性可協助您根據特定Google Cloud API 或服務提供的資料管理存取權。您可以在允許政策角色繫結中使用 API 屬性。

舉例來說,當您使用 Cloud Storage 列出 bucket 中的物件時,可以在要求中使用 prefix 參數,只納入名稱開頭為特定前置字串的物件。如果您使用憑證存取權邊界縮減短期憑證的範圍,可以建立憑證存取權邊界,透過檢查 API 屬性 storage.googleapis.com/objectListPrefix,限制列出物件的權限。這個 API 屬性包含要求中 prefix 參數的值。

如需在條件中使用 API 屬性的範例,請參閱下列頁面:

並非所有服務都能辨識 API 屬性。下列各節說明哪些服務可辨識各項 API 屬性。

API 屬性函式

您可以使用下列函式處理 API 屬性:

函式 說明
api.getAttribute(
  attributeName: string,
  defaultValue: V<T>
)
  V<T>

取得要求的 API 屬性。

參數
  • attributeName:要取得的 API 屬性。如需支援的值,請參閱本頁的 Cloud Storage API 屬性和 IAM API 屬性。
  • defaultValue:如果 API 屬性無法使用,則使用預設值 (V)。V 的值屬於 T 類型,其中 T 與 API 屬性的值屬於相同類型。舉例來說,如果 API 屬性的值是字串,您可以使用空字串或預留位置字串,例如 undefined。

範例

傳回下列其中一項:

  • 如果是授予或撤銷角色的要求,則會傳回要求修改的角色清單。
  • 如果是其他類型的要求,則會傳回空白清單。
api.getAttribute("iam.googleapis.com/modifiedGrantsByRole", [])
hasOnly(
  items: list<T>
)
  bool

檢查清單是否僅包含允許的項目,或這些項目的子集。您可以對 api.getAttribute() 傳回的清單呼叫函式。

參數
items:類型為 T 的項目清單。每個項目都是 API 屬性可包含的值。
範例

檢查要求是否會授予或撤銷 Pub/Sub 編輯者 (roles/pubsub.editor) 或 Pub/Sub 發布者 (roles/pubsub.publisher) 以外的角色:

api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', [])
    .hasOnly(['roles/pubsub.editor', 'roles/pubsub.publisher'])

以下是不同要求值的結果:

已授予/撤銷的角色 結果
無

true

如果未修改任何角色,api.getAttribute() 會傳回預設值。這個屬性的預設值一律為空白清單。根據定義,空白清單不含不在許可清單中的值。

roles/pubsub.editor

true

角色已列入許可清單。

roles/pubsub.editor
roles/pubsub.publisher

true

這兩個角色都在許可清單中。

roles/billing.admin

false

角色不在許可清單中。

roles/billing.admin
roles/pubsub.editor

false

其中一個角色在許可清單中,另一個則不在。

Cloud Storage API 屬性

Cloud Storage 提供下列 API 屬性。

屬性變數 storage.googleapis.com/objectListPrefix
屬性類型 string
詳細資料

如果是列出 bucket 中物件的要求,則包含要求中 prefix 參數的值。如果要求省略 prefix 參數,則不會定義屬性。

如果是其他類型的要求,則不會定義這個屬性。

可辨識這項屬性的服務 Cloud Storage

IAM API 屬性

IAM 提供下列 API 屬性:

屬性變數 iam.googleapis.com/modifiedGrantsByRole
屬性類型 list<string>
詳細資料

如果要求設定資源的允許政策,這項屬性會包含要求修改的角色繫結中的角色名稱。

如果是其他類型的要求,則不會定義這個屬性。

接受這項屬性的資源類型

下列資源類型接受允許政策中含有 modifiedGrantsByRole 屬性的條件:

  • 專案
  • 資料夾
  • 組織
可辨識這項屬性的服務

下列服務可辨識 modifiedGrantsByRole 屬性:

  • API Gateway
  • AutoML
  • 憑證授權單位服務
  • Cloud Run functions
  • Cloud Healthcare API
  • Cloud Key Management Service
  • Cloud Run
  • Cloud Runtime Configuration API
  • Cloud Storage
  • Compute Engine
  • Artifact Analysis
  • Managed Service for Apache Spark
  • Earth Engine
  • 遊戲伺服器
  • Identity and Access Management
  • Identity-Aware Proxy
  • Managed Service for Microsoft Active Directory
  • 使用者自行管理的筆記本
  • Resource Manager
  • Secret Manager
  • 服務管理

MCP API 屬性

Google Cloud 提供下列屬性,用於控管 MCP 伺服器的存取權:

屬性變數 mcp.googleapis.com/tool.name
屬性類型 string
詳細資料

如果要求存取 MCP 工具,這項屬性會包含工具名稱。

舉例來說,如果要求存取 BigQuery MCP 工具 list_dataset_ids,則要求的 tool.name 屬性為 list_dataset_ids。

如果是其他類型的要求,則不會定義這項屬性。

可辨識這項屬性的服務 所有具備 MCP 伺服器的 Google Cloud 服務都能辨識這個 API 屬性。如要查看提供 MCP 伺服器的服務清單,請參閱「支援的產品」。
屬性變數 mcp.googleapis.com/tool.isReadOnly
屬性類型 boolean
詳細資料

對於存取 MCP 工具的要求,這項屬性會指出該工具是否為唯讀工具。

如果是其他類型的要求,則不會定義這項屬性。

可辨識這項屬性的服務 所有具備 MCP 伺服器的 Google Cloud 服務都能辨識這個 API 屬性。如要查看提供 MCP 伺服器的服務清單,請參閱「支援的產品」。

Vertex AI Agent Engine API 屬性

Vertex AI Agent Engine 為記憶庫和工作階段脈絡管理服務提供下列 API 屬性:

屬性變數 aiplatform.googleapis.com/memoryScope
屬性類型 map<string, string>
詳細資料

如果要求存取或修改記憶庫資源,則包含記憶體中 scope 欄位的值。

如果是其他類型的要求,則不會定義這個屬性。

可辨識這項屬性的服務 Vertex AI Agent Engine
屬性變數 aiplatform.googleapis.com/sessionUserId
屬性類型 string
詳細資料

如果是存取或修改工作階段資源的要求,則會包含工作階段中 user_id 欄位的值。

如果是其他類型的要求,則不會定義這個屬性。

可辨識這項屬性的服務 Vertex AI Agent Engine

日期/時間屬性

日期/時間屬性可用於設定 Google Cloud 資源的存取權,包括可到期、已排定或限時存取權。您可以在允許政策角色繫結中使用日期/時間屬性。

所有 Google Cloud 服務和資源類型都支援這項屬性。如要瞭解如何將日期/時間條件套用至不直接支援這些條件的資源,請參閱本頁的「支援繼承條件」一節。

request.time 屬性包含要求的時間戳記。您可以將這個時間戳記與其他時間戳記或時間長度進行比較。

以下各節列出可用來根據時間戳記和時間長度設定條件的函式。

建立、比較及修改時間戳記和時間長度

函式或運算子 說明
date(
  value: string
)
  Timestamp

將日期從 string 轉換為 Timestamp。

參數
value:格式為 YYYY-MM-DD 的日期,其中 YYYY 是年份,MM 是兩位數的月份,DD 則是兩位數的日期。產生的 Timestamp 包含指定日期和時間 00:00:00.000 UTC。
範例

建立代表日期 2023-02-01 和時間 00:00:00.000 UTC 的 Timestamp:

date("2023-02-01")
duration(
  value: string
)
  Duration

將時間長度從 string 轉換為 Duration。

參數
value:Duration (以秒為單位),後面加上 s。
範例

建立代表 1.5 分鐘的時間長度:

duration("90s")

建立代表 30 天的時間長度:

duration("2592000s")
timestamp(
  value: string
)
  Timestamp

將 string 轉換為 Timestamp。

參數

value:符合 RFC 3339 的世界標準時間時間戳記。

範例

建立代表 2023 年 4 月 12 日 23:20:50.52 (世界標準時間) 的時間戳記:

timestamp("2023-04-12T23:20:50.52Z")
, , ,

比較兩個 Timestamp 值。

範例

如果要求時間「早於」2022 年 4 月 12 日 00:00:00 (世界標準時間),則傳回 true:

request.time < timestamp("2022-04-12T00:00:00.00Z")

如果要求時間「早於或等於」2022 年 4 月 12 日 00:00:00 (世界標準時間),則傳回 true:

request.time <= timestamp("2022-04-12T00:00:00.00Z")

如果要求時間「晚於」2022 年 4 月 12 日 00:00:00 UTC,則傳回 true:

request.time > timestamp("2022-04-12T00:00:00.00Z")

如果要求時間晚於或等於世界標準時間 2022 年 4 月 12 日 00:00:00,則傳回 true:

request.time >= timestamp("2022-04-12T00:00:00.00Z")
  • timestamp + duration   Timestamp
  • timestamp - duration   Timestamp

在 Timestamp 中加上或減去 Duration。

範例

傳回 2024-04-12 世界標準時間 14:30:00 之後 30 分鐘的 Timestamp:

timestamp("2024-04-12T14:30:00.00Z") + duration("1800s")

傳回 2024-04-12 14:30:00 (世界標準時間) 60 天前的 Timestamp:

timestamp("2024-04-12T14:30:00.00Z") - duration("5184000s")

從時間戳記擷取資訊

本節中的函式可讓您從時間戳記中擷取資訊,例如時間戳記所在的星期幾。

在 IAM 條件中,所有時間戳記均採用世界標準時間。不過,您可能想根據不同時區擷取資訊。舉例來說,您可能想知道某個世界標準時間戳記是否落在德國柏林時區的星期一。

如要指定其他時區,請將時區傳遞至函式。請使用 IETF 時區資料庫中的名稱或世界標準時間偏移。舉例來說,您可以使用 Europe/Berlin 或 +01:00 代表歐洲中部時間 (CET)。

支援的函式與運算子 說明
Timestamp.getDate(
  timeZone: string
)
  int

從 Timestamp 取得當月日期。這個值使用以 1 為基底的索引,當月第一天為 1。

參數
timeZone:計算結果時使用的時區。預設為世界標準時間。
範例

如果要求是在 UTC 時間每月 15 日後傳送,則傳回 true:

request.time.getDate() > 15
Timestamp.getDayOfMonth(
  timeZone: string
)
  int

從 Timestamp 取得當月日期。這個值採用以零為基準的索引,當月第一天為 0。

參數
timeZone:計算結果時使用的時區。預設為世界標準時間。
範例

如果要求是在 UTC 時間每月 15 日後傳送,則傳回 true:

request.time.getDayOfMonth() > 14
Timestamp.getDayOfWeek(
  timeZone: string
)
  int

從 Timestamp 取得星期幾。這個值使用以零為基準的索引,例如星期日為 0。

參數
timeZone:計算結果時使用的時區。預設為世界標準時間。
範例

如果要求是在德國柏林時間週一至週五之間傳送,則傳回 true:

request.time.getDayOfWeek("Europe/Berlin") > 0 &&
    request.time.getDayOfWeek("Europe/Berlin") < 6
Timestamp.getDayOfYear(
  timeZone: string
)
  int

從 Timestamp 取得年度天次。這個值使用從零開始的索引,因此一年的第一天是 0。

參數
timeZone:計算結果時使用的時區。預設為世界標準時間。
範例

如果要求是在美國加州山景城一年的前 5 天內傳送,則傳回 true:

request.time.getDayOfYear("America/Los_Angeles") >= 0 &&
    request.time.getDayOfYear("America/Los_Angeles") < 5
Timestamp.getFullYear(
  timeZone: string
)
  int

從 Timestamp 取得年份。

參數
timeZone:計算結果時使用的時區。預設為世界標準時間。
範例

如果要求是在 2023 年於美國加州山景城傳送,則傳回 true:

request.time.getFullYear("America/Los_Angeles") == 2023

如果要求是在 2022 年 (世界標準時間) 傳送,則傳回 true:

request.time.getFullYear() == 2022
Timestamp.getHours(
  timeZone: string
)
  int

從 Timestamp 取得當天的小時。這個值使用以零為基準的索引,範圍從 0 到 23。

您可以將這項函式與 getDayofWeek() 搭配使用,只在您管轄區的許可工作時段內授予存取權。

參數
timeZone:計算結果時使用的時區。預設為世界標準時間。
範例

如果是在德國柏林平日的 09:00 (上午 9:00) 到 17:00 (下午 5:00) 之間傳送要求,則傳回 true:

request.time.getDayOfWeek("Europe/Berlin") >= 1 &&
    request.time.getDayOfWeek("Europe/Berlin") <= 5 &&
    request.time.getHours("Europe/Berlin") >= 9 &&
    request.time.getHours("Europe/Berlin") <= 17
Timestamp.getMilliseconds(
  timeZone: string
)
  int

從 Timestamp 取得毫秒數。這個值使用以零為基準的索引,範圍從 0 到 999。

參數
timeZone:計算結果時使用的時區。預設為世界標準時間。
Timestamp.getMinutes(
  timeZone: string
)
  int

從 Timestamp 取得整點過後的分鐘數。這個值使用以零為基準的索引,範圍介於 0 到 59 之間。

參數
timeZone:計算結果時使用的時區。預設為世界標準時間。
範例

如果要求是在德國柏林時間 09:30 (上午 9:30) 或之後傳送,則傳回 true:

request.time.getHours("Europe/Berlin") >= 9 &&
    request.time.getMinutes("Europe/Berlin") >= 30
Timestamp.getMonth(
  timeZone: string
)
  int

從 Timestamp 取得月份。這個值使用以零為基準的索引,範圍從 0 到 11。

參數
timeZone:計算結果時使用的時區。預設為世界標準時間。
範例

如果是在 4 月於美國加州山景城傳送要求,則傳回 true:

request.time.getMonth("America/Los_Angeles") == 3
Timestamp.getSeconds(
  timeZone: string
)
  int

從 Timestamp 取得秒數。這個值使用以零為基準的索引,範圍介於 0 到 59 之間。

參數
timeZone:計算結果時使用的時區。預設為世界標準時間。
, , ,

比較這個表格中兩個函式的輸出內容。

目的地 IP/通訊埠屬性

使用者可透過目的地 IP/通訊埠屬性,根據要求的內部目的地 IP 位址和通訊埠管理存取權。您可以在允許政策角色繫結中使用目的地 IP/通訊埠屬性。

舉例來說,Compute Engine VM 執行個體可能會將外部 IP 位址和通訊埠 132.168.42.21:3001 對應至內部 IP 位址和通訊埠 10.0.0.1:2300,以供一般用途使用。相較之下,內部 IP 位址和通訊埠 10.0.0.1:22 可能僅供內部管理使用。您可以使用目的地 IP/通訊埠屬性,根據內部 IP 位址和通訊埠授予不同程度的存取權。

如要進一步瞭解 TCP 轉送,請參閱 Identity-Aware Proxy 說明文件。

destination.ip 屬性

屬性變數 destination.ip
屬性類型 string
支援的運算子 ,
詳細資料

變數 destination.ip 會以 IPv4 格式識別內部 IP 位址。

範例

如果目的地 IP 位址為 10.0.0.1,則傳回 true:

destination.ip == "10.0.0.1"

除非目的地 IP 位址為 10.0.0.1,否則傳回 true:

destination.ip != "10.0.0.1"
支援的資源類型 適用於使用 Identity-Aware Proxy 存取通道執行個體的要求

destination.port 屬性

屬性變數 destination.port
屬性類型 int
支援的運算子 , , , , ,
詳細資料

變數 destination.port 會識別內部 TCP 通訊埠編號。

範例

如果目的地通訊埠為 21,則傳回 true:

destination.port == 21

如果目的地通訊埠小於 3001,則傳回 true:

destination.port < 3001
支援的資源類型 適用於使用 Identity-Aware Proxy 存取通道執行個體的要求

轉送規則屬性

轉送規則屬性可讓您指定主體可以建立的轉送規則類型。舉例來說,您可以允許主體為內部 Google Cloud負載平衡器建立轉送規則,處理源自 Google Cloud 網路內部的流量,但不允許為外部 Google Cloud負載平衡器建立轉送規則,處理源自網際網路的流量。您可以在允許政策角色繫結中使用轉送規則屬性。

在 Cloud Load Balancing 中,轉送規則屬性不會影響建立 Google Cloud 負載平衡器其他元件的能力,例如後端服務、目標 Proxy、健康狀態檢查和網址對應。

支援的函式

函式 說明
compute.isForwardingRuleCreationOperation()   bool

檢查要求是否正在建立轉送規則。

範例
查看 compute.matchLoadBalancingSchemes() 的範例。
compute.matchLoadBalancingSchemes(
  schemes: list<string>
)
  bool

檢查要求是否會影響其中一種指定的負載平衡配置類型。如要查看各個負載平衡架構的 ID 和更多詳細資料,請參閱「在 Google Cloud 負載平衡器上使用 IAM 條件」。

參數
schemes:要求可影響的負載平衡配置。
範例

傳回下列其中一項:

  • 如果要求「不是」建立轉送規則,則傳回 true。
  • 如果要求「是」建立轉送規則,則只有在轉送規則影響 INTERNAL、INTERNAL_MANAGED 或 INTERNAL_SELF_MANAGED 負載平衡配置時,才會傳回 true。
!compute.isForwardingRuleCreationOperation() || (
  compute.isForwardingRuleCreationOperation() &&
  compute.matchLoadBalancingSchemes([
    'INTERNAL', 'INTERNAL_MANAGED', 'INTERNAL_SELF_MANAGED'
  ])
)

支援的資源類型

建立下列資源類型的要求可使用這項屬性:

服務 資源類型
Cloud Load Balancing 轉送規則
Cloud VPN 轉送規則 (全域和區域)
Compute Engine 轉送規則 (用於通訊協定轉送)
Cloud Service Mesh1 轉送規則

1 使用 Compute Engine 的資源屬性。

網址路徑/主機屬性

網址路徑/主機屬性可讓使用者根據要求的網址路徑和主機管理存取權。舉例來說,條件可以指定 https://example.com 是使用者一般網域可存取的主要應用程式,而 https://hr.example.com/admin 則用於存取應用程式中的頁面,且只有人力資源管理員可以存取這個部分。

您可以在允許政策角色繫結中使用網址路徑/主機屬性。

request.path 屬性

屬性變數 request.path
屬性類型 string
支援的函式與運算子 , startsWith(), endsWith()
詳細資料 不建議對這項屬性使用 運算子。請檢查屬性的前置字元 (如 !request.path.startsWith("/admin") 所示),而非檢查不相等 (如 request.path != "/admin" 所示)。勾選前置字元後,系統也會保護 /admin 階層中的網址路徑,例如 /admin/payroll/。
範例

如果要求路徑等於指定的網址路徑,則傳回 true:

request.path == "/admin"
request.path == "/admin/payroll"

如果要求路徑開頭為指定的網址路徑,則傳回 true:

request.path.startsWith("/admin")

如果要求路徑結尾是指定的網址路徑,則傳回 true:

request.path.endsWith("/payroll.js")
支援的資源類型
  • Identity-Aware Proxy 應用程式服務版本 (App Engine):適用於使用 Identity-Aware Proxy 存取在 App Engine 或 Compute Engine 上執行的網頁應用程式的要求
  • Cloud Run 服務

request.host 屬性

屬性變數 request.host
屬性類型 string
支援的函式與運算子 , endsWith()
詳細資料 不建議搭配這項屬性使用 .startsWith() 函式或 運算子。這些函式和運算子可能會產生非預期的結果。
範例

如果主機名稱等於指定值,則傳回 true:

request.host == "www.example.com"
request.host == "hr.example.com"

如果主機名稱結尾為指定值,則傳回 true:

request.host.endsWith("example.com")
支援的資源類型
  • Identity-Aware Proxy 應用程式服務版本 (App Engine):適用於使用 Identity-Aware Proxy 存取應用程式服務版本的要求。
  • Cloud Run 服務

從屬性擷取值

您可以使用 extract() 函式從屬性中擷取值。例如,您可以擷取資源名稱的任意部分,然後編寫參照擷取文字的條件運算式。

如要使用 extract() 函式,請提供擷取範本,指定要擷取的屬性部分。舉例來說,如要從 Compute Engine VM 執行個體的資源名稱中擷取專案 ID,可以使用 projects/{project}/ 範本。

擷取範本包含下列部分:

  • 識別碼:以大括號括住,用於識別要擷取的子字串。

    請選擇簡短、有意義的 ID,清楚說明要擷取的值。您可以使用 A 到 Z 的大小寫英文字母、數字和底線 (_)。

    在範本 projects/{project}/ 中,ID 為 project。

  • 選用:前置字串,必須出現在要擷取的子字串之前。

    在範本 projects/{project}/ 中,前置字串為 projects/。

  • 選用:後置字串,必須出現在要擷取的子字串之後。

    在範本 projects/{project}/ 中,尾碼為 /。

extract() 函式會根據擷取範本是否有前置字元、後置字元或兩者皆有,擷取屬性的不同部分:

有前置字元 有後置字串 擷取的值
— — 整個屬性
— 前置字串首次出現後的字元,如果前置字串後沒有字元,則為空字串
— 第一次出現後置字串之前的字元,如果後置字串之前沒有字元,則為空字串
前置字元首次出現與後置字元首次出現之間的所有字元,如果前置字元與後置字元之間沒有任何字元,則為空白字串

如果您指定的前置字元或後置字元未出現在屬性中,或者後置字元僅出現在前置字元之前,則 extract() 函式會傳回空字串。

以下範例顯示多個不同擷取範本的輸出內容。這些範例參照 Cloud Storage 物件的資源名稱 projects/_/buckets/acme-orders-aaa/objects/data_lake/orders/order_date=2019-11-03/aef87g87ae0876:

擷取範本 輸出內容
/order_date={date}/ 2019-11-03
buckets/{name}/ acme-orders-aaa
/orders/{empty}order_date 清空「string」
{start}/objects/data_lake projects/_/buckets/acme-orders-aaa
orders/{end} order_date=2019-11-03/aef87g87ae0876
{all} projects/_/buckets/acme-orders-aaa/objects/data_lake/orders/order_date=2019-11-03/aef87g87ae0876
/orders/{none}/order_date= 清空「string」
/orders/order_date=2019-11-03/{id}/data_lake 清空「string」

如果擷取代表日期的字串,可以使用本頁的日期/時間函式和運算子,將擷取的值轉換為 Timestamp。如需範例,請參閱「依據資源設定存取權」。