Filtrer les listes de secrets et de versions de secrets

Cette rubrique traite de la prise en charge du filtrage dans les appels de liste de ressources suivants dans Secret Manager :

Utilisation

L'intent de filtrage dans une opération list est indiqué par la présence du champ de chaîne filter dans le corps de la requête de liste. L'API utilise un langage simple pour faire référence aux champs de l'objet filtré.

Dans les exemples suivants, supposons qu'un sous-ensemble de secrets contient une sous-chaîne "asecret" ou "bsecret". Spécifiez un filtre correspondant à ces secrets. Les résultats sont triés par nom dans l'ordre croissant.

gcloud

Les filtres sont spécifiés à l'aide de l'indicateur --filter. Si votre filtre contient un espace ou un autre caractère spécial, vous devez le placer entre guillemets.

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

Google Cloud CLI accepte également les expressions régulières, par exemple:

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

API

Ces exemples utilisent curl pour illustrer l'utilisation de l'API. Vous pouvez générer des jetons d'accès avec gcloud auth print-access-token. Sur Compute Engine ou GKE, vous devez vous authentifier avec le champ d'application cloud-platform.

Les filtres sont spécifiés en tant que paramètre de chaîne de requête filter et doivent être encodés en URL. Par exemple, le filtre name:asecret OR name:bsecret est encodé au format URL sous la forme name%3Aasecret+OR+name%3Absecret.

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

Les expressions régulières ne sont pas compatibles avec l'API.

Examples

Scénario Filtre
Les secrets dont le nom contient la sous-chaîne "mysecret" name:mysecret
Secrets avec un libellé spécifique labels.environment=production
Secrets créés dans la plage de dates/heures create_time<2021-01-01T06:00:00Z AND create_time>2021-01-01T12:00:00Z
Secrets avec réplication automatique replication.automatic:*
Secrets avec réplication gérée par l'utilisateur, mais non stockés dans l'une des régions données replication.user_managed.replicas.location:* AND NOT replication.user_managed.replicas.location:(us-central1 OR us-east1)
Secrets chiffrés avec des clés CMEK replication.user_managed.replicas.customerManagedEncryption:*
Secrets chiffrés avec une clé CMEK spécifique replication.user_managed.replicas.customerManagedEncryption.kmsKeyName=projects/p/locations/us-central1/keyRings/kr/cryptoKeys/my-cmek-key
Secrets sans période de rotation NOT rotation.next_rotation_time:*
Secrets avec une période de rotation supérieure à 30 jours rotation.rotation_period>259200s
Secrets avec délai d'expiration défini expire_time:*
Les secrets expirent avant une date expire_time<2021-07-31>
Versions activées ou désactivées state:(ENABLED OR DISABLED)
Versions détruites, détruites après la date state:DESTROYED AND destroy_time>2021-01-01

Syntaxe des filtres

La syntaxe de filtrage consiste en une expression portant sur un ou plusieurs champs des objets filtrés.

Cette expression accepte les opérateurs suivants.

Opérateur Description
= Égal à
> Supérieur à
< Inférieur à
>= Supérieur ou égal à
<= Inférieur ou égal à
!=
-
NOT
Différent de Les expressions suivantes sont équivalentes :
name!="topsecret"
-name="topsecret"
NOT name="topsecret"
:

Inclusion. Il s'agit d'une correspondance de sous-chaîne insensible à la casse.

Par exemple, name:"myapp" filtre les ressources dont le nom contient myapp (non sensible à la casse).

AND

Logical AND (Opérateur logique ET)

Un espace équivaut à AND, ce qui signifie que ce qui est équivalent :
name:"myapp" AND name:"secret1"
name:"myapp" name:"secret1"

OR Opérateur logique OU
*

Caractère générique

Peut être utilisé en tant qu'élément autonome, où field:* indique que field est défini.

Conformément à l'API Cloud Search, OR est prioritaire par défaut sur AND. Les parenthèses peuvent être utilisées pour indiquer la priorité d'opération souhaitée.

Lors du filtrage sur les valeurs time, encodez l'heure sous la forme de chaîne au format RFC 3399, par exemple 2020-10-15T01:30:15Z.

Pour accéder à un sous-champ, utilisez la syntaxe à points. Par exemple, la ressource Secret peut inclure le champ labels dont la valeur est une clé-valeur map. Si un libellé color est utilisé, vous pouvez filtrer les résultats de Secret sur le sous-champ labels.color comme suit :

labels.color=red

Si vous souhaitez ne répertorier que les secrets associés à l'ensemble de libellés color, utilisez un caractère générique :

labels.color:*

Une chaîne entre guillemets est interprétée comme une valeur unique plutôt que comme une séquence de valeurs.

Filtrer les champs

Vous pouvez filtrer sur n'importe quel champ de l'objet Secret ou SecretVersion.

Méthode list Lien vers les champs filtrables
projects.secrets.list Champs secrets
projects.secrets.versions.list Champs SecretVersion

Nombre total de résultats

Si filter est défini dans une requête de liste, la réponse n'indique pas le nombre total de résultats (total_size=0 dans la réponse).

Étapes suivantes