本主题讨论了对 Secret Manager 中以下资源列表调用进行过滤的支持:
用法
在 list
操作中过滤 intent 由是否存在 filter
来表示
字符串字段。该 API 使用简单的语言引用要过滤的对象中的字段。
在以下示例中,我们假设密钥的子集包含 “asecret”或“bsecret”子字符串。请指定与这些 Secret 匹配的过滤条件。 结果会按名称升序排列。
gcloud
使用 --filter
标志指定过滤条件。如果过滤条件包含
空格或其他特殊字符,则必须用英文引号括起来。
gcloud secrets list --filter="name:asecret OR name:bsecret"
Google Cloud CLI 还支持正则表达式,例如:
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:bsecret
以 name%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"
|
: |
包含关系。这是一个不区分大小写的子字符串匹配。
例如, |
AND |
逻辑与。
空格相当于 |
OR |
逻辑或。 |
* |
通配符。
可用作独立项,其中 |
与 Cloud Search API 一致,OR
默认优先于 AND
。可使用英文括号来指示所需的操作优先级。
过滤 time
值时,请将时间编码为 RFC 3399 格式的字符串,例如 2020-10-15T01:30:15Z
。
访问子字段时,请使用点式语法。例如,Secret
资源可能包含 labels
字段,其值为键值对 map
。如果使用 color
标签,您可以在子字段中过滤 Secret
结果
labels.color
,如下所示:
labels.color=red
如果您只想列出设置了 color
标签的密文,请使用通配符:
labels.color:*
用英文引号引起来的一个字符串会被解释为单个值,而不是一系列值。
过滤字段
您可以按 Secret
或 SecretVersion
对象的任何字段进行过滤。
list 方法 | 可过滤字段的链接 |
---|---|
projects.secrets.list
|
Secret 字段 |
projects.secrets.versions.list
|
SecretVersion 字段 |
结果总数
如果在 list 请求中设置了 filter
,则响应不会指明结果总数(在响应中,total_size=0
)。