本文档介绍了条件表达式中支持的属性。
支持的条件特性
以下几个部分总结了支持的属性,并指出了可识别每个属性的 Google Cloud 服务。
资源特性
以下特性与作为请求主体的资源有关。
属性 | 用途摘要 | 支持的 Google Cloud 服务 |
---|---|---|
资源服务特性 |
根据正在使用的 Google Cloud 服务管理访问权限。 您可以在允许政策角色绑定中使用此属性。 |
|
资源类型特性 |
根据资源类型管理访问权限。 您可以在允许政策角色绑定中使用此属性。 |
|
资源名称特性 |
根据资源名称管理访问权限。 您可以在允许政策角色绑定中使用此属性。 |
|
资源标记 |
根据关联到资源的标记管理访问权限。 您可以在以下位置使用此属性:
|
所有 Google Cloud 服务(请参阅对继承条件的支持) |
如需详细了解资源特性,请参阅本页面上的资源特性。
主账号属性
以下属性与发出请求的主账号相关。
属性 | 用途摘要 | 支持的主账号类型 |
---|---|---|
根据请求中主账号的类型来应用政策。 您可以在 Principal Access Boundary Policy 的政策绑定中使用此属性。 |
|
|
根据请求中主账号的身份来应用政策。 您可以在 Principal Access Boundary Policy 的政策绑定中使用此属性。 |
|
如需详细了解主账号属性,请参阅本页面上的主账号属性。
请求属性
以下特性与请求的详细信息有关。
属性 | 用途摘要 | 支持的 Google Cloud 服务 |
---|---|---|
根据特定的访问权限级别管理访问权限。
访问权限级别是一种基于请求和请求者相关原始特性(例如源 IP 地址、设备特性、一天中的时间)计算得出的特性。例如, 您可以在允许政策角色绑定中使用此属性。 |
Identity-Aware Proxy |
|
根据特定 Google Cloud API 或服务提供的数据管理访问权限。 您可以在允许政策角色绑定中使用此属性。 |
|
|
设置对 Google Cloud 资源的可过期、计划的或限时的访问权限。 您可以在允许政策角色绑定中使用这些属性。 |
所有 Google Cloud 服务(请参阅对继承条件的支持) |
|
根据请求的目标 IP 地址和/或端口管理访问权限。例如,Compute Engine 虚拟机 (VM) 实例可能会公开一个外部 IP 地址(如 用于 Identity-Aware Proxy TCP 转发。 您可以在允许政策角色绑定中使用这些属性。 |
Identity-Aware Proxy |
|
指定主账号可以创建的转发规则的类型。例如,您可以允许主账号为内部 Google Cloud 负载均衡器(用于处理源自 Google Cloud 网络的流量)创建转发规则,但不允许为外部 Google Cloud 负载均衡器(用于处理源自互联网的流量)创建转发规则。 您可以在允许政策角色绑定中使用这些属性。 |
|
|
根据请求的网址路径和/或主机管理访问权限。例如,某个条件可以指定 您可以在允许政策角色绑定中使用这些属性。 |
|
如需详细了解请求特性,请参阅本页面上的请求特性。
支持继承条件
某些类型的 Google Cloud 资源不允许在其允许政策中使用条件。不过,您可以在组织、文件夹或项目级层添加条件角色绑定,其他资源将通过资源层次结构沿用这些角色绑定。如需了解详情,请参阅接受有条件角色绑定的资源类型。
在组织、文件夹或项目级使用特性时,请注意,大多数特性仅适用于特定资源类型。如果条件的一部分使用的特性不可用,则系统绝不会将该部分条件解释为授予访问权限。例如,条件 destination.port == 21
绝不会授予任何 BigQuery 资源的访问权限,因为 BigQuery 资源不提供目标 IP 地址/端口属性。
要避免此问题,请使用本页面介绍的资源类型和资源服务特性来限制条件的范围。例如,对于除 Identity-Aware Proxy 隧道实例之外的所有资源类型,以下条件的计算结果为 true
;而对于 Identity-Aware Proxy 隧道实例,该条件会检查目标端口:
resource.type != 'iap.googleapis.com/TunnelInstance' ||
destination.port == 21
您不必限制用于检查关联到资源的标记的条件范围。当某个条件检查标记键和值时,无法检查任何其他特性,包括资源类型和资源服务。
资源特性
资源服务、资源类型和资源名称特性通常用于更改角色绑定提供的访问授权的范围。如果角色包含适用于不同资源特定特性的权限,则可以使用基于资源的条件,授予角色权限中针对特定类型或特定服务的一部分权限。
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()
函数来评估资源名称,而不是使用 运算符检查是否相等。由于该条件查看资源名称的开头,因此它与存储桶以及该存储桶中的对象匹配。如果检查是否相等,则仅匹配存储桶。
您不能使用 *
等通配符字符来匹配多个资源名称。请考虑以下替代方案:
使用
extract()
函数从资源名称中提取值。例如,您可以从 Compute Engine 虚拟机实例的资源名称中提取项目 ID,然后编写引用该项目 ID 的条件表达式。如需了解详情,请参阅本页面上的从特性中提取值。
使用
startsWith()
或endsWith()
函数编写一个条件,用于评估资源名称的开始或结束。
您可以在允许政策角色绑定中使用 resource.name
属性。
特性变量 | resource.name |
||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
特性类型 |
每种资源类型都为资源名称使用一种特定格式。如需查看这些格式的列表,请参阅资源名称格式。 |
||||||||||||||||||||||||||||||||||||||||
支持的函数和运算符 |
startsWith(), endsWith(), extract(),
, |
||||||||||||||||||||||||||||||||||||||||
详情 |
|
||||||||||||||||||||||||||||||||||||||||
示例 |
除非资源名称标识名为 resource.name != "projects/_/buckets/secret-bucket-123"
如果资源名称以指定前缀开头并采用 Compute Engine 虚拟机实例使用的格式,则返回 resource.name.startsWith("projects/project-123/zones/us-east1-b/instances/prod-")
如果资源名称以指定的前缀开头并采用 Cloud Storage 存储桶使用的格式,返回 resource.name.startsWith("projects/_/buckets/my_bucket/objects/test-object-")
如果资源名称以指定的后缀(例如 Cloud Storage 对象的文件扩展名)结尾,则返回 resource.name.endsWith(".jpg") 返回项目名称或编号(如果存在): resource.name.extract("projects/{project}/") |
||||||||||||||||||||||||||||||||||||||||
支持的资源类型 |
|
资源标记
借助资源标记的函数,您可以根据资源关联到或继承自的标记设置条件。例如,您可以设置条件,以仅对关联了标记 env: prod
的资源授予角色。如需详细了解如何使用标记控制访问权限,请参阅标记和访问权限控制。
每个标记由一个键和一个值组成。每个键和值都有几种不同类型的标识符:
-
永久 ID,它是全局唯一的,并且永远不能重复使用。例如,标记键可以具有永久 ID
tagKeys/123456789012
,而标记值可以是永久 IDtagValues/567890123456
。 -
短名称。每个键的简称必须在定义该键的项目或组织内具有唯一性,并且每个值的简称对于关联的键而言必须是唯一的。例如,标记键可以具有短名称
env
,标记值可以简称为prod
。 -
命名空间名称:将组织的数字 ID 或项目的 ID 添加到标记键的简称。例如,为组织创建的标记键可以具有命名空间名称
123456789012/env
。如需了解如何获取组织 ID,请参阅获取组织资源 ID。为项目创建的标记键可以具有命名空间名称myproject/env
。如需了解如何获取项目 ID,请参阅识别项目。
如需了解如何选择要在条件中使用的标识符类型,请参阅标记定义和标识符。
您可以使用基于标记的条件来有条件地授予对任何资源的访问权限。这包括具有其自身标记的资源,以及从其他资源继承标记的资源。如需详细了解如何通过资源层次结构继承标记,请参阅标记继承。
您可以在以下情况下使用基于标签的条件:
- 允许政策角色绑定
- 拒绝政策拒绝规则
您可以使用以下函数根据标记设置条件:
函数 | 说明 |
---|---|
resource.hasTagKey(
bool
|
检查请求的资源是否包含具有指定键的标记。标记键通过其命名空间名称查找。如需使用标记键的永久 ID 检查是否存在标记键,请使用函数
|
resource.hasTagKeyId(
bool
|
检查请求的资源是否包含具有指定键的标记。标记键通过其永久 ID 查找。如需使用标记键的命名空间名称检查是否存在标记键,请使用函数
|
resource.matchTag(
bool
|
检查请求的资源是否包含带有指定键和值的标记。键通过其命名空间名称查询,值通过其短名称查询。如需使用永久 ID 检查标记键和值,请使用函数
|
resource.matchTagId(
bool
|
检查请求的资源是否包含带有指定键和值的标记。键和值通过其永久 ID 查找。如需使用标记键的命名空间名称和使用其短名称的值检查标记键,请使用函数
|
主账号属性
借助主账号属性,您可以根据发出请求的主账号来编写条件。借助这些属性,您可以细化要为其强制执行政策的主账号。
您可以在 Principal Access Boundary Policy 的政策绑定中使用主账号属性。
principal.type
特性
借助 principal.type
属性,您可以根据发出请求的主账号的类型设置条件。例如,您可以向主账号访问权限边界政策的政策绑定添加条件,以确保仅对服务账号强制执行该政策。
您可以在 Principal Access Boundary Policy 的政策绑定中使用主账号属性。
特性变量 | 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
属性来控制条件适用于哪些类型的主账号。这是因为主账号标识符在主账号类型之间不一定是唯一的。例如,标识符 example-user@example.com
可以标识员工身份池中的 Google 账号或用户。
除了使用 principal.subject
属性之外,还可以使用 principal.type
属性,以确保条件仅与具有预期类型的主账号匹配。例如,以下表达式会匹配电子邮件地址以 @example.com
结尾的 Google 账号:
principal.type == 'iam.googleapis.com/WorkspaceIdentity' &&
principal.subject.endsWith('@example.com')
您可以在 Principal Access Boundary Policy 的政策绑定中使用主账号属性。
特性变量 | 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 后端服务上运行的 Web 应用。具体而言,访问权限级别特性仅适用于检查以下其中一项权限的请求:
iap.tunnelInstances.accessViaIAP
iap.webServiceVersions.accessViaIAP
有条件地授予以下预定义角色时,您可以使用访问权限级别特性:
IAP-secured Tunnel User (
roles/iap.tunnelResourceAccessor
)包含一项权限:
iap.tunnelInstances.accessViaIAP
。IAP-secured Web App User (
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 Load Balancing 上运行的 Web 应用或在 App Engine 上运行的 Web 应用的请求。 |
API 特性
API 特性可帮助您根据特定 Google Cloud API 或服务提供的数据管理访问权限。 您可以在允许政策角色绑定中使用 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 中,所有时间戳均采用世界协调时间 (UTC)。但是,您可能希望根据其他时区提取信息。例如,您可能想知道某个世界协调时间 (UTC) 时间戳是否是德国柏林时区的星期一。
如需指定其他时区,请将时区传递给函数。使用 IETF 时区数据库中的名称或世界协调时间 (UTC) 偏移量。例如,您可以使用 Europe/Berlin
或 +01:00
表示中欧时间 (CET)。
支持的函数和运算符 | 说明 |
---|---|
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 虚拟机实例可能会将外部 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,转发规则属性不会影响创建 Google Cloud 负载均衡器的其他组件(例如后端服务、目标代理、健康检查和网址映射)的能力。
支持的函数
函数 | 说明 |
---|---|
compute.isForwardingRule
bool
|
检查请求是否正在创建转发规则。
|
compute.matchLoad
bool
|
检查请求是否会影响指定类型的负载均衡方案。如需查找每种负载均衡方案的标识符以及更多详细信息,请参阅在 Google Cloud 负载均衡器上使用 IAM Conditions。
|
支持的资源类型
此特性适用于创建以下资源类型的请求:
服务 | 资源类型 |
---|---|
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/ 。 |
示例 |
如果请求路径等于指定网址路径,则返回 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 虚拟机实例的资源名称中提取项目 ID,可以使用模板 projects/{project}/
。
提取模板包含以下组成部分:
括号内的标识符,用于标识要提取的子字符串。
请选择一个有意义的简短标识符,明确指出要提取的值。您可以使用从
A
到Z
的大写和小写字母、数字和下划线 (_
)。在模板
projects/{project}/
中,标识符为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
。如需查看示例,请参阅配置基于资源的访问权限。