Cuando creas un control personalizado de Cloud, usas expresiones de Common Expression Language (CEL) para crear las reglas que evalúan las propiedades del recurso analizado.
Tus expresiones pueden ser verificaciones de un solo valor o expresiones compuestas más complejas que verifican varios valores o condiciones. De cualquier manera, la expresión debe resolverse como un valor booleano false
para activar un hallazgo.
Las expresiones CEL que evalúan las propiedades de los recursos deben cumplir con las siguientes reglas:
Las propiedades que especifiques en una expresión CEL deben ser propiedades del recurso analizado, como se definen en la definición de la API del tipo de recurso.
Todos los enums en una expresión CEL deben representarse como cadenas. Por ejemplo, la siguiente es una expresión válida para el tipo de recurso
cloudkms.googleapis.com/CryptoKeyVersion
:resource.data.state = "PENDING_GENERATION"
El resultado de las expresiones CEL que definas en la propiedad
condition
debe ser un valor booleano. Un hallazgo se activa solo si el resultado esfalse
.
Para obtener más información sobre CEL, consulta lo siguiente:
Expresiones de CEL de ejemplo
En la siguiente tabla, se enumeran algunas expresiones de CEL que puedes usar para evaluar las propiedades de los recursos.
Tipo de recurso | Descripción | Expresión CEL |
---|---|---|
cloudkms.googleapis.com/CryptoKey |
Verifica el período de rotación de claves de Cloud KMS | has(resource.data.rotationPeriod) && resource.data.rotationPeriod < duration('60h') |
compute.googleapis.com/Network |
Haz coincidir la regla de intercambio de tráfico de la nube privada virtual con las redes de intercambio de tráfico | 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 |
Solo permitir el tráfico de entrada interno para una función de Cloud Run | has(resource.data.ingressSettings) && resource.data.ingressSettings.matches('ALLOW_INTERNAL_ONLY') |
compute.googleapis.com/Instance |
El nombre del recurso coincide con el patrón | resource.data.name.matches('^gcp-vm-(linux|windows)-v\\\\d+$') |
serviceusage.googleapis.com/Service |
Permitir que solo se habiliten las APIs relacionadas con el almacenamiento | 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
|
Solo permite las direcciones IP públicas que se encuentran en la lista de entidades permitidas. | (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 si los IDs de proyecto en un clúster de Dataproc contienen las subcadenas testing o development . |
has(resource.data.projectId) && !resource.data.projectId.contains('testing') || !resource.data.projectId.contains('development') |