Pular para o conteúdo

CloudQuery - Inventário de Ativos em Nuvem como SQL

CloudQuery - Inventário de Ativos em Nuvem como SQL

CloudQuery é um framework de movimento de dados baseado em plugins de código aberto que extrai configuração de provedores de nuvem e APIs SaaS (AWS, GCP, Azure, Kubernetes, GitHub e muito mais) e carrega em um destino — geralmente PostgreSQL — para que você possa consultar toda sua infraestrutura com SQL. Equipes de segurança e plataforma o usam para inventário de ativos, gerenciamento de postura, evidência de conformidade e responder “o que realmente temos em execução?” com uma consulta em vez de um clique em um console.

Arquitetura

ComponentePapel
Plugin de origemExtrai dados de uma API (aws, gcp, azure, k8s, github, …)
Plugin de destinoEscreve dados em um armazenamento (postgresql, bigquery, sqlite, file, …)
SincronizaçãoUma execução que extrai de fontes e carrega em destinos
ConfiguraçãoArquivos YAML descrevendo fontes e destinos

Instalação

MétodoComando
Homebrewbrew install cloudquery/tap/cloudquery
Scriptcurl -L https://github.com/cloudquery/cloudquery/releases/latest/download/cloudquery_linux_amd64 -o cloudquery && chmod +x cloudquery
Dockerdocker run ghcr.io/cloudquery/cloudquery:latest
Verificarcloudquery --version

Configuração

# aws-to-postgres.yaml
kind: source
spec:
  name: aws
  path: cloudquery/aws
  version: "VERSION"
  destinations: ["postgresql"]
  tables: ["aws_ec2_instances", "aws_s3_buckets", "aws_iam_*"]
---
kind: destination
spec:
  name: postgresql
  path: cloudquery/postgresql
  version: "VERSION"
  spec:
    connection_string: "postgresql://user:pass@localhost:5432/cq"

Comandos Principais

ComandoDescrição
cloudquery sync config.yamlExecute uma sincronização (extrai → carrega)
cloudquery sync aws.yaml pg.yamlCombine vários arquivos de configuração
cloudquery init --source aws --destination postgresqlEstruture uma configuração
cloudquery tables config.yamlListe tabelas que uma origem fornece
cloudquery migrate config.yamlAplique apenas migrações de esquema
cloudquery plugin install config.yamlPré-instale plugins
cloudquery --log-level debug sync ...Log detalhado

Consultando o Inventário

Depois de sincronizar, consulte com SQL simples:

-- S3 buckets públicos
SELECT name, region FROM aws_s3_buckets
WHERE block_public_acls = false;

-- Instâncias EC2 sem uma tag obrigatória
SELECT instance_id, region FROM aws_ec2_instances
WHERE tags->>'Owner' IS NULL;

-- Usuários IAM sem MFA
SELECT user_name FROM aws_iam_users
WHERE mfa_active = false;

-- Cross-cloud: contar computação por provedor
SELECT 'aws' AS cloud, count(*) FROM aws_ec2_instances
UNION ALL SELECT 'gcp', count(*) FROM gcp_compute_instances;

Plugins de Origem Comuns

PluginCobre
cloudquery/awsEC2, S3, IAM, VPC, RDS, Lambda, …
cloudquery/gcpCompute, Storage, IAM, GKE, …
cloudquery/azureVMs, Storage, AAD, …
cloudquery/k8sPods, Deployments, RBAC, …
cloudquery/githubRepos, membros, proteção de branch
cloudquery/cloudflare, okta, gcpPostura de SaaS

Agendamento e CI

AbordagemComo
CronExecute cloudquery sync em um cronograma
Pipeline CISincronize e execute verificações de política SQL, falhe em violações
IncrementalMuitas tabelas suportam sincronizações incrementais para reduzir custo
PolíticasEmparelhe com consultas SQL como controles de conformidade

Fluxos de Trabalho Comuns

# Atualização de inventário noturna em Postgres
cloudquery sync aws.yaml gcp.yaml azure.yaml postgres.yaml

# Exploração local rápida em SQLite (sem servidor BD)
cloudquery sync aws.yaml sqlite.yaml
sqlite3 cq.db "SELECT name FROM aws_s3_buckets"

# Liste o que uma origem AWS expõe antes de sincronizar
cloudquery tables aws.yaml

CloudQuery vs Outras Abordagens

AspectoCloudQuerySteampipeCLIs Nativos
ModeloSincronize para BD, depois SQLSQL ao vivo sobre APIsImperativo por chamada
Melhor paraInventário, histórico, joins em escalaConsultas ad-hoc ao vivoBuscas únicas
PersistênciaSim (seu banco de dados)Tempo de consultaNenhuma
Joins cross-cloudSimSimManual

Recursos