Ao criar um controle de nuvem personalizado, você usa expressões da Common Expression Language (CEL) para criar as regras que avaliam as propriedades do recurso verificado.
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 precisa ser resolvida com um false
booleano para acionar uma descoberta.
As expressões CEL que avaliam propriedades de recursos precisam estar em conformidade com as seguintes regras:
As propriedades especificadas em uma expressão CEL precisam ser propriedades do recurso verificado, conforme definido na definição da API do tipo de recurso.
Todas as enumerações em uma expressão CEL precisam ser representadas como strings. Por exemplo, uma expressão válida para o tipo de recurso
cloudkms.googleapis.com/CryptoKeyVersion
:resource.state = "PENDING_GENERATION"
O resultado das expressões CEL definidas na propriedade
condition
precisa ser um booleano. Uma descoberta será acionada somente se o resultado forfalse
.
Para mais informações sobre CEL, consulte estes documentos:
Exemplo de expressões CEL
A tabela a seguir lista algumas expressões CEL que podem ser usadas para avaliar as propriedades dos recursos.
Tipo de recurso | Descrição | Expressão CEL |
---|---|---|
cloudkms.googleapis.com/CryptoKey |
Verificar o período de rotação de chaves do Cloud KMS | has(resource.rotationPeriod) && resource.rotationPeriod < duration('60h') |
compute.googleapis.com/Network |
Corresponder a regra de peering da nuvem privada virtual a pares de redes | resource.selfLink.matches('https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/default') || resource.peerings.exists(p, p.network.matches('https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/shared$')) |
cloudfunctions.googleapis.com/CloudFunction |
Permitir apenas tráfego de entrada interno para uma função do Cloud Run | has(resource.ingressSettings) && resource.ingressSettings.matches('ALLOW_INTERNAL_ONLY') |
compute.googleapis.com/Instance |
O nome do recurso corresponde ao padrão | resource.name.matches('^gcp-vm-(linux|windows)-v\\\\d+$') |
serviceusage.googleapis.com/Service |
Permitir que apenas APIs relacionadas ao armazenamento sejam ativadas | resource.state == 'ENABLED' && !( resource.name.matches('storage-api.googleapis.com') || resource.name.matches('bigquery-json.googleapis.com') || resource.name.matches('bigquery.googleapis.com') || resource.name.matches('sql-component.googleapis.com') || resource.name.matches('spanner.googleapis.com'))
|
sqladmin.googleapis.com/Instance
|
Permitir apenas endereços IP públicos na lista de permissões | (resource.instanceType == 'CLOUD_SQL_INSTANCE' && resource.backendType == 'SECOND_GEN' && resource.settings.ipConfiguration.ipv4Enabled ) && (resource.ipAddresses.all(ip, ip.type != 'PRIMARY' || ip.ipAddress.matches('IP_ADDRESS')))
|
dataproc.googleapis.com/Cluster |
Verifique se os IDs de projeto em um cluster do Dataproc contêm as substrings testing ou development |
has(resource.projectId) && !resource.projectId.contains('testing') || !resource.projectId.contains('development') |