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 forfalse
.
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') |