Filtrar listas de secrets e versões de secrets

Este tópico aborda a compatibilidade com a filtragem nas seguintes chamadas de listagem de recursos no Gerenciador de secrets:

Uso

A intent de filtragem em uma operação list é indicada pela presença de filter. string no corpo da solicitação da lista. A API usa uma linguagem simples para se referir aos campos no objeto que está sendo filtrado.

Nos exemplos a seguir, vamos supor que um subconjunto de secrets contenha "secreto" ou "bsecret", substring. Especifique um filtro que corresponda a esses secrets. Os resultados são classificados por nome em ordem crescente.

gcloud

Os filtros são especificados usando a sinalização --filter. Se o filtro contiver um espaço ou outro caractere especial, você precisará colocá-lo entre aspas.

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

A Google Cloud CLI também oferece suporte a expressões regulares (regex), por exemplo:

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

API

Esses exemplos usam curl para demonstrar o uso da API. É possível gerar tokens de acesso com o gcloud auth print-access-token. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

Os filtros são especificados como o parâmetro querystring filter e precisam ser codificados para URL. Por exemplo, o filtro name:asecret OR name:bsecret seria codificado 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"

A API não oferece suporte a regex.

Exemplos

Cenário Filter
Os secrets com nome que contém a substring "mysecret" name:mysecret
Secrets com um rótulo específico labels.environment=production
Secrets criados dentro do intervalo de data/hora create_time<2021-01-01T06:00:00Z AND create_time>2021-01-01T12:00:00Z
Secrets com replicação automática replication.automatic:*
Secrets com replicação gerenciada pelo usuário, mas não armazenados em nenhuma das regiões informadas replication.user_managed.replicas.location:* AND NOT replication.user_managed.replicas.location:(us-central1 OR us-east1)
Secrets criptografados com chaves CMEK replication.user_managed.replicas.customerManagedEncryption:*
Secrets criptografados com uma chave CMEK específica replication.user_managed.replicas.customerManagedEncryption.kmsKeyName=projects/p/locations/us-central1/keyRings/kr/cryptoKeys/my-cmek-key
Chaves secretas sem um período de rotação NOT rotation.next_rotation_time:*
Secrets com período de rotação > 30d rotation.rotation_period>259200s
Secrets com expiração definida expire_time:*
Os secrets expiram antes de uma data. expire_time<2021-07-31
Versões ativadas ou desativadas state:(ENABLED OR DISABLED)
Versões destruídas, destruídas após a data state:DESTROYED AND destroy_time>2021-01-01

Sintaxe do filtro

A sintaxe do filtro consiste em uma expressão em um ou mais campos dos objetos que estão sendo filtrados.

Você pode usar os seguintes operadores de expressão.

Operador Descrição
= Igual a
> Maior que
< Menor que
>= Maior que ou igual a
<= Menor que ou igual a
!=
-
NOT
Diferente de Os seguintes são equivalentes:
name!="topsecret"
-name="topsecret"
NOT name="topsecret"
:

Contenção. Essa é uma correspondência de substring que não diferencia maiúsculas de minúsculas.

Por exemplo, name:"myapp" filtra recursos que contêm myapp (não diferencia maiúsculas de minúsculas) no nome do recurso.

AND

Lógico AND

Um espaço é equivalente a AND, portanto, o seguinte é equivalente:
name:"myapp" AND name:"secret1"
name:"myapp" name:"secret1"

OR "OU" lógico.
*

Curinga.

Pode ser usada como autônoma, em que field:* indica que field está definido.

De maneira consistente com a API Cloud Search, OR tem precedência sobre AND por padrão. Parênteses podem ser usados para indicar a prioridade da operação desejada.

Ao filtrar valores time, codifique o horário como uma string no RFC 3399 (em inglês) em um formato apropriado, como 2020-10-15T01:30:15Z.

Ao acessar um subcampo, use a sintaxe de ponto. Por exemplo, o recurso Secret pode incluir o campo labels, cujo valor é uma chave-valor map. Se um rótulo color estiver em uso, será possível filtrar os resultados de Secret no subcampo labels.color da seguinte maneira:

labels.color=red

Para listar apenas secrets com o rótulo color definido, use um caractere curinga:

labels.color:*

Uma string entre aspas é interpretada como um valor único, e não como uma sequência de valores.

Filtrar campos

É possível filtrar por qualquer campo de objeto Secret ou SecretVersion.

Método de lista Link para campos que aceitam filtros
projects.secrets.list Campos secretos
projects.secrets.versions.list Campos SecretVersion

Contagem total de resultados

Se filter estiver definido em uma solicitação de lista, a resposta não indicará a contagem total de resultados (total_size=0 na resposta).

A seguir