Zum Inhalt springen

CloudQuery - Cloud-Asset-Bestand als SQL Spickzettel

CloudQuery - Cloud-Asset-Bestand als SQL Spickzettel

CloudQuery ist ein Open-Source, Plugin-basiertes Datenverschiebungs-Framework, das Konfigurationen von Cloud-Providern und SaaS-APIs (AWS, GCP, Azure, Kubernetes, GitHub und mehr) extrahiert und in ein Ziel lädt — meistens PostgreSQL — damit du deine gesamte Infrastruktur mit SQL abfragen kannst. Sicherheits- und Plattform-Teams nutzen es für Asset-Bestand, Lage-Management, Compliance-Nachweise und zur Beantwortung von „Was haben wir eigentlich laufen?” mit einer Abfrage anstelle eines Konsolen-Durchklicks.

Architektur

KomponenteRolle
Source PluginZieht Daten von einer API (aws, gcp, azure, k8s, github, …)
Destination PluginSchreibt Daten in einen Speicher (postgresql, bigquery, sqlite, file, …)
SyncEin Lauf, der von Quellen extrahiert und zu Zielen lädt
ConfigYAML-Dateien, die Quellen und Ziele beschreiben

Installation

MethodeBefehl
Homebrewbrew install cloudquery/tap/cloudquery
Skriptcurl -L https://github.com/cloudquery/cloudquery/releases/latest/download/cloudquery_linux_amd64 -o cloudquery && chmod +x cloudquery
Dockerdocker run ghcr.io/cloudquery/cloudquery:latest
Überprüfungcloudquery --version

Konfiguration

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

Kern-Befehle

BefehlBeschreibung
cloudquery sync config.yamlSync ausführen (Extrahieren → Laden)
cloudquery sync aws.yaml pg.yamlMehrere Config-Dateien kombinieren
cloudquery init --source aws --destination postgresqlConfig Gerüst erstellen
cloudquery tables config.yamlTabellen einer Quelle auflisten
cloudquery migrate config.yamlNur Schema-Migrationen anwenden
cloudquery plugin install config.yamlPlugins vorinstallieren
cloudquery --log-level debug sync ...Ausführliches Logging

Den Bestand abfragen

Nach dem Sync mit einfachem SQL abfragen:

-- Public S3 Buckets
SELECT name, region FROM aws_s3_buckets
WHERE block_public_acls = false;

-- EC2-Instanzen fehlender erforderlicher Tags
SELECT instance_id, region FROM aws_ec2_instances
WHERE tags->>'Owner' IS NULL;

-- IAM-Benutzer ohne MFA
SELECT user_name FROM aws_iam_users
WHERE mfa_active = false;

-- Cloud-übergreifend: Compute nach Provider zählen
SELECT 'aws' AS cloud, count(*) FROM aws_ec2_instances
UNION ALL SELECT 'gcp', count(*) FROM gcp_compute_instances;

Häufige Source-Plugins

PluginDeckt ab
cloudquery/awsEC2, S3, IAM, VPC, RDS, Lambda, …
cloudquery/gcpCompute, Storage, IAM, GKE, …
cloudquery/azureVMs, Storage, AAD, …
cloudquery/k8sPods, Deployments, RBAC, …
cloudquery/githubRepos, Mitglieder, Branch Protection
cloudquery/cloudflare, okta, gcpSaaS Lage

Planung & CI

AnsatzWie
Croncloudquery sync nach Plan ausführen
CI PipelineSync dann SQL Richtlinienchecks ausführen, bei Verstößen fehlschlagen
InkrementellViele Tabellen unterstützen inkrementelle Syncs zur Kostenreduktion
PoliciesSQL-Abfragen als Compliance-Kontrollen koppeln

Häufige Workflows

# Nächtliche Bestandsaktualisierung in Postgres
cloudquery sync aws.yaml gcp.yaml azure.yaml postgres.yaml

# Schnelle lokale Erkundung in SQLite (kein DB-Server)
cloudquery sync aws.yaml sqlite.yaml
sqlite3 cq.db "SELECT name FROM aws_s3_buckets"

# Auflisten, was eine AWS-Quelle vor Sync exponiert
cloudquery tables aws.yaml

CloudQuery vs Andere Ansätze

AspektCloudQuerySteampipeNative CLIs
ModellZu DB synchronisieren, dann SQLLive SQL über APIsImperativ pro Aufruf
Am besten fürBestand, Verlauf, Joins im MaßstabAd-hoc Live AbfragenEinmalige Suchen
PersistierungJa (deine Datenbank)AbfragezeitKeine
Cloud-übergreifende JoinsJaJaManuell

Ressourcen