Escreva regras para controlos na nuvem personalizados

Quando cria um controlo personalizado na nuvem, usa expressões do Idioma de expressão comum (IEC) para criar as regras que avaliam as propriedades do recurso analisado.

As suas expressões podem ser verificações de um único valor ou expressões compostas mais complexas que verificam vários valores ou condições. De qualquer forma, a expressão tem de ser resolvida como um valor booleano false para acionar uma descoberta.

As expressões CEL que avaliam as propriedades dos recursos têm de estar em conformidade com as seguintes regras:

  • As propriedades que especificar numa expressão CEL têm de ser propriedades do recurso analisado, conforme definido na definição da API do tipo de recurso.

  • Todas as enumerações numa expressão CEL têm de ser representadas como strings. Por exemplo, o seguinte é uma expressão válida para o tipo de recurso cloudkms.googleapis.com/CryptoKeyVersion:

    resource.data.state = "PENDING_GENERATION"
  • O resultado das expressões CEL que definir na propriedade condition tem de ser um valor booleano. Uma descoberta só é acionada se o resultado for false.

Para encontrar o nome de um recurso, consulte Tipos de recursos.

Para mais informações sobre o CEL, consulte o seguinte:

Exemplos de expressões de IEC

A tabela seguinte apresenta algumas expressões de IEC que pode usar para avaliar as propriedades dos recursos.

Tipo do recurso Descrição Expressão CEL
cloudkms.googleapis.com/CryptoKey Verifique o período de rotação das chaves do Cloud KMS has(resource.data.rotationPeriod) && resource.data.rotationPeriod < duration('60h')
compute.googleapis.com/Network Faça corresponder a regra de intercâmbio da nuvem privada virtual aos pares de rede 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 Permita apenas tráfego de entrada interno para uma função do Cloud Run has(resource.data.ingressSettings) && resource.data.ingressSettings.matches('ALLOW_INTERNAL_ONLY')
compute.googleapis.com/Instance O nome do recurso corresponde ao padrão resource.data.name.matches('^gcp-vm-(linux|windows)-v\\\\d+$')
serviceusage.googleapis.com/Service Permitir apenas a ativação de APIs relacionadas com o armazenamento 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 Permitir apenas endereços IP públicos que estejam na lista de autorizações (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 Verifique se os IDs dos projetos num cluster do Dataproc contêm as subcadeias de carateres testing ou development has(resource.data.projectId) && !resource.data.projectId.contains('testing') || !resource.data.projectId.contains('development')