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

このページでは、Secret Manager でシークレットとシークレット バージョンをフィルタするプロセスについて説明します。シークレットが多数存在する環境では、フィルタリングを使用すると、リスト全体を手動でスクロールしなくても、特定のシークレットやバージョンをすばやく特定できます。ラベル、作成日、シークレット名内の特定のパターンなどの条件に基づいてフィルタできるため、特定のシークレットのグループを重点的に管理できます。

Secret Manager では、 Google Cloud コンソールの [フィルタ] オプションを使用するか、API 呼び出し内でフィルタ条件を指定して、シークレットとシークレットのバージョンをフィルタできます。Google Cloud CLI では、シークレットを一覧表示するときに filter 文字列を含めることで、シークレットとシークレット バージョンをフィルタできます。

シークレットをフィルタする

シークレットをフィルタするには、次のいずれかの方法を使用します。

コンソール

  1. Google Cloud コンソールで、[Secret Manager] ページに移動します。

    Secret Manager に移動

  2. [シークレット] テーブルで、[フィルタ] フィールドをクリックします。

  3. フィルタ プロパティとその対応する値(Location:asia-east1 など)を選択します。

    入力された値に基づいて、テーブルが自動的にフィルタされます。結果は名前の昇順で並べ替えられます。

gcloud

後述のコマンドデータを使用する前に、次のように置き換えます。

  • FILTER: フィルタ文字列(例: name:asecret OR name:bsecret)。gcloud CLI は、name ~ "secret_ab.*" などの正規表現もサポートしています。

次のコマンドを実行します。

Linux、macOS、Cloud Shell

gcloud secrets list --filter="FILTER"

Windows(PowerShell)

gcloud secrets list --filter="FILTER"

Windows(cmd.exe)

gcloud secrets list --filter="FILTER"

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクト ID。
  • FILTER: フィルタ文字列。フィルタは filter クエリ文字列パラメータとして指定され、URL エンコードされている必要があります。たとえば、フィルタ name:asecret OR name:bsecretname%3Aasecret+OR+name%3Absecret として URL エンコードされます。正規表現は API でサポートされていません。

HTTP メソッドと URL:

GET https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?filter=FILTER

リクエストの本文(JSON):

{}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?filter=FILTER"

PowerShell

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?filter=FILTER" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "secrets": [
    {
      "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
      "createTime": "2024-09-02T07:14:00.281541Z",
      "etag": "\"16211dd90b37e7\""
    }
  ]
}

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

シークレット バージョンをフィルタするには、次の操作を行います。

  • Google Cloud コンソールで、シークレットを選択してそのバージョンにアクセスし、[バージョン] テーブルの [フィルタ] オプションを使用します。

  • Google Cloud CLI または Secret Manager API を使用している場合は、シークレット バージョンを一覧表示するときに filter 文字列を指定します。

フィルタの例

ユースケース フィルタ
名前に部分文字列 mysecret が含まれるシークレット name:mysecret
特定のラベルを持つシークレット labels.environment=production
日時の範囲内で作成されたシークレット create_time<2021-01-01T06:00:00Z AND create_time>2021-01-01T01: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 形式の文字列にエンコードします。

サブフィールドにアクセスする場合は、ドット構文を使用します。たとえば、シークレット リソースには、値が 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)は表示されません。

次のステップ