このページでは、Secret Manager でシークレットとシークレット バージョンをフィルタするプロセスについて説明します。シークレットが多数ある環境では、フィルタを使用すると、リスト全体を手動でスクロールしなくても、特定のシークレットまたはバージョンをすばやく特定できます。ラベル、作成日、シークレット名内の特定のパターンなどの条件に基づいてフィルタできるため、特定のシークレットのグループを重点的に管理できます。
Secret Manager では、Google Cloud コンソールの [フィルタ] オプションを使用するか、API 呼び出し内でフィルタ条件を指定して、シークレットと シークレットのバージョンをフィルタできます。Google Cloud CLI では、シークレットを一覧表示するときに filter
文字列を含めることで、シークレットとシークレット バージョンをフィルタできます。
シークレットをフィルタする
シークレットをフィルタするには、次のいずれかの方法を使用します。
Console
-
Google Cloud コンソールの [Secret Manager] ページに移動します。
-
[Secret Manager] ページで、[リージョン シークレット] タブをクリックします。
-
[リージョン シークレット] テーブルで、[フィルタ] フィールドをクリックします。
-
フィルタ プロパティと、それに対応する値(
Location:asia-east1
など)を選択します。入力した値に基づいてテーブルが自動的にフィルタされます。結果は名前の昇順で並べ替えられます。
gcloud
後述のコマンドデータを使用する前に、次のように置き換えます。
- LOCATION: シークレットの Google Cloud ロケーション
- FILTER: フィルタ文字列(例:
name:asecret OR name:bsecret
)。gcloud CLI は、name ~ "secret_ab.*"
などの正規表現もサポートしています。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud secrets list --location=LOCATION --filter="FILTER"
Windows(PowerShell)
gcloud secrets list --location=LOCATION --filter="FILTER"
Windows(cmd.exe)
gcloud secrets list --location=LOCATION --filter="FILTER"
REST
リクエストのデータを使用する前に、次のように置き換えます。
- LOCATION: シークレットの Google Cloud ロケーション
- PROJECT_ID: Google Cloud プロジェクト ID
- FILTER: フィルタ文字列。フィルタは
filter
クエリ文字列パラメータとして指定され、URL エンコードされている必要があります。たとえば、フィルタname:asecret OR name:bsecret
はname%3Aasecret+OR+name%3Absecret
として URL エンコードされます。正規表現は API でサポートされていません。
HTTP メソッドと URL:
GET https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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\"" } ] }
Go
このコードを実行するには、まず Go 開発環境を設定し、Secret Manager Go SDK をインストールします。 Compute Engine または GKE では、cloud-platform スコープを使用して認証する必要があります。
Java
このコードを実行するには、まず Java 開発環境を設定し、Secret Manager Java SDK をインストールします。 Compute Engine または GKE では、cloud-platform スコープを使用して認証する必要があります。
Python
このコードを実行するには、まず Python 開発環境を設定し、Secret Manager Python SDK をインストールします。 Compute Engine または GKE では、cloud-platform スコープを使用して認証する必要があります。
シークレット バージョンをフィルタする
シークレット バージョンをフィルタするには、次の操作を行います。
-
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-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" |
: |
包含。これは、大文字と小文字が区別されない部分文字列一致です。
たとえば、 |
AND |
論理 AND
スペースは |
OR |
論理 OR。 |
* |
ワイルドカード
|
Cloud Search API と整合して、かっこを使用して別の順序を明示的に定義しない限り、OR
演算は AND
演算の前に評価されます。
time
値でフィルタする場合は、2020-10-15T01:30:15Z
のように、時刻を RFC 3399 形式の文字列にエンコードします。
サブフィールドにアクセスする場合は、ドット構文を使用します。たとえば、シークレット リソースには、値が Key-Value map
の labels
フィールドを含めることができます。color
ラベルを使用している場合、次のようにサブフィールド labels.color
で Secret
の結果をフィルタできます。
labels.color=red
color
ラベルセットを持つシークレットだけを一覧表示する場合は、ワイルドカードを使用します。
labels.color:*
引用符で囲まれた文字列は、一続きの値ではなく、単一の値として解釈されます。
フィルタ フィールド
Secret
または SecretVersion
オブジェクトの任意のフィールドでフィルタリングできます。
list メソッド | フィルタリング可能フィールドへのリンク |
---|---|
projects.secrets.list
|
シークレット フィールド |
projects.secrets.versions.list
|
SecretVersion フィールド |
結果の総数
リスト リクエストでfilter
が設定されている場合、レスポンスに結果の総数(レスポンスの total_size=0
)は表示されません。