过滤 Secret 和 Secret 版本的列表

本主题讨论了对 Secret Manager 中以下资源列表调用进行过滤的支持:

使用情况

list 操作中的过滤 intent 由列表请求正文中存在 filter 字符串字段表示。该 API 使用简单的语言来引用要过滤的对象中的字段。

在以下示例中,我们假设 Secret 的子集包含“asecret”或“bsecret”子字符串。指定与这些 Secret 匹配的过滤条件。结果按名称升序排序。

gcloud

过滤器使用 --filter 标志指定。如果您的过滤条件包含空格或其他特殊字符,则必须用英文引号将其括起来。

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

Google Cloud CLI 还支持正则表达式 (regex),例如:

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

API

这些示例使用 curl 来使用 API 演示。 您可以使用 gcloud auth print-access-token 生成访问令牌。在 Compute Engine 或 GKE 上,您必须使用 cloud-platform 范围进行身份验证

过滤条件指定为 filter 查询字符串参数,并且必须采用网址编码。例如,过滤条件 name:asecret OR name:bsecretname%3Aasecret+OR+name%3Absecret 形式进行网址编码。

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

API 不支持正则表达式。

示例

情况 过滤
名称包含 "mysecret" 子字符串的密文 name:mysecret
具有特定标签的密文 labels.environment=production
在日期/时间范围内创建的 Secret create_time<2021-01-01T06:00:00Z AND create_time>2021-01-01T12:00:00Z
具有自动复制功能的密文 replication.automatic:*
具有用户管理的复制功能但未存储在任一给定区域中的密文 replication.user_managed.replicas.location:* AND NOT replication.user_managed.replicas.location:(us-central1 OR us-east1)
使用 CMEK 密钥加密的密文 replication.user_managed.replicas.customerManagedEncryption:*
使用特定 CMEK 加密的 Secret replication.user_managed.replicas.customerManagedEncryption.kmsKeyName=projects/p/locations/us-central1/keyRings/kr/cryptoKeys/my-cmek-key
没有轮替周期的密文 NOT rotation.next_rotation_time:*
轮替周期超过 30 天的密文 rotation.rotation_period>259200s
设置了过期时间的密文 expire_time:*
在指定日期之前过期的密文 expire_time<2021-07-31>
已启用或已停用的版本 state:(ENABLED OR DISABLED)
已销毁的版本,在指定日期后销毁 state:DESTROYED AND destroy_time>2021-01-01

过滤器语法

过滤器语法由要过滤的对象的一个或多个字段上的表达式组成。

您可以使用以下表达式运算符。

运算符 说明
= 相等。
> 大于。
< 小于。
>= 大于或等于。
<= 小于或等于。
!=
-
NOT
不相等。 以下表达式是等效的:
name!="topsecret"
-name="topsecret"
NOT name="topsecret"
:

包含关系。这是一个不区分大小写的子字符串匹配。

例如,name:"myapp" 用于过滤资源名称中包含 myapp(不区分大小写)的资源。

AND

逻辑与。

空格相当于 AND,因此以下表达式是等效的:
name:"myapp" AND name:"secret1"
name:"myapp" name:"secret1"

OR 逻辑或。
*

通配符。

可用作独立项,其中 field:* 表示已设置 field

与 Cloud Search API 一致,OR 默认优先于 AND。可使用英文括号来指示所需的操作优先级。

过滤 time 值时,请将时间编码为 RFC 3399 格式的字符串,例如 2020-10-15T01:30:15Z

访问子字段时,请使用点式语法。例如,Secret 资源可能包含 labels 字段,其值为键值对 map。如果使用了 color 标签,您可以按子字段 labels.color 过滤 Secret 结果,如下所示:

labels.color=red

如果您只想列出设置了 color 标签的密文,请使用通配符:

labels.color:*

用英文引号引起来的一个字符串会被解释为单个值,而不是一系列值。

过滤字段

您可以过滤 SecretSecretVersion 对象的任何字段。

list 方法 可过滤字段的链接
projects.secrets.list Secret 字段
projects.secrets.versions.list SecretVersion 字段

结果总数

如果在 list 请求中设置了 filter,则响应不会指明结果总数(在响应中,total_size=0)。

后续步骤