シークレットとシークレット バージョンのリストをフィルタする

このトピックでは、Secret Manager での次のリソースリストの呼び出しにおけるフィルタリングのサポートについて説明します。

用途

リスト リクエストの本文に filter 文字列フィールドがある場合は、list オペレーションでインテントをフィルタリングすることを示しています。この API では、フィルタリングされるオブジェクト内のフィールドの参照に、簡単な言語が使用されます。

次の例では、シークレットのサブセットに「asecret」または「bsecret」のいずれかの部分文字列が含まれていると仮定します。これらのシークレットに一致するフィルタを指定します。 結果は名前の昇順で並べ替えられます。

gcloud

フィルタは --filter フラグを使用して指定します。フィルタにスペースやその他の特殊文字が含まれている場合は、引用符で囲む必要があります。

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

Google Cloud CLI では、次のような正規表現(regex)もサポートされます。

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

API

次の例では、API の使用を示すために curl を使用します。gcloud auth print-access-token を使用してアクセス トークンを生成できます。Compute Engine または GKE では、cloud-platform スコープを使用して認証する必要があります。

フィルタは filter クエリ文字列パラメータとして指定され、URL エンコードされている必要があります。たとえば、フィルタ name:asecret OR name:bsecretname%3Aasecret+OR+name%3Absecret として URL エンコードされます。

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
日時の範囲内で作成されたシークレット 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 キーで暗号化されたシークレット 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

フィルタの構文

フィルタの構文は、フィルタ対象となるオブジェクトの 1 つ以上のフィールドに対する式で構成されます。

式には次の演算子を使用できます。

演算子 説明
= 等しい。
> より大きい。
< 未満。
>= 以上。
<= 以下。
!=
-
NOT
等しくない。次の式はすべて同じ結果になります。
name!="topsecret"
-name="topsecret"
NOT name="topsecret"
:

包含。これは、大文字と小文字が区別されない部分文字列一致です。

たとえば、name:"myapp" は、リソース名に myapp(大文字と小文字は区別されません)を含むリソースをフィルタします。

AND

論理 AND

スペースは AND と同等であるため、次の式はすべて同じ結果になります。
name:"myapp" AND name:"secret1"
name:"myapp" name:"secret1"

OR 論理 OR。
*

ワイルドカード

field:*field が設定されていることを示すスタンドアロンとして使用できます。

Cloud Search API と整合して、OR はデフォルトで AND よりも優先されます。括弧を使用すると、目的のオペレーションの優先度を指定できます。

time 値でフィルタする場合は、2020-10-15T01:30:15Z のように、時刻を RFC 3399 形式の文字列にエンコードします。

サブフィールドにアクセスする場合は、ドット構文を使用します。たとえば、Secret リソースには、値が Key-Value maplabels フィールドを含めることができます。color ラベルを使用している場合、次のようにサブフィールド labels.colorSecret の結果をフィルタできます。

labels.color=red

color ラベルセットを持つシークレットだけを一覧表示する場合は、ワイルドカードを使用します。

labels.color:*

引用符で囲まれた文字列は、一続きの値ではなく、単一の値として解釈されます。

フィルタ フィールド

Secret または SecretVersion オブジェクトの任意のフィールドでフィルタリングできます。

list メソッド フィルタリング可能フィールドへのリンク
projects.secrets.list シークレット フィールド
projects.secrets.versions.list SecretVersion フィールド

結果の総数

リスト リクエストで filter が設定されている場合、レスポンスに結果の総数(レスポンスの total_size=0)は表示されません。

次のステップ