Nesta página, explicamos como usar o Inventário de recursos do Cloud para monitorar seus secrets, exportar dados para análise e executar consultas avançadas para receber os insights necessários.
Visão geral
O Inventário de recursos do Cloud analisa seu ambiente Cloud de Confiance by S3NS e registra todas as mudanças nos recursos da nuvem, como máquinas virtuais, bancos de dados, buckets de armazenamento e, neste contexto, seus secrets do Secret Manager. A integração entre o Secret Manager e o Inventário de recursos do Cloud ajuda você a fazer o seguinte:
-
Executar consultas: pesquise segredos específicos ou identifique padrões neles.
-
Configurar alertas: configure o Inventário de recursos do Cloud para enviar notificações ao Pub/Sub quando eventos específicos ocorrerem, como quando segredos são criados, modificados ou excluídos.
-
Exportar dados: exporte seu inventário de secrets para o BigQuery para análise e geração de relatórios detalhados.
-
Gerenciar e analisar seus secrets: veja todos os seus secrets em um só lugar (em todos os projetos e em toda a organização) e identifique aqueles que podem estar mal configurados ou violar as políticas de segurança da organização. Por exemplo, é possível encontrar segredos que não são rotacionados regularmente ou que não têm controles de acesso adequados.
Esta é uma tarefa avançada para usuários do Secret Manager. Antes de ler esta página, recomendamos que você leia o seguinte:
-
Visão geral do Secret Manager para entender os principais conceitos e recursos do Secret Manager
-
Visão geral do Inventário de recursos do Cloud para entender o Inventário de recursos do Cloud e conhecer os recursos abrangentes de gerenciamento de recursos
Consultar o Secret Manager
Para analisar seus secrets com consultas semelhantes a SQL, recomendamos que você exporte as versões do secret e do secret para o BigQuery. O Secret Manager não é integrado à Busca de recursos ou à Análise de políticas. Essas consultas usam a Google Cloud CLI e o BigQuery para pesquisar seus recursos.
Limitações
O uso do Inventário de recursos do Cloud para analisar recursos do Secret Manager tem a seguinte limitação:
-
O Inventário de recursos do Cloud só é compatível com exportação e listagem de snapshots das últimas cinco semanas.
Monitorar mudanças de recurso
O Inventário de recursos do Cloud rastreia atualizações em tempo real e é compatível com o monitoramento dessas mudanças. É possível configurar feeds para enviar notificações a um conjunto de tópicos do Pub/Sub configurados sempre que houver uma modificação nos seus recursos. Além disso, o Inventário de recursos do Cloud é compatível com a configuração de condições nos seus feeds para que você possa monitorar mudanças específicas em determinados tipos de recursos. Para saber como acionar fluxos de trabalho em mudanças de recursos, consulte a documentação do Pub/Sub.
Exportar recursos para o BigQuery
A exportação de secrets e versões de secrets para o BigQuery permite executar consultas semelhantes a SQL em grandes quantidades de dados e produzir insights significativos sobre seus recursos. Antes de exportar seus recursos, verifique se o conjunto de dados e as contas de serviço estão configurados corretamente.
Para exportar seus recursos, execute o seguinte comando:
gcloud
Antes de usar os dados do comando abaixo, faça estas substituições:
- CONTENT_TYPE: o tipo de conteúdo do recurso (
RESOURCE). - PROJECT_ID: o ID do projeto que contém os segredos a serem analisados.
- SNAPSHOT_TIME: o horário em que os recursos serão capturados. Isso pode ser feito entre o momento atual e cinco semanas atrás.
- BIGQUERY_PROJECT_ID: o ID do projeto em que a tabela do BigQuery está.
- DATASET_ID: o ID do conjunto de dados do BigQuery.
- TABLE_NAME: a tabela para a qual você está exportando os metadados. Se ele não existir, será criado.
Execute o seguinte comando:
Linux, macOS ou 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
Para mais informações, consulte Como exportar para o BigQuery.
Amostras de consultas
Use estas consultas de exemplo para encontrar chaves secretas e versões de chaves secretas com propriedades específicas.
Secrets criados nas últimas duas semanas
Encontre os secrets (e as propriedades deles) que foram adicionados à sua organização nas últimas duas semanas.
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);
Substitua BIGQUERY_TABLE pelo caminho completo da tabela do BigQuery para onde você exportou todos os recursos na seção Exportar recursos para o BigQuery deste 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"
Substitua PROJECT_ID pelo ID do projeto que contém os segredos a serem analisados.
Secrets replicados automaticamente
Encontre todos os secrets replicados automaticamente.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' AND JSON_EXTRACT(resource.data, '$.replication.automatic') IS NOT NULL;
Substitua BIGQUERY_TABLE pelo caminho completo da tabela do BigQuery para onde você exportou todos os recursos na seção Exportar recursos para o BigQuery deste 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"
Substitua PROJECT_ID pelo ID do projeto que contém os segredos a serem analisados.
Secrets replicados para um local específico
Encontre todos os segredos armazenados em um local específico, como 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;
Substitua BIGQUERY_TABLE pelo caminho completo da tabela do BigQuery para onde você exportou todos os recursos na seção Exportar recursos para o BigQuery deste 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"
Substitua:
- PROJECT_ID: o ID do projeto que contém os segredos a serem analisados
- LOCATION: o Cloud de Confiance by S3NS local do secret
Versões secretas criadas há mais de 180 dias
Liste todas as versões secretas que foram criadas há mais de 180 dias.
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";
Substitua BIGQUERY_TABLE pelo caminho completo da tabela do BigQuery para onde você exportou todos os recursos na seção Exportar recursos para o BigQuery deste 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"
Substitua PROJECT_ID pelo ID do projeto que contém os segredos a serem analisados.
Secrets sem CMEK configurada
Liste todos os secrets que não são criptografados com chaves de criptografia gerenciadas pelo 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 );
Substitua BIGQUERY_TABLE pelo caminho completo da tabela do BigQuery para onde você exportou todos os recursos na seção Exportar recursos para o BigQuery deste 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"
Substitua PROJECT_ID pelo ID do projeto que contém os segredos a serem analisados.
Secrets com CMEK configurada
Liste todos os secrets criptografados com 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 );
Substitua BIGQUERY_TABLE pelo caminho completo da tabela do BigQuery para onde você exportou todos os recursos na seção Exportar recursos para o BigQuery deste 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"
Substitua PROJECT_ID pelo ID do projeto que contém os segredos a serem analisados.
Secrets criptografados com uma CMEK específica
Encontre secrets criptografados com uma CMEK específica.
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 );
Substitua:
-
BIGQUERY_TABLE: o caminho completo para a tabela do BigQuery em que você exportou todos os recursos na seção Exportar recursos para o BigQuery deste documento.
-
KMS_KEY_NAME: o ID da chave ou o identificador totalmente qualificado dela.
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"
Substitua:
- PROJECT_ID: o ID do projeto que contém os segredos a serem analisados
- KMS_KEY_NAME: o ID da chave ou o identificador totalmente qualificado dela.
Versões de secret sem a CMEK configurada
Encontre todas as versões secretas ativadas que não estão criptografadas com 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";
Substitua BIGQUERY_TABLE pelo caminho completo da tabela do BigQuery para onde você exportou todos os recursos na seção Exportar recursos para o BigQuery deste 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"
Substitua PROJECT_ID pelo ID do projeto que contém os segredos a serem analisados.
Versões de secret criptografadas com uma CMEK específica
Liste todas as versões secretas ativadas criptografadas com uma versão específica da 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";
Substitua:
-
BIGQUERY_TABLE: o caminho completo para a tabela do BigQuery em que você exportou todos os recursos na seção Exportar recursos para o BigQuery deste documento.
-
KMS_KEY_VERSION_NAME: o número da versão da chave de serviço do 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"
Substitua:
- PROJECT_ID: o ID do projeto que contém os segredos a serem analisados
- KMS_KEY_VERSION_NAME: o ID da versão da chave.
Secrets sem rotação configurada
Encontre todos os secrets que não têm uma programação de rotação.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' AND JSON_EXTRACT(resource.data, '$.rotation') IS NULL;
Substitua BIGQUERY_TABLE pelo caminho completo da tabela do BigQuery para onde você exportou todos os recursos na seção Exportar recursos para o BigQuery deste 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"
Substitua PROJECT_ID pelo ID do projeto que contém os segredos a serem analisados.
Secrets com um período de rotação específico
Encontre todos os secrets programados a serem alterados menos de uma vez a cada 90 dias:
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)
Substitua BIGQUERY_TABLE pelo caminho completo da tabela do BigQuery para onde você exportou todos os recursos na seção Exportar recursos para o BigQuery deste 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"
Substitua PROJECT_ID pelo ID do projeto que contém os segredos a serem analisados.
Chaves que expiram nos próximos 30 dias
Liste as chaves secretas que expirarão nos próximos 30 dias.
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);
Substitua BIGQUERY_TABLE pelo caminho completo da tabela do BigQuery para onde você exportou todos os recursos na seção Exportar recursos para o BigQuery deste 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"
Substitua PROJECT_ID pelo ID do projeto que contém os segredos a serem analisados.
Secrets com um tópico do Pub/Sub configurado
Liste todos os secrets que tenham pelo menos um tópico do Pub/Sub configurado.
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
Substitua BIGQUERY_TABLE pelo caminho completo da tabela do BigQuery para onde você exportou todos os recursos na seção Exportar recursos para o BigQuery deste 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"
Substitua PROJECT_ID pelo ID do projeto que contém os segredos a serem analisados.
A seguir
- Saiba mais sobre como usar o Secret Manager com outros produtos.