Cloud Asset Inventory を使用してリージョン シークレットを分析する

このページでは、Cloud Asset Inventory を使用してシークレットをモニタリングし、分析用にデータをエクスポートし、強力なクエリを実行して必要な分析情報を取得する方法について説明します。

概要

Cloud Asset Inventory は Google Cloud 環境を分析し、仮想マシン、データベース、ストレージ バケットなどのクラウド リソース(このコンテキストでは Secret Manager シークレット)の変更を記録します。Secret Manager と Cloud Asset Inventory を統合すると、次のことができます。

  • クエリを実行する: 特定のシークレットを検索したり、シークレット全体でパターンを特定したりできます。

  • アラートを設定する: シークレットの作成、変更、削除など、特定のイベントが発生したときに Pub/Sub に通知を送信するように Cloud Asset Inventory を構成します。

  • データをエクスポートする: シークレット インベントリを BigQuery にエクスポートして、詳細な分析とレポートを作成します。

  • シークレットの管理と分析: プロジェクトと組織全体のすべてのシークレットを 1 か所で確認し、構成ミスがあるシークレットや組織のセキュリティ ポリシーに違反しているシークレットを特定します。たとえば、定期的にローテーションされていないシークレットや、適切なアクセス制御が設定されていないシークレットを見つけることができます。

これは Secret Manager ユーザー向けの上級者向けタスクです。このページを読む前に、次の記事を読むことをおすすめします。

Secret Manager へのクエリ

SQL に似たクエリでシークレットを分析するには、シークレットとシークレット バージョンを BigQuery にエクスポートすることをおすすめします。Secret Manager は、Asset Search または Policy Analyzer と統合されていません。これらのクエリは、Google Cloud CLI と BigQuery を使用してアセットを検索します。

制限事項

Cloud Asset Inventory を使用して Secret Manager リソースを分析する場合、次の制限があります。

  • Cloud Asset Inventory では、過去 5 週間のスナップショットのエクスポートと一覧表示のみがサポートされています。

アセットの変更をモニタリングする

Cloud Asset Inventory はリアルタイムの更新を追跡し、これらの変更のモニタリングをサポートしています。リソースが変更されるたびに、一連の構成された Pub/Sub トピックに通知を送信するようにフィードを構成できます。また、Cloud Asset Inventory はフィードで条件の構成をサポートしているため、特定のアセットタイプの特定の変更をモニタリングすることができます。アセットの変更時にワークフローをトリガーする方法については、Pub/Sub ドキュメントをご覧ください。

アセットを BigQuery にエクスポートする

シークレットとシークレット バージョンを BigQuery にエクスポートすると、大量のデータに対して SQL に似たクエリを実行し、アセットに関する有意な分析情報を生成できます。アセットをエクスポートする前に、データセットとサービス アカウントが正しく構成されていることを確認してください。

アセットをエクスポートするには、次のコマンドを実行します。

gcloud

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

  • CONTENT_TYPE: アセットのコンテンツ タイプ(RESOURCE)。
  • PROJECT_ID: 分析するシークレットを含むプロジェクトの ID。
  • SNAPSHOT_TIME: リソースのスナップショットを作成する時間。これは、現在の時刻から過去 5 週間以内にする必要があります。
  • BIGQUERY_PROJECT_ID: BigQuery テーブルが存在するプロジェクトの ID。
  • DATASET_ID: BigQuery データセットの ID。
  • TABLE_NAME: メタデータのエクスポート先のテーブル。存在しない場合は作成されます。

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

Linux、macOS、Cloud Shell

gcloud asset export \
  --content-type=CONTENT_TYPE \
  --project=PROJECT_ID \
  --snapshot-time=SNAPSHOT_TIME \
  --bigquery-table=projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \
  --output-bigquery-force

Windows(PowerShell)

