Dalam topik ini, pelajari cara memanfaatkan Inventaris Aset Cloud untuk menganalisis resource Secret Manager.
Ini adalah topik lanjutan untuk Pengelola Secret. Sebelum membaca panduan ini, sebaiknya tinjau 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 asetnya yang komprehensif
Ringkasan
Secret Manager terintegrasi dengan Cloud Asset Inventory, sistem inventaris metadata dikelola Google Cloud. Dengan integrasi ini, Anda dapat mengidentifikasi dan mengaudit secret di seluruh organisasi, folder, atau project, dan menemukan konfigurasi 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.
Catatan
- Meskipun semua kueri memiliki contoh yang ditulis dengan Google Cloud CLI dan BigQuery, sebaiknya ekspor secret dan versi 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 memanfaatkan properti native Google Cloud CLI dan BigQuery untuk menelusuri aset.
- Inventaris Aset Cloud hanya mendukung ekspor dan listingan snapshot dari lima minggu terakhir.
Memantau Perubahan Aset
Inventaris Aset Cloud melacak update real-time dan mendukung pemantauan perubahan ini. Anda dapat mengonfigurasi feed untuk mengirim notifikasi ke kumpulan topik Pub/Sub yang dikonfigurasi setiap kali ada perubahan pada resource Anda. Selain itu, Inventaris Aset Cloud mendukung konfigurasi kondisi di feed Anda, sehingga Anda dapat memantau perubahan tertentu untuk jenis aset tertentu. Lihat dokumentasi Pub/Sub untuk mempelajari cara memicu alur kerja pada perubahan aset.
Mengekspor Aset ke BigQuery
Dengan mengekspor secret dan versi secret ke BigQuery, Anda dapat menjalankan kueri mirip SQL pada data dalam jumlah besar dan menghasilkan insight yang bermakna tentang aset Anda. Sebelum mengekspor aset, pastikan set data dan akun layanan Anda dikonfigurasi dengan benar. Untuk mengekspor aset, 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 untuk mengambil snapshot resource. Periode ini adalah antara sekarang dan 5 minggu yang lalu.
- BIGQUERY_TABLE: Tabel tujuan ekspor data, dalam format:
projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME
.
Untuk informasi selengkapnya, lihat Mengekspor ke BigQuery.
Contoh Kueri
Secret yang dibuat dalam dua minggu terakhir
Temukan secret (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 asset list --project=PROJECT_ID \ --asset-types='secretmanager.googleapis.com/Secret' \ --snapshot-time=$NOW \ --content-type='resource' \ --filter="resource.data.createTime>-P2W"
Secret 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 asset list --project=PROJECT_ID \ --asset-types='secretmanager.googleapis.com/Secret' \ --snapshot-time=$NOW \ --content-type='resource' \ --filter="resource.data.replication.automatic != NULL"
Secret direplikasi ke region yang ditentukan
Temukan semua secret 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 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"
Mengaktifkan versi secret yang sudah 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 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"
Secret tanpa CMEK yang dikonfigurasi
Cantumkan semua secret (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 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"
Secret dengan CMEK yang dikonfigurasi
Cantumkan semua secret (otomatis dan yang 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 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"
Secret yang dienkripsi dengan CMEK tertentu
Temukan secret yang merupakan versi secret terenkripsi 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 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 yang 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 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 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"
Secret tanpa rotasi yang 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 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 secret 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)
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"
Secret yang akan berakhir masa berlakunya dalam 30 hari ke depan
Mencantumkan secret yang akan berakhir 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 asset list --project=PROJECT_ID \ --asset-types='secretmanager.googleapis.com/Secret' \ --snapshot-time=$NOW \ --content-type='resource' \ --filter="resource.data.expireTime < PD30"
Secret dengan topik Pub/Sub yang dikonfigurasi
Cantumkan 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 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.