本文說明條件運算式中支援的屬性。
支援的條件屬性
下列各節會摘要說明支援的屬性,並指出哪些Google Cloud 服務可辨識各項屬性。
資源屬性
下列屬性與要求主體的資源相關。
屬性 | 使用摘要 | 支援的 Google Cloud 服務 |
---|---|---|
資源服務 屬性 |
根據 Google Cloud 使用的服務管理存取權。 您可以在允許政策角色繫結中使用這項屬性。 |
|
資源類型屬性 |
根據資源類型管理存取權。 您可以在允許政策角色繫結中使用這項屬性。 |
|
資源名稱屬性 |
依資源名稱管理存取權。 您可以在允許政策角色繫結中使用這項屬性。 |
|
資源標記 |
根據附加至資源的標記管理存取權。 你可以在下列位置使用這項屬性:
|
所有 Google Cloud 服務 (請參閱「支援的條件繼承」) |
如要進一步瞭解資源屬性,請參閱本頁的「資源屬性」一節。
主要屬性
下列屬性與提出要求的主體有關。
屬性 | 使用摘要 | 支援的主體類型 |
---|---|---|
根據要求中的主體類型套用政策。 您可以在主體存取邊界政策的政策繫結中使用這項屬性。 |
|
|
根據要求中主體的 ID 套用政策。 您可以在主體存取邊界政策的政策繫結中使用這項屬性。 |
|
如要進一步瞭解主體屬性,請參閱本頁面的「主體屬性」一節。
要求屬性
下列屬性與要求的詳細資料相關。
屬性 | 使用摘要 | 支援的 Google Cloud 服務 |
---|---|---|
根據特定存取層級管理存取權。
存取層級是一種計算屬性,以要求和要求者的原始屬性為依據,例如原始 IP 位址、裝置屬性和時段。舉例來說,存取層級可能會規定提出要求的裝置須來自特定的 IP 位址範圍。 您可以在允許政策角色繫結中使用這項屬性。 |
Identity-Aware Proxy |
|
根據特定 Google CloudAPI 或服務提供的資料管理存取權。 您可以在允許政策角色繫結中使用這項屬性。 |
|
|
為 Google Cloud 資源設定有期限、排程或限時等存取方式。 您可以在允許政策角色繫結中使用這些屬性。 |
所有 Google Cloud 服務 (請參閱「支援的條件繼承」) |
|
根據要求的目的地 IP 位址和/或通訊埠管理存取權。舉例來說,Compute Engine 虛擬機器 (VM) 執行個體可能會公開外部 IP (如 用於 Identity-Aware Proxy TCP 轉送功能。 您可以在允許政策角色繫結中使用這些屬性。 |
Identity-Aware Proxy |
|
指定主體可建立的轉送規則類型。舉例來說,您可以允許主體為內部 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 |
---|---|
屬性類型 |
如需支援的值清單,請參閱資源服務值。 |
支援的運算子 | , |
詳細資料 |
在條件中使用 resource.type 屬性時,請檢查屬性是否完全相等 ( ) 或完全不相等 ( )。其他比較 (例如檢查前置字元或後置字元) 可能會產生非預期的結果。
|
範例 |
傳回 Compute Engine 資源的 resource.service == "compute.googleapis.com" |
支援的服務 |
|
resource.type 屬性
resource.type
屬性可讓您根據資源類型設定條件。舉例來說,您可以設定條件,限制使用者存取 storage.googleapis.com/Object
類型的資源。如需支援的值清單,請參閱資源類型值。
如果條件使用 resource.name
屬性,強烈建議您使用 resource.type
屬性,控管條件適用的資源類型。詳情請參閱本頁的resource.name
屬性。
您可以在允許政策角色繫結中使用 resource.type
屬性。
屬性變數 | resource.type |
||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
屬性類型 |
如需支援的值清單,請參閱資源類型值。 |
||||||||||||||||||||||||||||||||||||||||||||||||||
支援的運算子 | , |
||||||||||||||||||||||||||||||||||||||||||||||||||
詳細資料 |
在條件中使用 resource.type 屬性時,請檢查屬性是否完全相等 ( ) 或完全不相等 ( )。其他比較方式 (例如檢查前置字元或後置字元) 可能會產生非預期的結果。 |
||||||||||||||||||||||||||||||||||||||||||||||||||
範例 |
除非資源是 Compute Engine 映像檔,否則會傳回 resource.type != "compute.googleapis.com/Image"
只有在資源是 Compute Engine 映像檔或永久磁碟時,才會傳回 (resource.type == "compute.googleapis.com/Image" || resource.type == "compute.googleapis.com/Disk") |
||||||||||||||||||||||||||||||||||||||||||||||||||
支援的資源類型 |
1 Cloud Key Management Service 會將這個資源類型做為金鑰環資源的父項。 |
resource.name 屬性
resource.name
屬性可讓您根據資源名稱的全部或部分內容設定條件。如需資源名稱格式清單,請參閱「資源名稱格式」。
resource.name
屬性僅適用於特定資源類型,詳情請參閱本節表格。強烈建議您將條件的適用範圍限制在預期資源類型。如果角色包含不提供 resource.name
屬性的資源類型權限,請確保這些權限不受條件中檢查 resource.name
的部分限制。
以下範例說明如何確保這種行為。在本例中,條件允許存取所有資源類型,但 Cloud Storage 值區和物件除外。相較之下,對於值區和物件,條件只允許存取值區 example-bucket
和其中包含的物件:
(resource.type != 'storage.googleapis.com/Bucket' &&
resource.type != 'storage.googleapis.com/Object') ||
resource.name.startsWith('projects/_/buckets/example-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 |
||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
屬性類型 |
每種資源類型都有專屬的資源名稱格式。如需格式清單,請參閱資源名稱格式。 |
||||||||||||||||||||||||||||||||||||||||||||||
支援的函式與運算子 |
startsWith(), endsWith(), extract(),
, |
||||||||||||||||||||||||||||||||||||||||||||||
詳細資料 |
|
||||||||||||||||||||||||||||||||||||||||||||||
範例 |
除非資源名稱識別名為 resource.name != "projects/_/buckets/secret-bucket-123"
如果資源名稱開頭為指定前置字元,則傳回 resource.name.startsWith("projects/project-123/zones/us-east1-b/instances/prod-")
如果資源名稱開頭為指定前置字串,則傳回 resource.name.startsWith("projects/_/buckets/my_bucket/objects/test-object-")
如果資源名稱結尾為指定的後置字串,則傳回 resource.name.endsWith(".jpg") 如果專案名稱或編號存在,則傳回該名稱或編號: resource.name.extract("projects/{project}/") |
||||||||||||||||||||||||||||||||||||||||||||||
支援的資源類型 |
|
資源標記
資源標記函式可讓您根據附加至支援資源的標記,或這些資源後代繼承的標記,設定條件。舉例來說,您可以設定條件,只針對附加 env: prod
標記的資源授予角色。如要進一步瞭解如何使用標記控管存取權,請參閱「標記和存取權控管」。
每個標記都包含鍵和值。每個鍵和值都有幾種不同類型的 ID:
-
永久 ID:全域不重複,且不得重複使用。舉例來說,標記鍵可能具有永久 ID
tagKeys/123456789012
,標記值可能具有永久 IDtagValues/567890123456
。 -
簡稱。每個鍵的簡稱在定義鍵的專案或機構中不得重複,且每個值的簡稱在相關聯的鍵中不得重複。舉例來說,標記鍵的簡稱可以是
env
,標記值的簡稱可以是prod
。 -
命名空間名稱:將機構的數字 ID 或專案 ID 新增至標記鍵的簡稱。舉例來說,為機構建立的標記鍵可能具有
123456789012/env
這個命名空間名稱。如要瞭解如何取得機構 ID,請參閱「取得機構資源 ID」。為專案建立的標記鍵可能具有命名空間名稱myproject/env
。如要瞭解如何取得專案 ID,請參閱「識別專案」。
如需在條件中選擇使用哪種 ID 的指引,請參閱「代碼定義和 ID」。
您可以使用以標記為準的條件,有條件地存取任何資源。這包括有自己標記的資源,以及從其他資源繼承標記的資源。如要進一步瞭解如何透過資源階層沿用標記,請參閱「標記沿用」。
不過, Google Cloud 控制台的某些區域無法辨識具有標記條件的允許政策角色繫結。因此,如果您擁有附有標記條件的角色, Google Cloud 控制台可能會錯誤地禁止您執行特定動作。如果遇到這個問題,請使用其他方法 (例如 gcloud CLI) 執行動作。
您可以在下列項目中使用以標記為準的條件:
- 允許政策角色繫結
- 拒絕政策拒絕規則
您可以使用下列函式,根據標記設定條件:
函式 | 說明 |
---|---|
resource.hasTagKey(
bool
|
檢查要求資源是否具有指定鍵的標記。系統會依命名空間名稱查詢標記鍵。如要使用永久 ID 檢查代碼鍵,請使用
|
resource.hasTagKeyId(
bool
|
檢查要求資源是否具有指定鍵的標記。系統會根據永久 ID 查詢代碼鍵。
如要使用命名空間名稱檢查標記鍵,請使用
|
resource.matchTag(
bool
|
檢查要求資源是否具有指定鍵和值的標記。系統會依命名空間名稱查詢鍵,並依簡稱查詢值。如要使用永久 ID 檢查代碼鍵和值,請使用
|
resource.matchTagId(
bool
|
檢查要求資源是否具有指定鍵和值的標記。系統會根據永久 ID 查詢索引鍵和值。如要使用命名空間限定名稱檢查標記鍵,並使用簡短名稱檢查值,請使用
|
主要屬性
您可以使用主體屬性,根據發出要求的主體編寫條件。您可以使用這些屬性,精確指定政策的強制執行對象。
您可以在主體存取邊界政策的政策繫結中使用主體屬性。
principal.type
屬性
principal.type
屬性可讓您根據發出要求的主體類型設定條件。舉例來說,您可以為主體存取邊界政策的政策繫結新增條件,確保政策只會對服務帳戶強制執行。
您可以在主體存取邊界政策的政策繫結中使用主體屬性。
屬性變數 | principal.type |
---|---|
屬性類型 |
|
支援的運算子 | , , in |
支援的主體類型 |
|
範例 |
如果要求中的主體是服務帳戶,則評估結果為 principal.type == "iam.googleapis.com/ServiceAccount"
如果要求中的主體是 Google Workspace 身分或員工身分集區身分,則評估結果為 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 |
---|---|
屬性類型 |
|
支援的運算子 |
|
支援的主體 |
|
範例 |
如果要求中的主體以 principal.subject.endsWith("@example.com")
如果要求中的主體是 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 |
詳細資料 |
如要檢查要求是否符合特定存取層級,請使用 ACCESS_LEVEL_FULL_NAME in request.auth.access_levels 存取層級全名的格式如下: accessPolicies/POLICY_NUMBER/accessLevels/ACCESS_LEVEL |
範例 |
如果要求符合 "accessPolicies/199923665455/accessLevels/CorpNet" in request.auth.access_levels |
支援的資源類型 | 適用於使用 Identity-Aware Proxy 存取通道執行個體、通道目的地群組、在 Google Cloud 負載平衡上執行的網路應用程式,或在 App Engine 上執行的網路應用程式的要求。 |
API 屬性
API 屬性可協助您根據特定 API 或服務提供的資料管理存取權。Google Cloud 您可以在允許政策角色繫結中使用 API 屬性。
舉例來說,當您使用 Cloud Storage 列出值區中的物件時,可以在要求中使用 prefix
參數,只納入名稱開頭為特定前置字元的物件。如果您使用憑證存取權界限縮減短期憑證的範圍,可以建立憑證存取權界限,並勾選 API 屬性 storage.googleapis.com/objectListPrefix
,限制列出物件的權限。這個 API 屬性包含要求中的 prefix
參數值。
如需在條件中使用 API 屬性的範例,請參閱下列頁面:
並非所有服務都能辨識 API 屬性。以下各節說明哪些服務可辨識各項 API 屬性。
API 屬性的函式
您可以使用下列函式處理 API 屬性:
函式 | 說明 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
api.getAttribute(
V<T>
|
取得要求的 API 屬性。
|
||||||||||||
hasOnly(
bool |
檢查清單是否只包含允許的項目,或這些項目的子集。您可以對
|
Cloud Storage API 屬性
Cloud Storage 提供下列 API 屬性。
屬性變數 | storage.googleapis.com/objectListPrefix |
---|---|
屬性類型 | string |
詳細資料 |
如要列出值區中的物件,請包含要求中的 如果是其他類型的要求,則不會定義屬性。 |
可辨識這項屬性的服務 | Cloud Storage |
IAM API 屬性
IAM 提供下列 API 屬性:
屬性變數 | iam.googleapis.com/modifiedGrantsByRole |
---|---|
屬性類型 | list<string> |
詳細資料 |
如要設定資源的允許政策,這項屬性會包含要求修改的角色繫結中的角色名稱。 如果是其他類型的要求,則不會定義屬性。 |
接受這項屬性的資源類型 |
下列資源類型會在允許政策中接受具有
|
可辨識這項屬性的服務 |
下列服務可識別
|
日期/時間屬性
日期/時間屬性可用來為 Google Cloud 資源設定有期限、已排定或限時等各類存取。您可以在允許政策角色繫結中使用日期/時間屬性。
所有 Google Cloud 服務和資源類型都支援這項屬性。如要瞭解如何對不直接支援日期/時間條件的資源套用這類條件,請參閱本頁的「支援繼承條件」一節。
request.time
屬性包含要求的時間戳記。您可以比較這個時間戳記與其他時間戳記,或是與一段時間。
以下各節列出可用於根據時間戳記和時間長度設定條件的函式。
建立、比較及修改時間戳記和時間長度
函式或運算子 | 說明 |
---|---|
date(
Timestamp |
將日期從
|
duration(
Duration |
將時間量從
|
timestamp(
Timestamp |
將
|
, , , |
比較兩個
|
|
|
從時間戳記擷取資訊
本節中的函式可讓您從時間戳記擷取資訊,例如時間戳記所屬的星期幾。
在 IAM Conditions 中,所有時間戳記均為世界標準時間。不過,您可能想根據其他時區擷取資訊。舉例來說,您可能想知道世界標準時間的時間戳記是否落在德國柏林時區的星期一。
如要指定其他時區,請將時區傳遞至函式。使用名稱或與 IETF 時區資料庫的世界標準時間 (UTC) 偏移量。舉例來說,您可以將中歐時間 (CET) 設為 Europe/Berlin
或 +01:00
。
支援的函式與運算子 | 說明 |
---|---|
Timestamp.getDate(
int
|
從
|
Timestamp.getDayOfMonth(
int
|
從
|
Timestamp.getDayOfWeek(
int
|
從
|
Timestamp.getDayOfYear(
int
|
從
|
Timestamp.getFullYear(
int
|
從
|
Timestamp.getHours(
int
|
從
您可以將這項函式與
|
Timestamp.getMilliseconds(
int
|
從
|
Timestamp.getMinutes(
int
|
從
|
Timestamp.getMonth(
int
|
從
|
Timestamp.getSeconds(
int
|
從
|
, , , |
比較這個表格中兩個函式的輸出內容。 |
目的地 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 |
支援的運算子 | , |
詳細資料 |
變數 |
範例 |
如果目的地 IP 位址是 destination.ip == "10.0.0.1"
除非目的地 IP 位址為 destination.ip != "10.0.0.1" |
支援的資源類型 | 適用於使用 Identity-Aware Proxy 存取通道執行個體的要求 |
destination.port 屬性
屬性變數 | destination.port |
---|---|
屬性類型 | int |
支援的運算子 | , , , , , |
詳細資料 |
變數 |
範例 |
如果目的地埠為 destination.port == 21
如果目的地通訊埠小於 destination.port < 3001 |
支援的資源類型 | 適用於使用 Identity-Aware Proxy 存取通道執行個體的要求 |
轉送規則屬性
轉送規則屬性可讓您指定主體可建立的轉送規則類型。舉例來說,您可以允許主體為內部 Google Cloud負載平衡器建立轉送規則,這類負載平衡器會處理源自 Google Cloud 網路內的流量,但不能為外部 Google Cloud負載平衡器建立轉送規則,這類負載平衡器會處理源自網際網路的流量。您可以在允許政策角色繫結中使用轉送規則屬性。
如果是 Cloud Load Balancing,轉送規則屬性不會影響建立負載平衡器其他元件的能力,例如後端服務、目標 Proxy、健康狀態檢查和網址對應。 Google Cloud
支援的函式
函式 | 說明 |
---|---|
compute.isForwardingRule
bool
|
檢查要求是否正在建立轉送規則。
|
compute.matchLoad
bool
|
檢查要求是否會影響指定類型的負載平衡架構。如要找出各負載平衡配置的 ID,以及更多詳細資料,請參閱在負載平衡器上使用 IAM 條件 Google Cloud 。
|
支援的資源類型
這項屬性適用於建立下列資源類型的要求:
服務 | 資源類型 |
---|---|
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 != "/admin" 所示,而非檢查不相等,如 !request.path.startsWith("/admin") 所示。檢查前置字元時,您也會保護 /admin 階層中的網址路徑,例如 /admin/payroll/ 。 |
範例 |
如果要求路徑等於指定的網址路徑,則傳回 request.path == "/admin" request.path == "/admin/payroll"
如果要求路徑開頭為指定網址路徑,則傳回 request.path.startsWith("/admin")
如果要求路徑結尾為指定的網址路徑,則傳回 request.path.endsWith("/payroll.js") |
支援的資源類型 |
|
request.host 屬性
屬性變數 | request.host |
---|---|
屬性類型 | string |
支援的函式與運算子 | , endsWith() |
詳細資料 |
我們不建議將 .startsWith() 函式或 運算子與這個屬性搭配使用。這些函式和運算子可能會產生非預期的結果。 |
範例 |
如果主機名稱等於指定值,則傳回 request.host == "www.example.com" request.host == "hr.example.com"
如果主機名稱結尾為指定值,則傳回 request.host.endsWith("example.com") |
支援的資源類型 |
|
從屬性擷取值
您可以使用 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={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/ |
/orders/{none}/order_date= |
清空「string 」 |
/orders/order_date=2019-11-03/ |
清空「string 」 |
如果您擷取代表日期的字串,可以使用本頁的日期/時間函式和運算子,將擷取的值轉換為 Timestamp
。如需範例,請參閱「設定以資源為基礎的存取權」。