Questa pagina spiega come utilizzare Cloud Asset Inventory per monitorare i secret, esportare i dati per l'analisi ed eseguire query avanzate per ottenere le informazioni di cui hai bisogno.
Panoramica
Cloud Asset Inventory analizza il tuo ambiente Google Cloud e registra eventuali modifiche alle tue risorse cloud, come macchine virtuali, database, bucket di archiviazione e, in questo contesto, i secret di Secret Manager. L'integrazione tra Secret Manager e Cloud Asset Inventory ti aiuta a:
-
Esegui query: cerca segreti specifici o identifica pattern nei tuoi segreti.
-
Configura gli avvisi: configura Cloud Asset Inventory per inviare notifiche a Pub/Sub quando si verificano eventi specifici, ad esempio quando i secret vengono creati, modificati o eliminati.
-
Esportare i dati: esporta il tuo inventario segreto in BigQuery per analisi approfondite e report.
-
Gestisci e analizza i tuoi secret: visualizza tutti i tuoi secret in un unico posto (in tutti i progetti e in tutta l'organizzazione) e identifica i secret che potrebbero essere configurati in modo errato o violare le norme di sicurezza della tua organizzazione. Ad esempio, puoi trovare secret che non vengono ruotati regolarmente o che non dispongono di controlli dell'accesso adeguati.
Si tratta di un'attività avanzata per gli utenti di Secret Manager. Prima di leggere questa pagina, ti consigliamo di leggere quanto segue:
-
Panoramica di Secret Manager per comprendere i concetti e le funzionalità chiave di Secret Manager
-
Panoramica di Cloud Asset Inventory per comprendere Cloud Asset Inventory e visualizzare le sue funzionalità complete di gestione degli asset
Esecuzione di query su Secret Manager
Per analizzare i segreti con query di tipo SQL, ti consigliamo di esportare il segreto e le versioni del segreto in BigQuery. Secret Manager non è integrato con Asset Search o Analizzatore policy. Queste query utilizzano Google Cloud CLI e BigQuery per cercare gli asset.
Limitazioni
L'utilizzo di Cloud Asset Inventory per analizzare le risorse Secret Manager presenta la seguente limitazione:
-
Cloud Asset Inventory supporta l'esportazione e l'elenco degli snapshot solo per le ultime cinque settimane.
Monitorare le modifiche agli asset
Cloud Asset Inventory tiene traccia degli aggiornamenti in tempo reale e supporta il monitoraggio di queste modifiche. Puoi configurare i feed per inviare notifiche a un insieme di argomenti Pub/Sub configurati ogni volta che viene apportata una modifica alle tue risorse. Inoltre, Cloud Asset Inventory supporta la configurazione delle condizioni nei feed, in modo da poter monitorare modifiche specifiche per determinati tipi di asset. Per scoprire come attivare i flussi di lavoro in caso di modifiche agli asset, consulta la documentazione di Pub/Sub.
Esportare asset in BigQuery
L'esportazione dei segreti e delle relative versioni in BigQuery ti consente di eseguire query di tipo SQL su grandi quantità di dati e ottenere informazioni significative sulle tue risorse. Prima di esportare gli asset, assicurati che il set di dati e gli account di servizio siano configurati correttamente.
Per esportare gli asset, esegui questo comando:
gcloud
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
- CONTENT_TYPE: il tipo di contenuti dell'asset (
RESOURCE
). - PROJECT_ID: l'ID del progetto contenente i segreti da analizzare.
- SNAPSHOT_TIME: l'ora in cui creare lo snapshot delle risorse. Questo periodo può essere compreso tra l'ora corrente e 5 settimane nel passato.
- BIGQUERY_PROJECT_ID: l'ID del progetto in cui si trova la tabella BigQuery.
- DATASET_ID: l'ID del set di dati BigQuery.
- TABLE_NAME: la tabella in cui esportare i metadati. Se non esiste, viene creato.
Esegui questo comando:
Linux, macOS o 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
Per ulteriori informazioni, vedi Esportazione in BigQuery.
Query di esempio
Utilizza queste query di esempio per trovare secret e versioni dei secret con proprietà specifiche.
Secret creati nelle ultime due settimane
Trova i segreti (e le relative proprietà) aggiunti alla tua organizzazione nelle ultime due settimane.
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);
Sostituisci BIGQUERY_TABLE con il percorso completo della tabella BigQuery in cui hai esportato tutti gli asset nella sezione Esportare asset in BigQuery di questo documento.
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"
Sostituisci PROJECT_ID con l'ID del progetto contenente i segreti da analizzare.
Segreti replicati automaticamente
Trova tutti i segreti replicati automaticamente.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' AND JSON_EXTRACT(resource.data, '$.replication.automatic') IS NOT NULL;
Sostituisci BIGQUERY_TABLE con il percorso completo della tabella BigQuery in cui hai esportato tutti gli asset nella sezione Esportare asset in BigQuery di questo documento.
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"
Sostituisci PROJECT_ID con l'ID del progetto contenente i segreti da analizzare.
Segreti replicati in una posizione specifica
Trova tutti i secret archiviati in una posizione specifica, ad esempio 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;
Sostituisci BIGQUERY_TABLE con il percorso completo della tabella BigQuery in cui hai esportato tutti gli asset nella sezione Esportare asset in BigQuery di questo documento.
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"
Sostituisci quanto segue:
- PROJECT_ID: l'ID del progetto contenente i secret da analizzare
- LOCATION: la Google Cloud posizione del secret
Versioni dei secret create più di 180 giorni fa
Elenca tutte le versioni del secret create più di 180 giorni fa.
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";
Sostituisci BIGQUERY_TABLE con il percorso completo della tabella BigQuery in cui hai esportato tutti gli asset nella sezione Esportare asset in BigQuery di questo documento.
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"
Sostituisci PROJECT_ID con l'ID del progetto contenente i segreti da analizzare.
Secret senza CMEK configurata
Elenca tutti i secret non criptati con chiavi di crittografia gestite dal cliente (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 );
Sostituisci BIGQUERY_TABLE con il percorso completo della tabella BigQuery in cui hai esportato tutti gli asset nella sezione Esportare asset in BigQuery di questo documento.
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"
Sostituisci PROJECT_ID con l'ID del progetto contenente i segreti da analizzare.
Secret con CMEK configurata
Elenca tutti i secret criptati con 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 );
Sostituisci BIGQUERY_TABLE con il percorso completo della tabella BigQuery in cui hai esportato tutti gli asset nella sezione Esportare asset in BigQuery di questo documento.
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"
Sostituisci PROJECT_ID con l'ID del progetto contenente i segreti da analizzare.
Secret criptati con una CMEK specifica
Trova i secret criptati con una CMEK specifica.
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 );
Sostituisci quanto segue:
-
BIGQUERY_TABLE: il percorso completo della tabella BigQuery in cui hai esportato tutti gli asset nella sezione Esportare asset in BigQuery di questo documento.
-
KMS_KEY_NAME: l'ID della chiave o l'identificatore completo della chiave
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"
Sostituisci quanto segue:
- PROJECT_ID: l'ID del progetto contenente i secret da analizzare
- KMS_KEY_NAME: l'ID della chiave o l'identificatore completo della chiave
Versioni secret senza CMEK configurata
Trova tutte le versioni del secret abilitate che non sono criptate con 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";
Sostituisci BIGQUERY_TABLE con il percorso completo della tabella BigQuery in cui hai esportato tutti gli asset nella sezione Esportare asset in BigQuery di questo documento.
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"
Sostituisci PROJECT_ID con l'ID del progetto contenente i segreti da analizzare.
Versioni dei secret criptate con una CMEK specifica
Elenca tutte le versioni del secret abilitate criptate con una specifica versione CMEK.
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";
Sostituisci quanto segue:
-
BIGQUERY_TABLE: il percorso completo della tabella BigQuery in cui hai esportato tutti gli asset nella sezione Esportare asset in BigQuery di questo documento.
-
KMS_KEY_VERSION_NAME: il numero di versione della chiave 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"
Sostituisci quanto segue:
- PROJECT_ID: l'ID del progetto contenente i secret da analizzare
- KMS_KEY_VERSION_NAME: l'ID della versione della chiave
Secret senza rotazione configurata
Trova tutti i secret che non hanno una pianificazione della rotazione.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' AND JSON_EXTRACT(resource.data, '$.rotation') IS NULL;
Sostituisci BIGQUERY_TABLE con il percorso completo della tabella BigQuery in cui hai esportato tutti gli asset nella sezione Esportare asset in BigQuery di questo documento.
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"
Sostituisci PROJECT_ID con l'ID del progetto contenente i segreti da analizzare.
Secret con un periodo di rotazione specifico
Trova tutti i secret pianificati per essere ruotati meno di una volta ogni 90 giorni:
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)
Sostituisci BIGQUERY_TABLE con il percorso completo della tabella BigQuery in cui hai esportato tutti gli asset nella sezione Esportare asset in BigQuery di questo documento.
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"
Sostituisci PROJECT_ID con l'ID del progetto contenente i segreti da analizzare.
Segreti che scadranno nei prossimi 30 giorni
Elenca i segreti che scadranno nei prossimi 30 giorni.
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);
Sostituisci BIGQUERY_TABLE con il percorso completo della tabella BigQuery in cui hai esportato tutti gli asset nella sezione Esportare asset in BigQuery di questo documento.
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"
Sostituisci PROJECT_ID con l'ID del progetto contenente i segreti da analizzare.
Secret con un argomento Pub/Sub configurato
Elenca tutti i secret per cui è configurato almeno un argomento 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
Sostituisci BIGQUERY_TABLE con il percorso completo della tabella BigQuery in cui hai esportato tutti gli asset nella sezione Esportare asset in BigQuery di questo documento.
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"
Sostituisci PROJECT_ID con l'ID del progetto contenente i segreti da analizzare.
Passaggi successivi
- Scopri di più sull'utilizzo di Secret Manager con altri prodotti.