Ir al contenido

CloudQuery - Inventario de Activos en la Nube como SQL

CloudQuery - Inventario de Activos en la Nube como SQL

CloudQuery es un marco de movimiento de datos basado en complementos de código abierto que extrae configuraciones de proveedores de nube y APIs de SaaS (AWS, GCP, Azure, Kubernetes, GitHub, y más) y las carga en un destino — generalmente PostgreSQL — para que puedas consultar toda tu infraestructura con SQL. Los equipos de seguridad y plataforma lo utilizan para inventario de activos, gestión de postura, evidencia de conformidad, y responder a “¿qué realmente tenemos ejecutándose?” con una consulta en lugar de navegación manual.

Arquitectura

ComponenteFunción
Complemento de origenExtrae datos de una API (aws, gcp, azure, k8s, github, …)
Complemento de destinoEscribe datos en un almacén (postgresql, bigquery, sqlite, file, …)
SincronizaciónUna ejecución que extrae de orígenes y carga a destinos
ConfiguraciónArchivos YAML describiendo orígenes y destinos

Instalación

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

Configuración

# 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 Principales

ComandoDescripción
cloudquery sync config.yamlEjecuta una sincronización (extrae → carga)
cloudquery sync aws.yaml pg.yamlCombina múltiples archivos de configuración
cloudquery init --source aws --destination postgresqlGenera una configuración automática
cloudquery tables config.yamlLista las tablas que proporciona un origen
cloudquery migrate config.yamlAplica solo migraciones de esquema
cloudquery plugin install config.yamlPreinstala complementos
cloudquery --log-level debug sync ...Registro detallado

Consultar el Inventario

Una vez sincronizado, consulta con SQL plano:

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

-- Instancias EC2 sin una etiqueta requerida
SELECT instance_id, region FROM aws_ec2_instances
WHERE tags->>'Owner' IS NULL;

-- Usuarios de IAM sin MFA
SELECT user_name FROM aws_iam_users
WHERE mfa_active = false;

-- Entre nubes: contar compute por proveedor
SELECT 'aws' AS cloud, count(*) FROM aws_ec2_instances
UNION ALL SELECT 'gcp', count(*) FROM gcp_compute_instances;

Complementos de Origen Comunes

ComplementoCubre
cloudquery/awsEC2, S3, IAM, VPC, RDS, Lambda, …
cloudquery/gcpCompute, Storage, IAM, GKE, …
cloudquery/azureVMs, Storage, AAD, …
cloudquery/k8sPods, Deployments, RBAC, …
cloudquery/githubRepos, members, branch protection
cloudquery/cloudflare, okta, gcpPostura de SaaS

Programación e IC

EnfoqueCómo
CronEjecuta cloudquery sync según un cronograma
Canalización de ICSincroniza luego ejecuta verificaciones de políticas SQL, falla en violaciones
IncrementalMuchas tablas soportan sincronizaciones incrementales para reducir costos
PolíticasEmpareja con consultas SQL como controles de conformidad

Flujos de Trabajo Comunes

# Actualización de inventario nocturno a Postgres
cloudquery sync aws.yaml gcp.yaml azure.yaml postgres.yaml

# Exploración local rápida en SQLite (sin servidor BD)
cloudquery sync aws.yaml sqlite.yaml
sqlite3 cq.db "SELECT name FROM aws_s3_buckets"

# Lista qué expone un origen AWS antes de sincronizar
cloudquery tables aws.yaml

CloudQuery vs Otros Enfoques

AspectoCloudQuerySteampipeCLIs Nativos
ModeloSincroniza a una BD, luego SQLSQL activo sobre APIsImperativo por llamada
Mejor paraInventario, historial, uniones a escalaConsultas activas ad-hocBúsquedas puntuales
PersistenciaSí (tu base de datos)En tiempo de consultaNinguna
Uniones entre nubesManual

Recursos