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