Scrivere regole per i controlli cloud personalizzati

Quando crei un controllo cloud personalizzato, utilizzi le espressioni Common Expression Language (CEL) per creare le regole che valutano le proprietà della risorsa sottoposta a scansione.

Le espressioni possono essere controlli di un singolo valore o espressioni composte più complesse che controllano più valori o condizioni. In ogni caso, l'espressione deve restituire un valore booleano false per attivare un risultato.

Le espressioni CEL che valutano le proprietà delle risorse devono essere conformi alle seguenti regole:

  • Le proprietà specificate in un'espressione CEL devono essere proprietà della risorsa analizzata, come definito nella definizione API del tipo di risorsa.

  • Tutti gli enum in un'espressione CEL devono essere rappresentati come stringhe. Ad esempio, la seguente è un'espressione valida per il tipo di risorsa cloudkms.googleapis.com/CryptoKeyVersion:

    resource.data.state = "PENDING_GENERATION"
  • Il risultato delle espressioni CEL che definisci nella proprietà condition deve essere un valore booleano. Un risultato viene attivato solo se il risultato è false.

Per ulteriori informazioni su CEL, consulta le seguenti risorse:

Espressioni CEL di esempio

La seguente tabella elenca alcune espressioni CEL che puoi utilizzare per valutare le proprietà delle risorse.

Tipo di risorsa Descrizione Espressione CEL
cloudkms.googleapis.com/CryptoKey Controlla il periodo di rotazione della chiave Cloud KMS has(resource.data.rotationPeriod) && resource.data.rotationPeriod < duration('60h')
compute.googleapis.com/Network Corrispondenza della regola di peering Virtual Private Cloud con i peer di rete 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 Consenti solo il traffico in entrata interno per una funzione Cloud Run has(resource.data.ingressSettings) && resource.data.ingressSettings.matches('ALLOW_INTERNAL_ONLY')
compute.googleapis.com/Instance Il nome della risorsa corrisponde al pattern resource.data.name.matches('^gcp-vm-(linux|windows)-v\\\\d+$')
serviceusage.googleapis.com/Service Consenti l'attivazione solo delle API correlate allo spazio di archiviazione 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 Consenti solo gli indirizzi IP pubblici presenti nella lista consentita (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 Verifica se gli ID progetto in un cluster Dataproc contengono le sottostringhe testing o development has(resource.data.projectId) && !resource.data.projectId.contains('testing') || !resource.data.projectId.contains('development')