Halaman ini menjelaskan cara menggunakan Inventaris Aset Cloud untuk memantau secret, mengekspor data untuk dianalisis, dan menjalankan kueri yang efektif untuk mendapatkan insight yang Anda perlukan.
Ringkasan
Cloud Asset Inventory menganalisis lingkungan Anda dan mencatat setiap perubahan pada resource cloud Anda, seperti virtual machine, database, bucket penyimpanan, dan dalam konteks ini, secret Secret Manager Anda. Google Cloud Integrasi antara Secret Manager dan Cloud Asset Inventory membantu Anda melakukan hal berikut:
-
Menjalankan kueri: Cari rahasia tertentu atau identifikasi pola di seluruh rahasia Anda.
-
Siapkan pemberitahuan: Konfigurasi Inventaris Aset Cloud untuk mengirim notifikasi ke Pub/Sub saat peristiwa tertentu terjadi, seperti saat secret dibuat, diubah, atau dihapus.
-
Mengekspor data: Ekspor inventaris rahasia Anda ke BigQuery untuk analisis mendalam dan pelaporan.
-
Mengelola dan menganalisis rahasia Anda: Lihat semua rahasia Anda di satu tempat (di seluruh project dan seluruh organisasi Anda) dan identifikasi rahasia yang mungkin salah dikonfigurasi atau melanggar kebijakan keamanan organisasi Anda. Misalnya, Anda dapat menemukan secret yang tidak diubah secara berkala atau tidak memiliki kontrol akses yang tepat.
Ini adalah tugas lanjutan untuk pengguna Secret Manager. Sebelum membaca halaman ini, sebaiknya Anda membaca halaman berikut:
-
Ringkasan Secret Manager untuk memahami konsep dan fitur utama Secret Manager
-
Ringkasan Cloud Asset Inventory untuk memahami Cloud Asset Inventory dan melihat fitur pengelolaan asetnya yang komprehensif
Mengirim kueri ke Secret Manager
Untuk menganalisis secret Anda dengan kueri mirip SQL, sebaiknya ekspor secret dan versi secret Anda ke BigQuery. Secret Manager tidak terintegrasi dengan Penelusuran Aset atau Penganalisis Kebijakan. Kueri ini menggunakan Google Cloud CLI dan BigQuery untuk menelusuri aset Anda.
Batasan
Penggunaan Inventaris Aset Cloud untuk menganalisis resource Secret Manager memiliki batasan berikut:
-
Inventaris Aset Cloud mendukung pengeksporan dan pencantuman snapshot hanya untuk lima minggu terakhir.
Memantau perubahan aset
Inventaris Aset Cloud melacak pembaruan real-time dan mendukung pemantauan perubahan ini. Anda dapat mengonfigurasi feed untuk mengirim notifikasi ke serangkaian topik Pub/Sub yang dikonfigurasi setiap kali ada modifikasi pada resource Anda. Selain itu, Inventaris Aset Cloud mendukung konfigurasi kondisi pada feed Anda, sehingga Anda dapat memantau perubahan tertentu untuk jenis aset tertentu. Untuk mempelajari cara memicu alur kerja pada perubahan aset, lihat dokumentasi Pub/Sub.
Mengekspor aset ke BigQuery
Mengekspor rahasia dan versi rahasia ke BigQuery memungkinkan Anda menjalankan kueri mirip SQL atas sejumlah besar data dan menghasilkan insight yang bermakna tentang aset Anda. Sebelum Anda mengekspor aset, pastikan kumpulan data dan akun layanan Anda dikonfigurasi dengan benar.
Untuk mengekspor aset, jalankan perintah berikut:
gcloud
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
- CONTENT_TYPE: jenis konten aset (
RESOURCE
). - PROJECT_ID: ID project yang berisi rahasia yang akan dianalisis.
- SNAPSHOT_TIME: time saat membuat snapshot resource. Rentang waktu ini bisa antara waktu saat ini dan 5 minggu sebelumnya.
- BIGQUERY_PROJECT_ID: ID project tempat tabel BigQuery berada.
- DATASET_ID: ID set data BigQuery.
- TABLE_NAME: tabel tempat Anda mengekspor metadata. Jika tidak ada, maka akan dibuat.
Jalankan perintah berikut:
Linux, macOS, atau 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
Untuk mengetahui informasi selengkapnya, lihat Mengekspor ke BigQuery.
Sampel kueri
Gunakan contoh kueri ini untuk menemukan secret dan versi secret dengan properti tertentu.
Secret yang dibuat dalam dua minggu terakhir
Temukan secret (dan propertinya) yang ditambahkan ke organisasi Anda dalam dua minggu terakhir.
BigQuery
SELECT name, FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' AND DATE(JSON_VALUE(resource.data, '$.createTime')) > DATE_SUB(CURRENT_DATE(), INTERVAL 2 WEEK);
Ganti BIGQUERY_TABLE dengan jalur lengkap ke tabel BigQuery tempat Anda mengekspor semua aset di bagian Mengekspor aset ke BigQuery dalam dokumen ini.
gcloud
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.data.createTime>-P2W"
Ganti PROJECT_ID dengan ID project yang berisi secret yang akan dianalisis.
Rahasia direplikasi secara otomatis
Menemukan semua secret yang direplikasi secara otomatis.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' AND JSON_EXTRACT(resource.data, '$.replication.automatic') IS NOT NULL;
Ganti BIGQUERY_TABLE dengan jalur lengkap ke tabel BigQuery tempat Anda mengekspor semua aset di bagian Mengekspor aset ke BigQuery dalam dokumen ini.
gcloud
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.data.replication.automatic != NULL"
Ganti PROJECT_ID dengan ID project yang berisi secret yang akan dianalisis.
Secret direplikasi ke lokasi tertentu
Temukan semua secret yang disimpan di lokasi tertentu, seperti us-central1
.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE ( SELECT * FROM UNNEST(JSON_EXTRACT_ARRAY(resource.data, '$.replication.userManaged.replicas')) AS location WHERE JSON_VALUE(JSON_EXTRACT(location, '$.location')) = "us-central1" ) IS NOT NULL;
Ganti BIGQUERY_TABLE dengan jalur lengkap ke tabel BigQuery tempat Anda mengekspor semua aset di bagian Mengekspor aset ke BigQuery dalam dokumen ini.
gcloud
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.data.replication.userManaged.replicas.location=LOCATION"
Ganti kode berikut:
- PROJECT_ID: ID project yang berisi rahasia yang akan dianalisis
- LOCATION: Google Cloud lokasi secret
Versi secret yang dibuat lebih dari 180 hari yang lalu
Mencantumkan semua versi secret yang dibuat lebih dari 180 hari yang lalu.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/SecretVersion' AND DATE(JSON_VALUE(resource.data, '$.createTime')) < DATE_SUB(CURRENT_DATE(), INTERVAL 180 DAY) AND JSON_VALUE(resource.data, '$.state') = "ENABLED";
Ganti BIGQUERY_TABLE dengan jalur lengkap ke tabel BigQuery tempat Anda mengekspor semua aset di bagian Mengekspor aset ke BigQuery dalam dokumen ini.
gcloud
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.data.createTime < P6M AND resource.data.state=ENABLED"
Ganti PROJECT_ID dengan ID project yang berisi secret yang akan dianalisis.
Secret tanpa CMEK yang dikonfigurasi
Mencantumkan semua secret yang tidak dienkripsi dengan kunci enkripsi yang dikelola pelanggan (CMEK):
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' AND ( JSON_VALUE(resource.data, "$.replication.automatic.customerManagedEncryption.kmsKeyName") IS NULL AND JSON_VALUE(resource.data, "$.replication.userManaged.replicas[0].customerManagedEncryption.kmsKeyName") IS NULL );
Ganti BIGQUERY_TABLE dengan jalur lengkap ke tabel BigQuery tempat Anda mengekspor semua aset di bagian Mengekspor aset ke BigQuery dalam dokumen ini.
gcloud
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.data.createTime < P6M AND resource.data.state=ENABLED"
Ganti PROJECT_ID dengan ID project yang berisi secret yang akan dianalisis.
Secret dengan CMEK yang dikonfigurasi
Mencantumkan semua secret yang dienkripsi dengan CMEK.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' AND ( JSON_VALUE(resource.data, "$.replication.automatic.customerManagedEncryption.kmsKeyName") IS NOT NULL OR JSON_VALUE(resource.data, "$.replication.userManaged.replicas[0].customerManagedEncryption.kmsKeyName") IS NOT NULL );
Ganti BIGQUERY_TABLE dengan jalur lengkap ke tabel BigQuery tempat Anda mengekspor semua aset di bagian Mengekspor aset ke BigQuery dalam dokumen ini.
gcloud
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.data.replication.userManaged.replicas.customerManagedEncryption != NULL OR resource.data.replication.automatic.customerManagedEncryption!=NULL"
Ganti PROJECT_ID dengan ID project yang berisi secret yang akan dianalisis.
Secret yang dienkripsi dengan CMEK tertentu
Menemukan secret yang dienkripsi dengan CMEK tertentu.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' AND ( JSON_VALUE(resource.data, "$.replication.automatic.customerManagedEncryption.kmsKeyName") = KMS_KEY_NAME OR JSON_VALUE(resource.data, "$.replication.userManaged.replicas[0].customerManagedEncryption.kmsKeyName") = KMS_KEY_NAME );
Ganti kode berikut:
-
BIGQUERY_TABLE: jalur lengkap ke tabel BigQuery tempat Anda mengekspor semua aset di bagian Mengekspor aset ke BigQuery dalam dokumen ini.
-
KMS_KEY_NAME: ID kunci atau ID yang memenuhi syarat sepenuhnya untuk kunci
gcloud
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.data.replication.userManaged.replicas.customerManagedEncryption.kmsKeyName=KMS_KEY_NAME"
Ganti kode berikut:
- PROJECT_ID: ID project yang berisi rahasia yang akan dianalisis
- KMS_KEY_NAME: ID kunci atau ID yang memenuhi syarat sepenuhnya untuk kunci
Versi rahasia tanpa CMEK yang dikonfigurasi
Temukan semua versi rahasia yang diaktifkan yang tidak dienkripsi dengan CMEK.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/SecretVersion' AND ( JSON_VALUE(resource.data, "$.replicationStatus.automatic.customerManagedEncryption.kmsKeyVersionName") IS NULL AND JSON_VALUE(resource.data, "$.replicationStatus.userManaged.replicas[0].customerManagedEncryption.kmsKeyVersionName") IS NULL ) AND JSON_VALUE(resource.data, "$.state") = "ENABLED";
Ganti BIGQUERY_TABLE dengan jalur lengkap ke tabel BigQuery tempat Anda mengekspor semua aset di bagian Mengekspor aset ke BigQuery dalam dokumen ini.
gcloud
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.data.replicationStatus.userManaged.replicas.customerManagedEncryption = NULL OR resource.data.replicationStatus.automatic.customerManagedEncryption=NULL) AND resource.data.state=ENABLED"
Ganti PROJECT_ID dengan ID project yang berisi secret yang akan dianalisis.
Versi rahasia yang dienkripsi dengan CMEK tertentu
Mencantumkan semua versi rahasia yang diaktifkan dan dienkripsi dengan versi CMEK tertentu.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/SecretVersion' AND ( JSON_VALUE(resource.data, "$.replicationStatus.automatic.customerManagedEncryption.kmsKeyVersionName") = KMS_KEY_VERSION_NAME OR JSON_VALUE(resource.data, "$.replicationStatus.userManaged.replicas[0].customerManagedEncryption.kmsKeyVersionName") = KMS_KEY_VERSION_NAME ) AND JSON_VALUE(resource.data,"$.state")="ENABLED";
Ganti kode berikut:
-
BIGQUERY_TABLE: jalur lengkap ke tabel BigQuery tempat Anda mengekspor semua aset di bagian Mengekspor aset ke BigQuery dalam dokumen ini.
-
KMS_KEY_VERSION_NAME: nomor versi kunci Cloud Key Management Service
gcloud
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.data.replicationStatus.userManaged.replicas.customerManagedEncryption.kmsKeyVersionName=$FULL_KMS_KEY_VERSION_RESOURCE_NAME AND resource.data.status=ENABLED"
Ganti kode berikut:
- PROJECT_ID: ID project yang berisi rahasia yang akan dianalisis
- KMS_KEY_VERSION_NAME: ID versi kunci
Secret tanpa rotasi yang dikonfigurasi
Temukan semua secret yang tidak memiliki jadwal rotasi.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' AND JSON_EXTRACT(resource.data, '$.rotation') IS NULL;
Ganti BIGQUERY_TABLE dengan jalur lengkap ke tabel BigQuery tempat Anda mengekspor semua aset di bagian Mengekspor aset ke BigQuery dalam dokumen ini.
gcloud
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.data.rotation=NULL"
Ganti PROJECT_ID dengan ID project yang berisi secret yang akan dianalisis.
Secret dengan periode rotasi tertentu
Temukan semua rahasia yang dijadwalkan untuk dirotasi kurang dari sekali setiap 90 hari:
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE 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)
Ganti BIGQUERY_TABLE dengan jalur lengkap ke tabel BigQuery tempat Anda mengekspor semua aset di bagian Mengekspor aset ke BigQuery dalam dokumen ini.
gcloud
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.data.rotation != null AND resource.data.rotation.rotationPeriod < ${ROTATION_PERIOD_SECONDS}s"
Ganti PROJECT_ID dengan ID project yang berisi secret yang akan dianalisis.
Secret yang akan berakhir dalam 30 hari ke depan
Mencantumkan secret yang akan berakhir dalam 30 hari ke depan.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' AND DATE(JSON_VALUE(resource.data, '$.expireTime')) < DATE_ADD(CURRENT_DATE(), INTERVAL 30 DAY);
Ganti BIGQUERY_TABLE dengan jalur lengkap ke tabel BigQuery tempat Anda mengekspor semua aset di bagian Mengekspor aset ke BigQuery dalam dokumen ini.
gcloud
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.data.expireTime < PD30"
Ganti PROJECT_ID dengan ID project yang berisi secret yang akan dianalisis.
Secret dengan topik Pub/Sub yang dikonfigurasi
Mencantumkan semua secret yang telah mengonfigurasi setidaknya satu topik 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 ARRAY_LENGTH(JSON_EXTRACT_ARRAY(resource.data, '$.topics')) > 0
Ganti BIGQUERY_TABLE dengan jalur lengkap ke tabel BigQuery tempat Anda mengekspor semua aset di bagian Mengekspor aset ke BigQuery dalam dokumen ini.
gcloud
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.data.topics !=NULL"
Ganti PROJECT_ID dengan ID project yang berisi secret yang akan dianalisis.
Langkah berikutnya
- Pelajari lebih lanjut cara menggunakan Secret Manager dengan produk lain.