Filtrar listas y versiones de secretos

En este tema se analiza la compatibilidad con el filtrado en las siguientes llamadas de listado de recursos en Secret Manager:

Uso

El intent de filtrado en una operación list se indica por la presencia del campo de string filter en el cuerpo de la solicitud de lista. La API usa un lenguaje simple para referirse a los campos en el objeto que se filtra.

En los siguientes ejemplos, supongamos que un subconjunto de secretos contiene las substrings “asecret” o “bsecret”. Especifica un filtro que coincida con estos secretos. Los resultados se ordenan por nombre en orden ascendente.

gcloud

Los filtros se especifican con la marca --filter. Si el filtro contiene un espacio o algún otro carácter especial, debes encerrarlo entre comillas.

gcloud secrets list --filter="name:asecret OR name:bsecret"

Google Cloud CLI también admite expresiones regulares (regex), por ejemplo:

gcloud secrets list --filter='name ~ "secret_ab.*"'

API

En estos ejemplos, se usa curl para demostrar el uso de la API. Puedes generar tokens de acceso con gcloud auth print-access-token. En Compute Engine o GKE, debes autenticarte con el permiso cloud-platform.

Los filtros se especifican como el parámetro de string de consulta filter y se deben codificar como URL. Por ejemplo, el filtro name:asecret OR name:bsecret se codificaría como URL como name%3Aasecret+OR+name%3Absecret.

curl "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?filter=FILTER" \
    --request "GET" \
    --header "Authorization: Bearer ACCESS_TOKEN"

La regex no es compatible con la API.

Ejemplos

Situación Filtro
Secretos cuyo nombre contiene la substring "mysecret" name:mysecret
Secretos con una etiqueta específica labels.environment=production
Secretos creados en un intervalo de tiempo o una fecha create_time<2021-01-01T06:00:00Z AND create_time>2021-01-01T12:00:00Z
Secretos con replicación automática replication.automatic:*
Secretos con replicación administrada por el usuario, pero no almacenados en ninguna de las regiones determinadas replication.user_managed.replicas.location:* AND NOT replication.user_managed.replicas.location:(us-central1 OR us-east1)
Secretos encriptados con claves CMEK replication.user_managed.replicas.customerManagedEncryption:*
Secretos encriptados con una clave CMEK específica replication.user_managed.replicas.customerManagedEncryption.kmsKeyName=projects/p/locations/us-central1/keyRings/kr/cryptoKeys/my-cmek-key
Secretos sin un período de rotación NOT rotation.next_rotation_time:*
Secretos con un período de rotación > 30d rotation.rotation_period>259200s
Secretos con vencimiento establecido expire_time:*
Secretos que vencen antes de una fecha expire_time<2021-07-31>
Versiones que están habilitadas o inhabilitadas state:(ENABLED OR DISABLED)
Versiones destruidas, destruidas después de la fecha state:DESTROYED AND destroy_time>2021-01-01

Sintaxis de filtro

La sintaxis de filtro consiste en una expresión de uno o más campos del objeto que se filtra.

Puedes usar los siguientes operadores de expresión.

Operador Descripción
= Igualdad
> Superior a
< Inferior a
>= Superior o igual a
<= Inferior o igual a
!=
-
NOT
Desigualdad Los siguientes son equivalentes:
name!="topsecret"
-name="topsecret"
NOT name="topsecret"
:

Contención. Esta es una coincidencia de substring con distinción entre mayúsculas y minúsculas.

Por ejemplo, name:"myapp" filtra en los recursos que contienen myapp (no distingue mayúsculas de minúsculas) en el nombre del recurso.

AND

AND lógico.

Un espacio es equivalente a AND, por lo que los siguientes son equivalentes:
name:"myapp" AND name:"secret1"
name:"myapp" name:"secret1"

OR Lógica OR.
*

Comodín.

Se puede usar como un archivo independiente en el que field:* indica que está configurado field.

De manera coherente con la API de Cloud Search, OR tiene prioridad sobre AND de forma predeterminada. Los paréntesis se pueden usar para indicar la prioridad de operación deseada.

Cuando filtras valores time, codifica la hora como una string en el formato RFC 3399, como 2020-10-15T01:30:15Z.

Cuando accedas a un subcampo, usa la sintaxis de punto. Por ejemplo, el recurso Secret puede incluir el campo labels cuyo valor es un par clave-valor map. Si se usa una etiqueta color, puedes filtrar los resultados de Secret en el subcampo labels.color de la siguiente manera:

labels.color=red

Si deseas enumerar solo los secretos con el conjunto de etiquetas color, usa un comodín:

labels.color:*

Una string entre comillas se interpreta como un valor único en lugar de como una secuencia de valores.

Filtra campos

Puedes filtrar en cualquier campo de objeto Secret o SecretVersion.

Método de lista Vínculo a los campos filtrables
projects.secrets.list Campos secretos
projects.secrets.versions.list Campos SecretVersion

Recuento total de resultados

Si filter se establece en una solicitud de lista, la respuesta no indica el recuento total de resultados (total_size=0 en la respuesta).

¿Qué sigue?