Écrire des règles pour les contrôles cloud personnalisés

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 est false.

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