Esta página explica como usar o Inventário de recursos do Cloud para monitorar seus segredos, exportar dados para análise e executar consultas eficientes para receber os insights necessários.
Visão geral
O inventário de recursos do Cloud analisa o Google Cloud ambiente e registra todas as mudanças nos recursos da nuvem, como máquinas virtuais, bancos de dados, buckets de armazenamento e, neste contexto, os segredos 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 entre eles.
-
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 forem criados, modificados ou excluídos.
-
Exportar dados: exporte seu inventário secreto para o BigQuery para análise detalhada e geração de relatórios.
-
Gerenciar e analisar seus segredos: confira todos os segredos em um só lugar (em projetos e em toda a organização) e identifique segredos que podem estar configurados incorretamente ou violar as políticas de segurança da organização. Por exemplo, é possível encontrar segredos que não são trocados regularmente ou que não têm controles de acesso adequados.
Esta é uma tarefa avançada para usuários do Gerenciador de secrets. 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 conferir os recursos abrangentes de gerenciamento de recursos.
Como consultar o Secret Manager
Para analisar seus segredos com consultas semelhantes a SQL, recomendamos que você exporte seus segredos e as versões do segredo para o BigQuery. O Secret Manager não é integrado à Busca de recursos ou à Análise de políticas. Essas consultas usam a CLI do Google Cloud 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 recursos
O Inventário de recursos do Cloud rastreia atualizações em tempo real e é compatível com o monitoramento dessas alterações. É possível configurar feeds para enviar notificações para 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 horário 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 não existir, ela será criada.
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 estes exemplos de consultas para encontrar segredos e versões de segredos com propriedades específicas.
Secrets criados nas últimas duas semanas
Encontre segredos (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 para a tabela do BigQuery para a qual 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 para a tabela do BigQuery para a qual 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 para a tabela do BigQuery para a qual 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 Google Cloud 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 para a tabela do BigQuery para a qual 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 segredos que não são criptografados com chaves de criptografia do gerente de clientes (CMEK, na sigla em inglês):
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 para a tabela do BigQuery para a qual 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 para a tabela do BigQuery para a qual 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 para a qual você exportou todos os recursos na seção Exportar recursos para o BigQuery deste documento.
-
KMS_KEY_NAME: o ID da chave ou do identificador totalmente qualificado
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 do identificador totalmente qualificado
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 para a tabela do BigQuery para a qual 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 para a qual 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 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 para a tabela do BigQuery para a qual 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 para a tabela do BigQuery para a qual 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 vão expirar 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 para a tabela do BigQuery para a qual 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 para a tabela do BigQuery para a qual 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.