IAM Conditions 的屬性參考資料

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

支援的條件屬性

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

資源屬性

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

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

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

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

  • BigQuery
  • BigQuery Reservation API
  • Cloud Key Management Service
  • Cloud Logging
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Cloud DNS
  • Google Kubernetes Engine
  • Cloud NGFW
  • Resource Manager
資源類型屬性

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

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

  • BigQuery
  • BigQuery Reservation API
  • Cloud Key Management Service
  • Cloud Logging
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Cloud DNS
  • Google Kubernetes Engine
  • Cloud NGFW
  • Resource Manager
資源名稱屬性

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

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

  • BigQuery
  • BigQuery Reservation API
  • Cloud Key Management Service
  • Cloud Logging
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Cloud DNS
  • Google Kubernetes Engine
  • Cloud NGFW
資源標記

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

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

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

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

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

要求屬性

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

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

API 屬性

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

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

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

日期/時間屬性

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

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

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

轉送規則屬性

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

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

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

支援繼承條件

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

在組織、資料夾或專案層級使用屬性時,請注意,大多數屬性僅適用於特定資源類型。如果條件的某部分使用資源不支援的屬性,則該部分條件一律不會解讀為授予存取權。舉例來說,條件 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"
支援的服務
  • BigQuery
  • BigQuery Reservation API
  • Cloud Key Management Service
  • Cloud Logging
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Cloud DNS
  • Google Kubernetes Engine
  • Cloud NGFW
  • Resource Manager

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")
支援的資源類型
BigQuery
  • 資料集
  • 模型
  • 處理常式
  • Tables
BigQuery Reservation API
  • 作業
  • BI 預留項目
  • 承諾使用資源
  • 位置
  • 預留項目
Cloud Key Management Service
  • 加密編譯金鑰版本
  • 加密編譯金鑰
  • 金鑰環
  • 位置
Cloud Logging
  • 記錄檔值區
  • 記錄檢視
Cloud NGFW
  • 位址群組
  • 防火牆端點關聯
  • 防火牆端點
  • 安全性設定檔群組
  • 安全性設定檔
Cloud SQL
  • 備份執行作業
  • 執行個體
Cloud Storage
  • bucket
  • 資料夾 (位於已啟用階層命名空間的 bucket)
  • 代管資料夾
  • 物件
Compute Engine
  • 後端服務 (全域和區域)
  • 防火牆
  • 轉送規則 (全域和區域)
  • 圖片
  • 執行個體範本
  • 執行個體
  • 永久磁碟 (區域性和可用區)
  • 快照
  • 目標 HTTP(S) Proxy (全域和區域)
  • 目標安全資料傳輸層 (SSL) Proxy
  • 目標 TCP Proxy
Cloud DNS
  • 資源記錄集
Google Cloud
  • 位置1
Google Kubernetes Engine
  • 叢集
Firestore
  • 資料庫
Resource Manager
  • 專案

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}/")
支援的資源類型
BigQuery
  • 資料集
  • 模型
  • 處理常式
  • Tables
BigQuery Reservation API
  • 作業
  • BI 預留項目
  • 承諾使用資源
  • 位置
  • 預留項目
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
  • 叢集
Cloud DNS
  • 資源記錄集

資源標記

資源標記函式可讓您根據附加至支援資源的標記,或由這些資源的子系繼承的標記,設定條件。舉例來說,您可以設定條件,只為附加 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')

要求屬性

要求屬性可讓您建立條件,評估要求的詳細資料,例如要求修改的角色或要求的日期和時間。

API 屬性

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

如需在條件中使用 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

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

    IAM API 屬性

    IAM 提供下列 API 屬性:

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

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

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

    接受這項屬性的資源類型

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

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

    下列服務可辨識 modifiedGrantsByRole 屬性:

    • Cloud Storage
    • Compute Engine
    • Identity and Access Management
    • Resource Manager

    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:計算結果時使用的時區。預設為世界標準時間。
    , , ,

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

    轉送規則屬性

    轉送規則屬性可讓您指定主體可以建立的轉送規則類型。舉例來說,您可以允許主體為內部 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 的資源屬性。

    從屬性擷取值

    您可以使用 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。如需範例,請參閱「依據資源設定存取權」。