创建自定义云控制措施时,您可以使用通用表达式语言 (CEL) 表达式来创建用于评估所扫描资源属性的规则。
表达式可以是单个值的检查,也可以是检查多个值或条件的更复杂的复合表达式。无论采用哪种方式,表达式都必须解析为布尔值 false 才能触发发现结果。
用于评估资源属性的 CEL 表达式必须遵循以下规则:
您在 CEL 表达式中指定的属性必须是扫描的资源的属性,如资源类型的 API 定义中所定义。
CEL 表达式中的所有枚举都必须以字符串表示。例如,以下是适用于
cloudkms.googleapis.com/CryptoKeyVersion资源类型的有效表达式:resource.data.state = "PENDING_GENERATION"
您在
condition属性中定义的 CEL 表达式的结果必须是布尔值。只有当结果为false时,才会触发相应发现结果。
如需查找资源的名称,请参阅资产类型。
如需详细了解 CEL,请参阅以下内容:
CEL 表达式示例
下表列出了一些可用于评估资源属性的 CEL 表达式。
| 资源类型 | 说明 | CEL 表达式 | 
|---|---|---|
cloudkms.googleapis.com/CryptoKey | 
    检查 Cloud KMS 密钥轮替周期 | has(resource.data.rotationPeriod) && resource.data.rotationPeriod < duration('60h') | 
  
compute.googleapis.com/Network | 
    将 Virtual Private Cloud 对等互连规则与网络对等方相匹配 | resource.data.selfLink.matches('https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/default') || resource.data.peerings.exists(p, p.network.matches('https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/shared$')) | 
  
cloudfunctions.googleapis.com/CloudFunction | 
    仅允许 Cloud Run functions 函数的内部入站流量 | has(resource.data.ingressSettings) && resource.data.ingressSettings.matches('ALLOW_INTERNAL_ONLY') | 
  
compute.googleapis.com/Instance | 
    资源名称与模式匹配 | resource.data.name.matches('^gcp-vm-(linux|windows)-v\\\\d+$') | 
  
serviceusage.googleapis.com/Service | 
    仅允许启用与存储相关的 API | resource.data.state == 'ENABLED' && !( resource.data.name.matches('storage-api.googleapis.com') || resource.data.name.matches('bigquery-json.googleapis.com') || resource.data.name.matches('bigquery.googleapis.com') || resource.data.name.matches('sql-component.googleapis.com') || resource.data.name.matches('spanner.googleapis.com'))
     | 
  
sqladmin.googleapis.com/Instance
     | 
    仅允许已列入许可名单的公共 IP 地址 | (resource.data.instanceType == 'CLOUD_SQL_INSTANCE' && resource.data.backendType == 'SECOND_GEN' && resource.data.settings.ipConfiguration.ipv4Enabled ) && (resource.data.ipAddresses.all(ip, ip.type != 'PRIMARY' || ip.ipAddress.matches('IP_ADDRESS')))
     | 
  
dataproc.googleapis.com/Cluster | 
    检查 Dataproc 集群中的项目 ID 是否包含子字符串 testing 或 development | 
    has(resource.data.projectId) && !resource.data.projectId.contains('testing') || !resource.data.projectId.contains('development') |