コンテンツにスキップ

CloudQuery - クラウドアセット インベントリ as SQL チートシート

CloudQuery - クラウドアセット インベントリ as SQL チートシート

CloudQuery はオープンソースのプラグインベースのデータ移動フレームワーク — クラウドプロバイダーおよび SaaS API(AWS、GCP、Azure、Kubernetes、GitHub など)から設定を抽出し、宛先(通常は PostgreSQL)に読み込む — SQL でインフラストラクチャ全体をクエリできます。セキュリティおよびプラットフォームチームはアセットインベントリ、体制管理、コンプライアンス証拠、「実際に何が実行されているのか」をコンソールクリックの代わりにクエリで回答するために使用します。

アーキテクチャ

コンポーネント役割
ソースプラグインAPI(aws、gcp、azure、k8s、github など)からデータを取得
宛先プラグインストア(postgresql、bigquery、sqlite、file など)にデータを書き込み
同期ソースから抽出して宛先に読み込む1回の実行
設定ソースおよび宛先を記述した YAML ファイル

インストール

方法コマンド
Homebrewbrew install cloudquery/tap/cloudquery
スクリプトcurl -L https://github.com/cloudquery/cloudquery/releases/latest/download/cloudquery_linux_amd64 -o cloudquery && chmod +x cloudquery
Dockerdocker 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;

-- MFA なしの IAM ユーザー
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;

一般的なソースプラグイン

プラグイン対象
cloudquery/awsEC2、S3、IAM、VPC、RDS、Lambda など
cloudquery/gcpCompute、Storage、IAM、GKE など
cloudquery/azureVM、Storage、AAD など
cloudquery/k8sPod、Deployment、RBAC など
cloudquery/githubリポジトリ、メンバー、ブランチ保護
cloudquery/cloudflare, okta, gcpSaaS 体制

スケジューリング & CI

アプローチ方法
Cronスケジュール通りに cloudquery sync を実行
CI パイプライン同期してから SQL ポリシーチェックを実行、違反時は失敗
インクリメンタル多くのテーブルはコストを削減するため増分同期をサポート
ポリシーSQL クエリをコンプライアンスコントロールとペアリング

一般的なワークフロー

# 夜間のインベントリ更新を Postgres に
cloudquery sync aws.yaml gcp.yaml azure.yaml postgres.yaml

# SQLite への迅速なローカル探索(DB サーバー不要)
cloudquery sync aws.yaml sqlite.yaml
sqlite3 cq.db "SELECT name FROM aws_s3_buckets"

# 同期前に AWS ソースが公開するものをリスト
cloudquery tables aws.yaml

CloudQuery vs その他のアプローチ

側面CloudQuerySteampipeネイティブ CLI
モデルDB に同期してから SQLAPI 経由のライブ SQL呼び出しごとの命令型
最適用途インベントリ、履歴、大規模結合アドホック ライブクエリワンオフルックアップ
永続性はい(ユーザーのデータベース)クエリ時なし
クロスクラウド結合はいはい手動

リソース