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
| Componente | Papel |
|---|
| Plugin de origem | Extrai dados de uma API (aws, gcp, azure, k8s, github, …) |
| Plugin de destino | Escreve dados em um armazenamento (postgresql, bigquery, sqlite, file, …) |
| Sincronização | Uma execução que extrai de fontes e carrega em destinos |
| Configuração | Arquivos YAML descrevendo fontes e destinos |
Instalação
| Método | Comando |
|---|
| Homebrew | brew install cloudquery/tap/cloudquery |
| Script | curl -L https://github.com/cloudquery/cloudquery/releases/latest/download/cloudquery_linux_amd64 -o cloudquery && chmod +x cloudquery |
| Docker | docker run ghcr.io/cloudquery/cloudquery:latest |
| Verificar | cloudquery --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
| Comando | Descrição |
|---|
cloudquery sync config.yaml | Execute uma sincronização (extrai → carrega) |
cloudquery sync aws.yaml pg.yaml | Combine vários arquivos de configuração |
cloudquery init --source aws --destination postgresql | Estruture uma configuração |
cloudquery tables config.yaml | Liste tabelas que uma origem fornece |
cloudquery migrate config.yaml | Aplique apenas migrações de esquema |
cloudquery plugin install config.yaml | Pré-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
| Plugin | Cobre |
|---|
cloudquery/aws | EC2, S3, IAM, VPC, RDS, Lambda, … |
cloudquery/gcp | Compute, Storage, IAM, GKE, … |
cloudquery/azure | VMs, Storage, AAD, … |
cloudquery/k8s | Pods, Deployments, RBAC, … |
cloudquery/github | Repos, membros, proteção de branch |
cloudquery/cloudflare, okta, gcp… | Postura de SaaS |
Agendamento e CI
| Abordagem | Como |
|---|
| Cron | Execute cloudquery sync em um cronograma |
| Pipeline CI | Sincronize e execute verificações de política SQL, falhe em violações |
| Incremental | Muitas tabelas suportam sincronizações incrementais para reduzir custo |
| Políticas | Emparelhe 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
| Aspecto | CloudQuery | Steampipe | CLIs Nativos |
|---|
| Modelo | Sincronize para BD, depois SQL | SQL ao vivo sobre APIs | Imperativo por chamada |
| Melhor para | Inventário, histórico, joins em escala | Consultas ad-hoc ao vivo | Buscas únicas |
| Persistência | Sim (seu banco de dados) | Tempo de consulta | Nenhuma |
| Joins cross-cloud | Sim | Sim | Manual |
Recursos