Lorsque vous créez un contrôle cloud personnalisé, vous utilisez des expressions CEL (Common Expression Language) pour créer les règles qui évaluent les propriétés de la ressource analysée.
Vos expressions peuvent être des vérifications d'une seule valeur ou des expressions composées plus complexes qui vérifient plusieurs valeurs ou conditions. Dans tous les cas, l'expression doit correspondre à une valeur booléenne false
pour déclencher un résultat.
Les expressions CEL qui évaluent les propriétés des ressources doivent respecter les règles suivantes :
Les propriétés que vous spécifiez dans une expression CEL doivent être des propriétés de la ressource analysée, telles qu'elles sont définies dans la définition de l'API du type de ressource.
Toutes les énumérations d'une expression CEL doivent être représentées sous forme de chaînes. Par exemple, l'expression suivante est valide pour le type de ressource
cloudkms.googleapis.com/CryptoKeyVersion
:resource.state = "PENDING_GENERATION"
Le résultat des expressions CEL que vous définissez dans la propriété
condition
doit être une valeur booléenne. Un résultat n'est déclenché que si le résultat estfalse
.
Pour en savoir plus sur CEL, consultez les ressources suivantes :
Exemples d'expressions CEL
Le tableau suivant liste quelques expressions CEL que vous pouvez utiliser pour évaluer les propriétés des ressources.
Type de ressource | Description | Expression CEL |
---|---|---|
cloudkms.googleapis.com/CryptoKey |
Vérifier la période de rotation des clés Cloud KMS | has(resource.rotationPeriod) && resource.rotationPeriod < duration('60h') |
compute.googleapis.com/Network |
Faire correspondre la règle d'appairage de cloud privé virtuel aux pairs réseau | 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 |
Autoriser uniquement le trafic entrant interne pour une fonction Cloud Run | has(resource.ingressSettings) && resource.ingressSettings.matches('ALLOW_INTERNAL_ONLY') |
compute.googleapis.com/Instance |
Le nom de la ressource correspond au modèle | resource.name.matches('^gcp-vm-(linux|windows)-v\\\\d+$') |
serviceusage.googleapis.com/Service |
Autoriser l'activation des API liées au stockage uniquement | 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
|
N'autoriser que les adresses IP publiques figurant sur la liste d'autorisation | (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 |
Vérifiez si les ID de projet d'un cluster Dataproc contiennent les sous-chaînes testing ou development . |
has(resource.projectId) && !resource.projectId.contains('testing') || !resource.projectId.contains('development') |