Aller au contenu

CloudQuery - Inventaire d'actifs cloud en SQL

CloudQuery - Inventaire d”actifs cloud en SQL

CloudQuery est un framework de mouvement de données open-source basé sur des plugins qui extrait la configuration des fournisseurs cloud et des APIs SaaS (AWS, GCP, Azure, Kubernetes, GitHub, et plus) et la charge dans une destination — le plus souvent PostgreSQL — pour que vous puissiez interroger l”ensemble de votre infrastructure avec SQL. Les équipes de sécurité et de plateforme l”utilisent pour l”inventaire des actifs, la gestion de la posture, les preuves de conformité, et pour répondre à « qu”avons-nous réellement exécuté ? » avec une requête au lieu d”une série de clics sur la console.

Architecture

ComposantRôle
Plugin sourceRécupère les données d”une API (aws, gcp, azure, k8s, github, …)
Plugin destinationÉcrit les données dans un magasin (postgresql, bigquery, sqlite, file, …)
SyncUne exécution qui extrait des sources et charge vers les destinations
ConfigFichiers YAML décrivant les sources et les destinations

Installation

MéthodeCommande
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
Vérifiercloudquery --version

Configuration

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

Commandes principales

CommandeDescription
cloudquery sync config.yamlExécuter une synchronisation (extract → load)
cloudquery sync aws.yaml pg.yamlCombiner plusieurs fichiers de configuration
cloudquery init --source aws --destination postgresqlGénérer une configuration
cloudquery tables config.yamlLister les tableaux qu”une source fournit
cloudquery migrate config.yamlAppliquer uniquement les migrations de schéma
cloudquery plugin install config.yamlPré-installer les plugins
cloudquery --log-level debug sync ...Journalisation détaillée

Interrogation de l”inventaire

Une fois synchronisés, interrogez avec du SQL pur:

-- Compartiments S3 publics
SELECT name, region FROM aws_s3_buckets
WHERE block_public_acls = false;

-- Instances EC2 manquant une balise requise
SELECT instance_id, region FROM aws_ec2_instances
WHERE tags->>'Owner' IS NULL;

-- Utilisateurs IAM sans MFA
SELECT user_name FROM aws_iam_users
WHERE mfa_active = false;

-- Cross-cloud: compter la capacité de calcul par fournisseur
SELECT 'aws' AS cloud, count(*) FROM aws_ec2_instances
UNION ALL SELECT 'gcp', count(*) FROM gcp_compute_instances;

Plugins source courants

PluginCouvre
cloudquery/awsEC2, S3, IAM, VPC, RDS, Lambda, …
cloudquery/gcpCompute, Storage, IAM, GKE, …
cloudquery/azureVMs, Storage, AAD, …
cloudquery/k8sPods, Deployments, RBAC, …
cloudquery/githubRepos, membres, protection des branches
cloudquery/cloudflare, okta, gcpPosture SaaS

Planification et CI

ApprocheComment
CronExécuter cloudquery sync selon un horaire
Pipeline CISynchroniser puis exécuter les vérifications de politique SQL, échouer en cas de violations
IncrémentielDe nombreux tableaux supportent les synchronisations incrémentielles pour réduire les coûts
PolitiquesAssocier des requêtes SQL comme contrôles de conformité

Flux de travail courants

# Actualisation d'inventaire nocturne vers Postgres
cloudquery sync aws.yaml gcp.yaml azure.yaml postgres.yaml

# Exploration locale rapide vers SQLite (pas de serveur BD)
cloudquery sync aws.yaml sqlite.yaml
sqlite3 cq.db "SELECT name FROM aws_s3_buckets"

# Lister ce qu''une source AWS expose avant de synchroniser
cloudquery tables aws.yaml

CloudQuery vs Autres approches

AspectCloudQuerySteampipeCLIs natifs
ModèleSynchroniser vers une BD, puis SQLSQL live sur les APIsImpératif par appel
Meilleur pourInventaire, historique, jointures à grande échelleRequêtes live ad-hocRecherches ponctuelles
PersistanceOui (votre base de données)Au moment de la requêteAucune
Jointures cross-cloudOuiOuiManuel

Ressources