AWS Drift · Self-hosted

インフラの実態を把握できれば、1人でも回せる。

terraform planが見逃す管理外リソースの検知、実態と定義のズレの把握、コンソールで作ったリソースまで含めた台帳化。Dockerで動く、セルフホスト型のAWSインフラ台帳です。

git clone https://github.com/MR-TABATA/SyncVey cd SyncVey cp .env.example .env docker compose up -d

セルフホスト・Docker

システム・環境・資産を一元管理するSyncVeyのダッシュボード

機能

システム → 環境 → 資産を、ひとつの台帳に

AWSリソースを、システム・環境(PROD / STG / DEV)・資産の階層で管理します。環境ごとに、EC2・RDS・S3・ALBなどの資産が件数つきで並び、変更が入った環境には、変更・追加の件数が出ます。

ProductionとStagingの環境カード。資産の種類ごとの件数と、変更・追加の件数

管理外のリソースも、属性レベルで検知

terraform planは、Terraformが知っているリソースしか見ません。SyncVeyはBoto3でAWSのAPIを直接叩き、コンソールで作られたリソースも見つけます。tfstateとの差は、どの属性が変わったかまで出ます。

tfstateの定義とAWSの実態のずれを、属性レベルで示すドリフトレポート

ドリフトの推移を、時系列で追う

スキャンとインポートのたびに、ドリフトのスナップショットを残します。推移グラフで、いつ、何がずれ始めたかが分かります。各時点のフィールド単位の差分も保持します。

ドリフトの推移グラフと、スキャンごとの履歴

tfstateを自動で取り込む

S3バックエンドは、BucketとKeyを設定するだけで自動で同期します。ローカルのtfstateは、画面からアップロードするだけです。

ドリフトを検知して、Slackに通知

定義と実態のズレを属性レベルで特定し、Slackへ通知します。スキャン間隔を決めれば、気づかないままのドリフトを減らせます。

危険なドリフトを見分け、実行者まで辿る

変更をセキュリティ影響度で採点します。セキュリティグループが 0.0.0.0/0 に開けばcritical、タグ変更は低リスクです。「Who changed this?」で、CloudTrailから実行者まで辿れます。週次のSlackブリーフィングも使えます。

ドリフトが、どこまで波及するか

ドリフトしたリソースを起点に、参照グラフを外側へ辿り、到達しうるリソースを「重大度×距離」で並べます。最も広く波及する変更から直せます。

「起きなかったローテーション」を捕まえる

ローテーションされていないシークレットは、差分を生みません。SyncVeyは差分ではなく現在の状態を採点します。読むのはローテーションのメタデータだけで、シークレットの値は取得も保存もしません。

ミドルウェアのサポート切れを、AWS自身の日付で

環境ごとに、サポート終了のランタイムとミドルウェアを検出します。RDS・EKSは「延長サポート中(有償)」、Lambdaは「非推奨」まで、AWSが示す日付で段階的に判定します。標準は内蔵データでオフライン判定で、任意でendoflife.dateから日次で更新できます。

既知の脆弱性を、台帳の上で

アプリのGitHubリポジトリを一度登録すれば、ロックファイル(requirements.txt・package-lock.json・composer.lock・Gemfile.lock・go.mod)を毎日取り込み直し、ライブラリごとの公開済みの脆弱性が並びます。手で更新する必要はありません。RDSのPostgreSQL・MySQLと、ElastiCacheのRedis・Memcachedは、エンジン版をNVDで照合します。重大度、修正版、リンク、CISAが悪用を確認したものの印まで、事実だけを出します。既定はオフで、外に出るのはパッケージ名と版だけです。

アプリとミドルウェアも、環境別に管理

言語、フレームワーク、デプロイ方式、依存パッケージを、環境(PROD / STG / DEV)ごとに管理できます。依存パッケージは、GitHubのリポジトリを登録すれば、毎日自動で追従します。ステージングは別のブランチを指せます。

対応リソースと、導入の流れ

広すぎるReadOnlyAccessは使いません。スキャンに必要な読み取りだけに絞ったIAMポリシーを同梱しています。

対応するAWSリソース

  • EC2・ECS・EKS・Lambda
  • RDS・DynamoDB・ElastiCache
  • S3・EBS・EFS
  • ALB・VPC・Route 53・CloudFront
  • SQS・SNS・API Gateway ほか

導入の4ステップ

  • git clone で入手し、同梱のiam-policy.jsonでIAMユーザーを作る
  • cp .env.example .env でAWSキーを設定
  • docker compose up -d で起動(migrateと初期アカウントまで自動)
  • tfstateを取り込む(S3は設定だけ、ローカルはアップロード)

安全な設計

  • 最小権限のカスタムIAMポリシー
  • シークレットの値は取得も保存もしない
  • TOTPによる2段階認証を標準搭載
  • 外部のIDプロバイダは不要
  • 脆弱性の照合は任意。送るのはパッケージ名と版だけ

運用

  • スキャン間隔を決めて自動更新
  • Slackへのドリフト通知と週次ブリーフィング
  • ドリフトの推移とスナップショット
  • MITライセンス・コードはすべて公開

無料・オープンソース

SyncVey

インフラの台帳を、自分の手元に。

無料

セルフホスト・Docker

MITライセンス · ソースはGitHub

  • 管理外リソースの検知(Boto3)
  • tfstateとのドリフト検知と推移の記録
  • 危険度の採点と、CloudTrailからの実行者の特定
  • 影響波及範囲・EOL・既知の脆弱性の可視化
  • Slack通知・2段階認証
  • cloneなしでも起動できる(composeと.envの2ファイルだけ)。amd64 / arm64
GitHub で導入する

まずは、clone して docker compose up から。

git clone https://github.com/MR-TABATA/SyncVey cd SyncVey cp .env.example .env docker compose up -d