Dalam topik ini, pelajari cara memanfaatkan Inventaris Aset Cloud untuk menganalisis resource Secret Manager.
Ini adalah topik lanjutan untuk Secret Manager. Sebelum membaca panduan ini, sebaiknya tinjau hal-hal berikut:
- Ringkasan platform untuk memahami lanskap Google Cloud secara keseluruhan
- Ringkasan Secret Manager untuk memahami Secret Manager
- Ringkasan Inventaris Aset Cloud untuk memahami Inventaris Aset Cloud dan melihat fitur pengelolaan aset yang komprehensif
Ringkasan
Secret Manager terintegrasi dengan Inventaris Aset Cloud, yaitu sistem inventaris metadata terkelola milik Google Cloud. Dengan integrasi ini, Anda dapat mengidentifikasi dan mengaudit secret di seluruh organisasi, folder, atau project, serta menemukan konfigurasi apa pun yang tidak sesuai dengan persyaratan organisasi Anda. Panduan ini membahas pemantauan aset, mengekspor aset ke BigQuery, dan contoh kueri Inventaris Aset Cloud melalui resource Secret Manager.
Notes
- Meskipun semua kueri memiliki sampel yang ditulis dengan Google Cloud CLI dan BigQuery, sebaiknya ekspor versi secret dan secret Anda ke BigQuery. Dengan mengekspor aset ke BigQuery, Anda dapat menulis kueri mirip SQL untuk menghasilkan dan menyimpan analisis yang bermakna.
- Secret Manager tidak terintegrasi dengan Asset Search atau Policy Analyzer. Kueri di bawah ini memanfaatkan properti native Google Cloud CLI dan BigQuery untuk menelusuri aset.
- Inventaris Aset Cloud hanya mendukung ekspor dan listingan snapshot dalam 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 sekumpulan topik Pub/Sub yang dikonfigurasi setiap kali resource Anda diubah. Selain itu, Inventaris Aset Cloud mendukung konfigurasi kondisi pada feed, sehingga Anda dapat memantau perubahan tertentu untuk jenis aset tertentu. Lihat dokumentasi Pub/Sub untuk mempelajari cara memicu alur kerja saat perubahan aset.
Mengekspor Aset ke BigQuery
Dengan mengekspor secret dan versi secret ke BigQuery, Anda dapat menjalankan kueri yang mirip SQL pada data dalam jumlah besar dan menghasilkan insight yang berarti tentang aset. Sebelum mengekspor aset, pastikan set data dan akun layanan Anda dikonfigurasi dengan benar. Untuk mengekspor aset Anda, jalankan perintah berikut:
gcloud
$ gcloud asset export \ --content-type CONTENT_TYPE \ --project PROJECT_ID \ --snapshot-time SNAPSHOT_TIME \ --bigquery-table BIGQUERY_TABLE \ --output-bigquery-force
dengan:
- CONTENT_TYPE: Jenis konten aset (
RESOURCE
). - PROJECT_ID: Project ID yang berisi aset yang akan dipantau.
- SNAPSHOT_TIME: Waktu saat mengambil resource snapshot. Ini terjadi antara sekarang dan 5 minggu yang lalu.
- BIGQUERY_TABLE: Tabel untuk mengekspor data, dalam format:
projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME
.
Untuk mengetahui informasi selengkapnya, lihat Mengekspor ke BigQuery.
Contoh Kueri
Rahasia dibuat dalam dua minggu terakhir
Temukan rahasia (dan propertinya) yang ditambahkan ke organisasi Anda dalam dua minggu terakhir:
BigQuery
SELECT name, FROM PROJECT_ID.DATASET_ID.TABLE_NAME WHERE asset_type='secretmanager.googleapis.com/Secret' AND DATE(JSON_VALUE(resource.data, '$.createTime')) > DATE_SUB(CURRENT_DATE(), INTERVAL 2 WEEK);
gcloud
$ 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.data.createTime>-P2W"
Rahasia yang direplikasi secara otomatis
Temukan semua secret yang direplikasi secara otomatis:
BigQuery
SELECT * FROM PROJECT_ID.DATASET_ID.TABLE_NAME WHERE asset_type='secretmanager.googleapis.com/Secret' AND JSON_EXTRACT(resource.data, '$.replication.automatic') IS NOT NULL;
gcloud
$ 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.data.replication.automatic != NULL"
Rahasia direplikasi ke region yang ditentukan
Temukan semua rahasia yang direplikasi ke us-central1
:
BigQuery
SELECT * FROM PROJECT_ID.DATASET_ID.TABLE_NAME 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;
gcloud
$ 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.data.replication.userManaged.replicas.location=us-central1"
Versi secret diaktifkan lebih dari 180 hari
Mencantumkan semua versi secret yang dibuat lebih dari 180 hari yang lalu:
BigQuery
SELECT * FROM PROJECT_ID.DATASET_ID.TABLE_NAME 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";
gcloud
$ NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ") $ gcloud beta 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"
Rahasia tanpa CMEK dikonfigurasi
Cantumkan semua rahasia (otomatis dan dikelola pengguna) yang tidak dienkripsi dengan kunci enkripsi pengelola pelanggan (CMEK):
BigQuery
SELECT * FROM PROJECT_ID.DATASET_ID.TABLE_NAME 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 );
gcloud
$ 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.data.replication.userManaged.replicas.customerManagedEncryption = NULL OR resource.data.replication.automatic.customerManagedEncryption=NULL"
Rahasia dengan CMEK dikonfigurasi
Cantumkan semua secret (otomatis dan dikelola pengguna) yang dienkripsi dengan CMEK:
BigQuery
SELECT * FROM PROJECT_ID.DATASET_ID.TABLE_NAME 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 );
gcloud
$ 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.data.replication.userManaged.replicas.customerManagedEncryption != NULL OR resource.data.replication.automatic.customerManagedEncryption!=NULL"
Rahasia yang dienkripsi dengan CMEK tertentu
Menemukan secret yang merupakan versi secret yang dienkripsi dengan CMEK tertentu:
BigQuery
SELECT * FROM PROJECT_ID.DATASET_ID.TABLE_NAME 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 );
gcloud
$ 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.data.replication.userManaged.replicas.customerManagedEncryption.kmsKeyName=KMS_KEY_NAME"
Versi secret tanpa CMEK dikonfigurasi
Temukan semua versi secret yang diaktifkan dan tidak dienkripsi dengan CMEK:
BigQuery
SELECT * FROM PROJECT_ID.DATASET_ID.TABLE_NAME 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";
gcloud
$ NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ") $ gcloud beta 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"
Versi secret yang dienkripsi dengan CMEK tertentu
Mencantumkan semua versi secret yang diaktifkan dan dienkripsi dengan versi CMEK tertentu:
BigQuery
SELECT * FROM PROJECT_ID.DATASET_ID.TABLE_NAME 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";
gcloud
$ NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ") $ gcloud beta 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"
Rahasia tanpa rotasi dikonfigurasi
Temukan semua secret yang tidak memiliki jadwal rotasi:
BigQuery
SELECT name FROM PROJECT_ID.DATASET_ID.TABLE_NAME WHERE asset_type='secretmanager.googleapis.com/Secret' AND JSON_EXTRACT(resource.data, '$.rotation') IS NULL;
gcloud
$ 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.data.rotation=NULL"
Secret dengan periode rotasi tertentu
Temukan semua rahasia yang dijadwalkan untuk dirotasi kurang dari sekali setiap 90 hari:
BigQuery
SELECT * FROM PROJECT_ID.DATASET_ID.TABLE_NAME 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)
Rahasia yang akan habis masa berlakunya dalam 30 hari ke depan
Buat daftar secret yang akan habis masa berlakunya dalam 30 hari ke depan:
BigQuery
SELECT * FROM PROJECT_ID.DATASET_ID.TABLE_NAME WHERE asset_type='secretmanager.googleapis.com/Secret' AND DATE(JSON_VALUE(resource.data, '$.expireTime')) < DATE_ADD(CURRENT_DATE(), INTERVAL 30 DAY);
gcloud
$ 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.data.expireTime < PD30"
Rahasia dengan topik Pub/Sub dikonfigurasi
Buat daftar semua secret yang memiliki setidaknya satu topik Pub/Sub yang dikonfigurasi:
BigQuery
SELECT name, ARRAY_LENGTH(JSON_EXTRACT_ARRAY(resource.data, '$.topics')) AS topics_count, FROM PROJECT_ID.DATASET_ID.TABLE_NAME WHERE asset_type='secretmanager.googleapis.com/Secret' AND ARRAY_LENGTH(JSON_EXTRACT_ARRAY(resource.data, '$.topics')) > 0
gcloud
$ 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.data.topics !=NULL"
Langkah selanjutnya
- Pelajari lebih lanjut cara menggunakan Secret Manager dengan produk lain.