gcloud asset export `
  --content-type=CONTENT_TYPE `
  --project=PROJECT_ID `
  --snapshot-time=SNAPSHOT_TIME `
  --bigquery-table=projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME `
  --output-bigquery-force

Windows(cmd.exe)

gcloud asset export ^
  --content-type=CONTENT_TYPE ^
  --project=PROJECT_ID ^
  --snapshot-time=SNAPSHOT_TIME ^
  --bigquery-table=projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME ^
  --output-bigquery-force

詳細については、BigQuery へのエクスポートをご覧ください。

サンプルクエリ

次のサンプルクエリを使用して、特定のプロパティを持つシークレットとシークレット バージョンを検索します。

過去 2 週間以内に作成されたリージョン シークレット

過去 2 週間に組織に追加されたシークレット(およびそのプロパティ)を見つけます。

BigQuery

  SELECT name, FROM BIGQUERY_TABLE
  WHERE asset_type='secretmanager.googleapis.com/Secret' AND
    resource.location <> "global" AND
    DATE(JSON_VALUE(resource.data, '$.createTime')) > DATE_SUB(CURRENT_DATE(), INTERVAL 2 WEEK);
  

BIGQUERY_TABLE は、このドキュメントのアセットを BigQuery にエクスポートするセクションで、すべてのアセットをエクスポートした BigQuery テーブルのフルパスに置き換えます。

gcloud

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

  • PROJECT_ID: 分析するシークレットを含むプロジェクトの ID

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

Linux、macOS、Cloud Shell

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID \
    --asset-types='secretmanager.googleapis.com/Secret' \
    --snapshot-time=$NOW \
    --content-type='resource' \
    --filter="resource.location != global AND resource.data.createTime>-P2W"

Windows(PowerShell)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID `
    --asset-types='secretmanager.googleapis.com/Secret' `
    --snapshot-time=$NOW `
    --content-type='resource' `
    --filter="resource.location != global AND resource.data.createTime>-P2W"

Windows(cmd.exe)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID ^
    --asset-types='secretmanager.googleapis.com/Secret' ^
    --snapshot-time=$NOW ^
    --content-type='resource' ^
    --filter="resource.location != global AND resource.data.createTime>-P2W"

特定のロケーションのリージョン シークレット

特定のロケーション(us-central1 など)に保存されているすべてのシークレットを検索します。

BigQuery

    SELECT * FROM BIGQUERY_TABLE
    WHERE asset_type='secretmanager.googleapis.com/Secret' AND
      resource.location = "us-central1";
  

BIGQUERY_TABLE は、このドキュメントのアセットを BigQuery にエクスポートするセクションで、すべてのアセットをエクスポートした BigQuery テーブルのフルパスに置き換えます。

gcloud

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

  • PROJECT_ID: 分析するシークレットを含むプロジェクトの ID
  • LOCATION: シークレットの Google Cloud ロケーション

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

Linux、macOS、Cloud Shell

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID \
    --asset-types='secretmanager.googleapis.com/Secret' \
    --snapshot-time=$NOW \
    --content-type='resource' \
    --filter="resource.location = LOCATION AND resource.data.createTime>-P2W"

Windows(PowerShell)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID `
    --asset-types='secretmanager.googleapis.com/Secret' `
    --snapshot-time=$NOW `
    --content-type='resource' `
    --filter="resource.location = LOCATION AND resource.data.createTime>-P2W"

Windows(cmd.exe)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID ^
    --asset-types='secretmanager.googleapis.com/Secret' ^
    --snapshot-time=$NOW ^
    --content-type='resource' ^
    --filter="resource.location = LOCATION AND resource.data.createTime>-P2W"

180 日以上前に作成されたリージョン シークレット バージョン

180 日より前に作成されたすべてのシークレット バージョンを一覧表示します。

BigQuery

    SELECT * FROM BIGQUERY_TABLE
    WHERE asset_type='secretmanager.googleapis.com/SecretVersion'
      resource.location <> "global" AND
      DATE(JSON_VALUE(resource.data, '$.createTime')) < DATE_SUB(CURRENT_DATE(), INTERVAL 180 DAY) AND
      JSON_VALUE(resource.data, '$.state') = "ENABLED";
  

BIGQUERY_TABLE は、このドキュメントのアセットを BigQuery にエクスポートするセクションで、すべてのアセットをエクスポートした BigQuery テーブルのフルパスに置き換えます。

gcloud

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

  • PROJECT_ID: 分析するシークレットを含むプロジェクトの ID

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

Linux、macOS、Cloud Shell

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID \
    --asset-types='secretmanager.googleapis.com/SecretVersion' \
    --snapshot-time=$NOW \
    --content-type='resource' \
    --filter="resource.location != global AND resource.data.createTime < P6M AND resource.data.state = ENABLED"

Windows(PowerShell)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID `
    --asset-types='secretmanager.googleapis.com/SecretVersion' `
    --snapshot-time=$NOW `
    --content-type='resource' `
    --filter="resource.location != global AND resource.data.createTime < P6M AND resource.data.state = ENABLED"

Windows(cmd.exe)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID ^
    --asset-types='secretmanager.googleapis.com/SecretVersion' ^
    --snapshot-time=$NOW ^
    --content-type='resource' ^
    --filter="resource.location != global AND resource.data.createTime < P6M AND resource.data.state = ENABLED"

CMEK が構成されていないリージョン シークレット

顧客管理暗号鍵(CMEK)で暗号化されていないすべてのシークレットを一覧表示します。

BigQuery

    SELECT * FROM BIGQUERY_TABLE
    WHERE asset_type='secretmanager.googleapis.com/Secret'
      resource.location <> "global" AND
      JSON_VALUE(resource.data, "$.customerManagedEncryption.kmsKeyName") IS NOT NULL;
  

BIGQUERY_TABLE は、このドキュメントのアセットを BigQuery にエクスポートするセクションで、すべてのアセットをエクスポートした BigQuery テーブルのフルパスに置き換えます。

gcloud

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

  • PROJECT_ID: 分析するシークレットを含むプロジェクトの ID

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

Linux、macOS、Cloud Shell

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID \
    --asset-types='secretmanager.googleapis.com/Secret' \
    --snapshot-time=$NOW \
    --content-type='resource' \
    --filter="resource.location != global AND resource.data.customerManagedEncryption = NULL"

Windows(PowerShell)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID `
    --asset-types='secretmanager.googleapis.com/Secret' `
    --snapshot-time=$NOW `
    --content-type='resource' `
    --filter="resource.location != global AND resource.data.customerManagedEncryption = NULL"

Windows(cmd.exe)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID ^
    --asset-types='secretmanager.googleapis.com/Secret' ^
    --snapshot-time=$NOW ^
    --content-type='resource' ^
    --filter="resource.location != global AND resource.data.customerManagedEncryption = NULL"

CMEK が構成されたリージョン シークレット

CMEK で暗号化されたすべてのシークレットを一覧表示します。

BigQuery

    SELECT * FROM BIGQUERY_TABLE
    WHERE asset_type='secretmanager.googleapis.com/Secret'
      resource.location <> "global" AND
      JSON_VALUE(resource.data, "$.customerManagedEncryption.kmsKeyName") IS NOT NULL;
  

BIGQUERY_TABLE は、このドキュメントのアセットを BigQuery にエクスポートするセクションで、すべてのアセットをエクスポートした BigQuery テーブルのフルパスに置き換えます。

gcloud

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

  • PROJECT_ID: 分析するシークレットを含むプロジェクトの ID

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

Linux、macOS、Cloud Shell

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID \
    --asset-types='secretmanager.googleapis.com/Secret' \
    --snapshot-time=$NOW \
    --content-type='resource' \
    --filter="resource.location != global AND resource.data.customerManagedEncryption != NULL"

Windows(PowerShell)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID `
    --asset-types='secretmanager.googleapis.com/Secret' `
    --snapshot-time=$NOW `
    --content-type='resource' `
    --filter="resource.location != global AND resource.data.customerManagedEncryption != NULL"

Windows(cmd.exe)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID ^
    --asset-types='secretmanager.googleapis.com/Secret' ^
    --snapshot-time=$NOW ^
    --content-type='resource' ^
    --filter="resource.location != global AND resource.data.customerManagedEncryption != NULL"

特定の CMEK で暗号化されたリージョン シークレット

特定の CMEK で暗号化されたシークレットを検索します。

BigQuery

    SELECT * FROM BIGQUERY_TABLE
    WHERE asset_type='secretmanager.googleapis.com/Secret'
      resource.location <> "global" AND
      JSON_VALUE(resource.data, "$.customerManagedEncryption.kmsKeyName") = KMS_KEY_NAME;
  

次のように置き換えます。

  • BIGQUERY_TABLE: このドキュメントのBigQuery にアセットをエクスポートするセクションで、すべてのアセットをエクスポートした BigQuery テーブルのフルパス。

  • KMS_KEY_NAME: 鍵の ID または完全修飾識別子

gcloud

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

  • PROJECT_ID: 分析するシークレットを含むプロジェクトの ID
  • KMS_KEY_NAME: 鍵の ID または完全修飾識別子

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

Linux、macOS、Cloud Shell

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud beta asset list --project=PROJECT_ID \
    --asset-types='secretmanager.googleapis.com/Secret' \
    --snapshot-time=$NOW \
    --content-type='resource' \
    --filter="resource.location != global AND resource.data.customerManagedEncryption.kmsKeyName=KMS_KEY_NAME"

Windows(PowerShell)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud beta asset list --project=PROJECT_ID `
    --asset-types='secretmanager.googleapis.com/Secret' `
    --snapshot-time=$NOW `
    --content-type='resource' `
    --filter="resource.location != global AND resource.data.customerManagedEncryption.kmsKeyName=KMS_KEY_NAME"

Windows(cmd.exe)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud beta asset list --project=PROJECT_ID ^
    --asset-types='secretmanager.googleapis.com/Secret' ^
    --snapshot-time=$NOW ^
    --content-type='resource' ^
    --filter="resource.location != global AND resource.data.customerManagedEncryption.kmsKeyName=KMS_KEY_NAME"

CMEK が構成されていないリージョン シークレット バージョン

CMEK で暗号化されていない有効なシークレット バージョンをすべて検索します。

BigQuery

    SELECT * FROM BIGQUERY_TABLE
    WHERE asset_type='secretmanager.googleapis.com/SecretVersion'
      resource.location <> "global" AND
      JSON_VALUE(resource.data, "$.customerManagedEncryption.kmsKeyVersionName") IS NULL AND
      JSON_VALUE(resource.data, "$.state") = "ENABLED";
  

BIGQUERY_TABLE は、このドキュメントのアセットを BigQuery にエクスポートするセクションで、すべてのアセットをエクスポートした BigQuery テーブルのフルパスに置き換えます。

gcloud

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

  • PROJECT_ID: 分析するシークレットを含むプロジェクトの ID

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

Linux、macOS、Cloud Shell

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID \
    --asset-types='secretmanager.googleapis.com/SecretVersion' \
    --snapshot-time=$NOW \
    --content-type='resource' \
    --filter="(resource.location != global AND resource.data.customerManagedEncryption.kmsKeyVersionName = NULL) AND resource.data.state=ENABLED"

Windows(PowerShell)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID `
    --asset-types='secretmanager.googleapis.com/SecretVersion' `
    --snapshot-time=$NOW `
    --content-type='resource' `
    --filter="(resource.location != global AND resource.data.customerManagedEncryption.kmsKeyVersionName = NULL) AND resource.data.state=ENABLED"

Windows(cmd.exe)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID ^
    --asset-types='secretmanager.googleapis.com/SecretVersion' ^
    --snapshot-time=$NOW ^
    --content-type='resource' ^
    --filter="(resource.location != global AND resource.data.customerManagedEncryption.kmsKeyVersionName = NULL) AND resource.data.state=ENABLED"

特定の CMEK で暗号化されたリージョン シークレット バージョン

特定の CMEK バージョンで暗号化された有効なシークレット バージョンをすべて一覧表示します。

BigQuery

    SELECT * FROM BIGQUERY_TABLE
    WHERE asset_type='secretmanager.googleapis.com/SecretVersion'
      resource.location <> "global" AND
      JSON_VALUE(resource.data, "$.customerManagedEncryption.kmsKeyVersionName") = KMS_KEY_VERSION_NAME AND
      JSON_VALUE(resource.data, "$.state") = "ENABLED";
  

次のように置き換えます。

  • BIGQUERY_TABLE: このドキュメントのBigQuery にアセットをエクスポートするセクションで、すべてのアセットをエクスポートした BigQuery テーブルのフルパス。

  • KMS_KEY_VERSION_NAME: Cloud Key Management Service 鍵のバージョン番号

gcloud

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

  • PROJECT_ID: 分析するシークレットを含むプロジェクトの ID

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

Linux、macOS、Cloud Shell

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID \
    --asset-types='secretmanager.googleapis.com/SecretVersion' \
    --snapshot-time=$NOW \
    --content-type='resource' \
    --filter="(resource.location != global AND resource.data.customerManagedEncryption.kmsKeyVersionName = KMS_KEY_VERSION_NAME) AND resource.data.state=ENABLED"

Windows(PowerShell)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID `
    --asset-types='secretmanager.googleapis.com/SecretVersion' `
    --snapshot-time=$NOW `
    --content-type='resource' `
    --filter="(resource.location != global AND resource.data.customerManagedEncryption.kmsKeyVersionName = KMS_KEY_VERSION_NAME) AND resource.data.state=ENABLED"

Windows(cmd.exe)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID ^
    --asset-types='secretmanager.googleapis.com/SecretVersion' ^
    --snapshot-time=$NOW ^
    --content-type='resource' ^
    --filter="(resource.location != global AND resource.data.customerManagedEncryption.kmsKeyVersionName = KMS_KEY_VERSION_NAME) AND resource.data.state=ENABLED"

ローテーションが構成されていないリージョン シークレット

ローテーション スケジュールがないすべてのシークレットを検索します。

BigQuery

    SELECT name FROM BIGQUERY_TABLE
    WHERE asset_type='secretmanager.googleapis.com/Secret' AND
      resource.location <> "global" AND
      JSON_EXTRACT(resource.data, '$.rotation') IS NULL;
  

BIGQUERY_TABLE は、このドキュメントのアセットを BigQuery にエクスポートするセクションで、すべてのアセットをエクスポートした BigQuery テーブルのフルパスに置き換えます。

gcloud

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

  • PROJECT_ID: 分析するシークレットを含むプロジェクトの ID

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

Linux、macOS、Cloud Shell

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID \
    --asset-types='secretmanager.googleapis.com/Secret' \
    --snapshot-time=$NOW \
    --content-type='resource' \
    --filter="resource.location != global AND resource.data.rotation = NULL"

Windows(PowerShell)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID `
    --asset-types='secretmanager.googleapis.com/Secret' `
    --snapshot-time=$NOW `
    --content-type='resource' `
    --filter="resource.location != global AND resource.data.rotation = NULL"

Windows(cmd.exe)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID ^
    --asset-types='secretmanager.googleapis.com/Secret' ^
    --snapshot-time=$NOW ^
    --content-type='resource' ^
    --filter="resource.location != global AND resource.data.rotation = NULL"

特定のローテーション期間を持つリージョン シークレット

90 日間に 1 回未満のローテーションがスケジュールされているすべてのシークレットを検索します。

BigQuery

    SELECT *
    FROM BIGQUERY_TABLE
    WHERE asset_type='secretmanager.googleapis.com/Secret' AND
      resource.location <> "global" AND
      CAST(
        TRIM(
          JSON_VALUE(JSON_EXTRACT(resource.data, "$.rotation.rotationPeriod")),"s")
        AS INT64)
    < 86400 * 90 #Rotation period in seconds (86400s in 1 day * 90 days)
  

BIGQUERY_TABLE は、このドキュメントのアセットを BigQuery にエクスポートするセクションで、すべてのアセットをエクスポートした BigQuery テーブルのフルパスに置き換えます。

gcloud

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

  • PROJECT_ID: 分析するシークレットを含むプロジェクトの ID

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

Linux、macOS、Cloud Shell

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
ROTATION_PERIOD_SECONDS=$((90 * 24 * 60 * 60))
gcloud asset list --project=PROJECT_ID \
    --asset-types='secretmanager.googleapis.com/Secret' \
    --snapshot-time=$NOW \
    --content-type='resource' \
    --filter="resource.location != global AND resource.data.rotation != null AND resource.data.rotation.rotationPeriod <= ${ROTATION_PERIOD_SECONDS}s"

Windows(PowerShell)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
ROTATION_PERIOD_SECONDS=$((90 * 24 * 60 * 60))
gcloud asset list --project=PROJECT_ID `
    --asset-types='secretmanager.googleapis.com/Secret' `
    --snapshot-time=$NOW `
    --content-type='resource' `
    --filter="resource.location != global AND resource.data.rotation != null AND resource.data.rotation.rotationPeriod <= ${ROTATION_PERIOD_SECONDS}s"

Windows(cmd.exe)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
ROTATION_PERIOD_SECONDS=$((90 * 24 * 60 * 60))
gcloud asset list --project=PROJECT_ID ^
    --asset-types='secretmanager.googleapis.com/Secret' ^
    --snapshot-time=$NOW ^
    --content-type='resource' ^
    --filter="resource.location != global AND resource.data.rotation != null AND resource.data.rotation.rotationPeriod <= ${ROTATION_PERIOD_SECONDS}s"

30 日以内に期限切れになるリージョン シークレット

30 日以内に期限切れになるシークレットを一覧表示します。

BigQuery

    SELECT * FROM BIGQUERY_TABLE
    WHERE asset_type='secretmanager.googleapis.com/Secret' AND
      resource.location <> "global" AND
      DATE(JSON_VALUE(resource.data, '$.expireTime')) < DATE_ADD(CURRENT_DATE(), INTERVAL 30 DAY);
  

BIGQUERY_TABLE は、このドキュメントのアセットを BigQuery にエクスポートするセクションで、すべてのアセットをエクスポートした BigQuery テーブルのフルパスに置き換えます。

gcloud

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

  • PROJECT_ID: モニタリング対象のアセットを含むプロジェクトの ID

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

Linux、macOS、Cloud Shell

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID \
    --asset-types='secretmanager.googleapis.com/Secret' \
    --snapshot-time=$NOW \
    --content-type='resource' \
    --filter="resource.location != global AND resource.data.expireTime < PD30"

Windows(PowerShell)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID `
    --asset-types='secretmanager.googleapis.com/Secret' `
    --snapshot-time=$NOW `
    --content-type='resource' `
    --filter="resource.location != global AND resource.data.expireTime < PD30"

Windows(cmd.exe)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID ^
    --asset-types='secretmanager.googleapis.com/Secret' ^
    --snapshot-time=$NOW ^
    --content-type='resource' ^
    --filter="resource.location != global AND resource.data.expireTime < PD30"

Pub/Sub トピックが構成されているリージョン シークレット

少なくとも 1 つの Pub/Sub トピックが構成されているすべてのシークレットを一覧表示します。

BigQuery

    SELECT name, ARRAY_LENGTH(JSON_EXTRACT_ARRAY(resource.data, '$.topics')) AS topics_count,
    FROM BIGQUERY_TABLE
    WHERE asset_type='secretmanager.googleapis.com/Secret' AND
      resource.location <> "global" AND
      ARRAY_LENGTH(JSON_EXTRACT_ARRAY(resource.data, '$.topics')) > 0
  

BIGQUERY_TABLE は、このドキュメントのアセットを BigQuery にエクスポートするセクションで、すべてのアセットをエクスポートした BigQuery テーブルのフルパスに置き換えます。

gcloud

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

  • PROJECT_ID: モニタリング対象のアセットを含むプロジェクトの ID

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

Linux、macOS、Cloud Shell

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID \
    --asset-types='secretmanager.googleapis.com/Secret' \
    --snapshot-time=$NOW \
    --content-type='resource' \
    --filter="resource.location != global AND resource.data.topics != NULL"

Windows(PowerShell)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID `
    --asset-types='secretmanager.googleapis.com/Secret' `
    --snapshot-time=$NOW `
    --content-type='resource' `
    --filter="resource.location != global AND resource.data.topics != NULL"

Windows(cmd.exe)

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ")
gcloud asset list --project=PROJECT_ID ^
    --asset-types='secretmanager.googleapis.com/Secret' ^
    --snapshot-time=$NOW ^
    --content-type='resource' ^
    --filter="resource.location != global AND resource.data.topics != NULL"

次のステップ