CloudQuery - جرد أصول السحابة كـ SQL
CloudQuery هو إطار عمل قائم على المكونات الإضافية مفتوح المصدر يستخرج التكوين من موفري السحابة واجهات برمجية SaaS (AWS و GCP و Azure و Kubernetes و GitHub والمزيد) وتحميله إلى وجهة — في الأساس PostgreSQL — حتى تتمكن من الاستعلام عن البنية التحتية الكاملة باستخدام SQL. تستخدمها فريق الأمان والمنصة لجرد الأصول وإدارة الموقف وأدلة الامتثال والإجابة على “ما الذي نملكه فعلاً قيد التشغيل؟” مع استعلام بدلاً من نقرة على لوحة التحكم.
العمارة
| المكون | الدور |
|---|
| Source plugin | سحب البيانات من واجهة برمجية (aws, gcp, azure, k8s, github, …) |
| Destination plugin | كتابة البيانات إلى متجر (postgresql, bigquery, sqlite, file, …) |
| Sync | تشغيل واحد يستخرج من المصادر ويحمل إلى الوجهات |
| Config | ملفات YAML توضح المصادر والوجهات |
التثبيت
| الطريقة | الأمر |
|---|
| 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 |
| التحقق | cloudquery --version |
التكوين
# 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"
الأوامر الأساسية
| الأمر | الوصف |
|---|
cloudquery sync config.yaml | تشغيل مزامنة (استخراج → تحميل) |
cloudquery sync aws.yaml pg.yaml | دمج ملفات تكوين متعددة |
cloudquery init --source aws --destination postgresql | قالب التكوين |
cloudquery tables config.yaml | قائمة الجداول التي تقدمها المصدر |
cloudquery migrate config.yaml | تطبيق الهجرات الموسومة فقط |
cloudquery plugin install config.yaml | تثبيت مسبق للمكونات الإضافية |
cloudquery --log-level debug sync ... | سجل تفصيلي |
الاستعلام عن الجرد
بمجرد المزامنة، استعلام باستخدام SQL عادي:
-- دلاء S3 العام
SELECT name, region FROM aws_s3_buckets
WHERE block_public_acls = false;
-- EC2 الحالات التي تفتقد علامة مطلوبة
SELECT instance_id, region FROM aws_ec2_instances
WHERE tags->>'Owner' IS NULL;
-- مستخدمو IAM بدون MFA
SELECT user_name FROM aws_iam_users
WHERE mfa_active = false;
-- عبر السحابة: عدد الحوسبة حسب المزود
SELECT 'aws' AS cloud, count(*) FROM aws_ec2_instances
UNION ALL SELECT 'gcp', count(*) FROM gcp_compute_instances;
المكونات الإضافية للمصدر الشائعة
| Plugin | يغطي |
|---|
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, members, branch protection |
cloudquery/cloudflare, okta, gcp… | موقف SaaS |
الجدولة و CI
| الطريقة | كيف |
|---|
| Cron | تشغيل cloudquery sync في الجدول الزمني |
| CI pipeline | مزامنة ثم تشغيل فحوصات سياسة SQL، الفشل في الانتهاكات |
| Incremental | العديد من الجداول تدعم المزامنة الزيادة لتقليل التكلفة |
| Policies | الاقتران مع استعلامات SQL كضوابط الامتثال |
سير العمل المشتركة
# تحديث الجرد الليلي في Postgres
cloudquery sync aws.yaml gcp.yaml azure.yaml postgres.yaml
# استكشاف محلي سريع في SQLite (لا يوجد خادم قاعدة بيانات)
cloudquery sync aws.yaml sqlite.yaml
sqlite3 cq.db "SELECT name FROM aws_s3_buckets"
# قائمة ما يكشفه مصدر AWS قبل المزامنة
cloudquery tables aws.yaml
CloudQuery مقابل الطرق الأخرى
| الجانب | CloudQuery | Steampipe | أسطر أوامر أصلية |
|---|
| النموذج | مزامنة إلى DB، ثم SQL | SQL مباشرة على واجهات برمجية | إجراء لكل مكالمة |
| الأفضل لـ | الجرد والسجل والانضمام بالحجم | استعلامات حية مخصصة | بحث لمرة واحدة |
| الاستمرار | نعم (قاعدة البيانات الخاصة بك) | وقت الاستعلام | بلا |
| الانضمام عبر السحابة | نعم | نعم | يدوي |
الموارد