IaC

ドリフト検知 どりふとけんち

構成ドリフトIaCInfrastructure as Code構成管理TerraformCloudFormation
ドリフト検知について教えて

簡単に言うとこんな感じ!

設計図通りに建てたはずの建物が、いつの間にか勝手に改築されてないか確認する仕組みだよ!インフラをコードで管理しているのに、誰かが手動でこっそり変更してたら困るでしょ?それを自動で「あ、ズレてる!」って教えてくれるのがドリフト検知なんだ。


ドリフト検知とは

ドリフト検知(Drift Detection) とは、Infrastructure as Code(IaC で定義したインフラの「あるべき姿」と、実際にクラウドや環境上で動いている「現在の状態」を比較し、差異(ズレ)を自動的に検出する仕組みのことです。「ドリフト(drift)」とは「漂う・ズレる」という意味で、コードから定義が流れ去ってしまった状態を指します。

IaCでは、サーバーやネットワークの設定をコードとして管理し、「いつでも同じ状態に再現できる」ことが理想です。しかし現実には、障害対応のために担当者が手動でサーバー設定を変更したり、管理コンソールからポチポチと設定を変えたりすることが起こります。こうしたアウトオブバンド変更(帯域外変更)が積み重なると、コードと実環境が少しずつズレていきます。

ドリフト検知はこのズレを定期的・自動的に発見し、「コードに戻すべきか」「コードを更新すべきか」を判断する材料を提供します。セキュリティ設定の意図しない変更コンプライアンス違反の早期発見 にも活用でき、インフラ管理の信頼性を大きく高める機能です。


ドリフトが起きる原因と影響

原因具体例
手動操作障害対応でコンソールから直接セキュリティグループを変更
複数チームの競合インフラチームとアプリチームが別々に設定を触る
自動スケーリングクラウドが自動的にリソースを追加・変更する
外部サービス連携外部ツールがAPIで設定を書き換える
ヒューマンエラー「テスト用の変更」をそのまま戻し忘れる

ドリフトが放置されると次のような問題が起きます。

  • 再現性の喪失: コードから環境を再構築しても、現行と異なる環境ができてしまう
  • セキュリティホール: 意図しないポート開放や権限付与が見過ごされる
  • 障害調査の困難化: 「コードを見ても実際と違う」状態で原因調査が混乱する

覚え方

「ドリフト=設計図と現場のズレ」
車のドリフト走行で「タイヤが向いてる方向と実際に進む方向がズレる」イメージそのまま!コードが指す方向と、実際のインフラが向いている方向がズレてしまった状態だよ。


主要ツールのドリフト検知機能

ツール機能名検知方法特徴
AWS CloudFormationDrift Detectionスタック単位でリソースを比較AWSコンソール・CLIから手動実行も可
Terraformterraform plan / terraform refreshステートファイルと実環境を比較CI/CDに組み込みやすい
Pulumipulumi refreshステートと実環境を比較複数クラウド対応
AWS Config構成変更の継続的記録リアルタイムで変更を検知変更履歴・コンプライアンス評価も可能
DriftctlOSSのドリフト検知専用ツールTerraformステートと実環境を比較「管理されていないリソース」も検出

Terraformでのドリフト検知フロー

① terraform plan を実行

② ステートファイル(.tfstate)と実環境を比較

③ 差分があれば "Plan: X to change" として表示

④ ① コードに合わせて実環境を修正(terraform apply)
   ② 実環境の変更をコードに取り込む(コードを更新)
   ③ 意図的な変更なら ignore_changes で除外

ドリフト検知の仕組み(SVG図解)

IaCコード (あるべき姿) main.tf / template.yaml 実環境 (実際の状態) AWS / GCP / Azure ドリフト検知エンジン 2つの状態を比較・差分算出 ✅ ドリフトなし コードと環境が一致 ⚠️ ドリフト検知! 差分をレポート・通知 一致 差異あり

歴史と背景

  • 2000年代後半: クラウドの普及とともに「手動管理の限界」が顕在化。数百台のサーバーを人手で管理することが現実的でなくなる
  • 2011年: HashiCorpがTerraformを開発開始(2014年公開)。ステートファイルによる「あるべき姿の管理」が普及のきっかけに
  • 2013年頃: AWS CloudFormation が普及し、AWSリソースをテンプレートで管理する考え方が広まる
  • 2018年: AWS CloudFormationがDrift Detection機能を正式リリース。「ドリフト検知」という言葉がIaC界隈で一般化
  • 2019年: OSSツール Driftctl が登場。Terraformで管理されていないリソースの検出に特化
  • 2020年代: GitOpsの普及とともに「常にコードが真実の源(Single Source of Truth)」という考え方が主流に。ドリフト検知はCI/CDパイプラインへの組み込みが標準化

GitOpsとの関係・対処方針

ドリフト検知はGitOpsの考え方と深く結びついています。GitOpsでは「Gitリポジトリのコードが唯一の正解」とする運用スタイルを採ります。

ドリフト発見後の対処方針

状況対処方法
手動変更が誤りだったterraform apply などでコードの状態に戻す
手動変更が正しかったコードを更新してドリフトをなくす
意図的に異なる状態にしたいignore_changes(Terraform)などで除外設定する
管理対象外のリソースが存在するIaC管理に取り込む or 削除する

ドリフトを防ぐベストプラクティス

  • 手動変更を禁止し、IaC経由のみ変更を許可 するポリシーを設ける
  • ブレイクグラス(緊急アクセス) は記録を残し、事後にコードへ反映する
  • CI/CDパイプラインに terraform plan を組み込み、プルリクエスト時に差分を確認 する
  • AWS Configなどで変更イベントをリアルタイム監視し、アラートを設定する

関連する規格・RFC

※ ドリフト検知はIETF RFC・ISO・IEEEなどの標準規格が直接定義している技術ではないため、このセクションは省略します。


関連用語

  • Infrastructure as Code(IaC) — インフラをコードで定義・管理する手法全般
  • Terraform — HashiCorp製の代表的なIaCツール。ステートファイルでドリフト管理
  • CloudFormation — AWSのIaCサービス。Drift Detection機能を内蔵
  • GitOps — Gitを唯一の真実の源として運用するデプロイ手法
  • ステートファイル — IaCツールが「あるべき姿」を記録しておくファイル
  • AWS Config — AWSリソースの変更を継続的に記録・評価するサービス
  • CI/CDパイプライン — コードの変更を自動的にテスト・デプロイする仕組み
  • コンプライアンス管理 — セキュリティや法令に沿った設定・運用を維持する取り組み