Salta ai contenuti

CloudQuery - Cheatsheet Cloud Asset Inventory as SQL

CloudQuery - Cheatsheet Cloud Asset Inventory as SQL

CloudQuery è un framework open-source basato su plugin che estrae la configurazione da provider cloud e API SaaS (AWS, GCP, Azure, Kubernetes, GitHub e altri) e la carica in una destinazione — più comunemente PostgreSQL — per interrogare l”intera infrastruttura con SQL. I team di sicurezza e platform lo utilizzano per inventario di asset, postura management, evidenza di compliance e per rispondere a “cosa stiamo effettivamente eseguendo?” con una query invece di un click nella console.

Architettura

ComponenteRuolo
Source pluginEstrae dati da un”API (aws, gcp, azure, k8s, github, …)
Destination pluginScrive dati in un archivio (postgresql, bigquery, sqlite, file, …)
SyncUn”esecuzione che estrae da sorgenti e carica a destinazioni
ConfigFile YAML che descrivono sorgenti e destinazioni

Installazione

MetodoComando
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
Verificacloudquery --version

Configurazione

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

Comandi Principali

ComandoDescrizione
cloudquery sync config.yamlEsegui una sync (extract → load)
cloudquery sync aws.yaml pg.yamlCombina più file di configurazione
cloudquery init --source aws --destination postgresqlScaffolding di una config
cloudquery tables config.yamlElenca le tabelle che una sorgente fornisce
cloudquery migrate config.yamlApplica solo migrazioni di schema
cloudquery plugin install config.yamlPre-installa plugin
cloudquery --log-level debug sync ...Logging verbose

Interrogazione dell”Inventario

Una volta sincronizzati, interroga con plain SQL:

-- S3 bucket pubblici
SELECT name, region FROM aws_s3_buckets
WHERE block_public_acls = false;

-- Istanze EC2 senza tag obbligatorio
SELECT instance_id, region FROM aws_ec2_instances
WHERE tags->>'Owner' IS NULL;

-- Utenti IAM senza MFA
SELECT user_name FROM aws_iam_users
WHERE mfa_active = false;

-- Cross-cloud: conta le compute per provider
SELECT 'aws' AS cloud, count(*) FROM aws_ec2_instances
UNION ALL SELECT 'gcp', count(*) FROM gcp_compute_instances;

Plugin Source Comuni

PluginCopre
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 SaaS

Pianificazione & CI

ApproccioCome
CronEsegui cloudquery sync su una pianificazione
CI pipelineSync poi esegui check di policy SQL, fallisce su violazioni
IncrementalMolte tabelle supportano sync incrementali per ridurre il costo
PoliciesAccoppia con query SQL come controlli di compliance

Flussi di Lavoro Comuni

# Aggiornamento inventario notturno in Postgres
cloudquery sync aws.yaml gcp.yaml azure.yaml postgres.yaml

# Esplorazione locale veloce in SQLite (nessun server DB)
cloudquery sync aws.yaml sqlite.yaml
sqlite3 cq.db "SELECT name FROM aws_s3_buckets"

# Elenca cosa una sorgente AWS espone prima di sincronizzare
cloudquery tables aws.yaml

CloudQuery vs Altri Approcci

AspettoCloudQuerySteampipeCLI Nativi
ModelSync in DB, poi SQLSQL live su APIImperativo per-call
Migliore perInventario, storia, join a scalaQuery live ad-hocRicerche estemporanee
PersistenzaSì (il tuo database)Query-timeNessuna
Join cross-cloudManuale

Risorse