ドリフト検知 どりふとけんち
簡単に言うとこんな感じ!
設計図通りに建てたはずの建物が、いつの間にか勝手に改築されてないか確認する仕組みだよ!インフラをコードで管理しているのに、誰かが手動でこっそり変更してたら困るでしょ?それを自動で「あ、ズレてる!」って教えてくれるのがドリフト検知なんだ。
ドリフト検知とは
ドリフト検知(Drift Detection) とは、Infrastructure as Code(IaC) で定義したインフラの「あるべき姿」と、実際にクラウドや環境上で動いている「現在の状態」を比較し、差異(ズレ)を自動的に検出する仕組みのことです。「ドリフト(drift)」とは「漂う・ズレる」という意味で、コードから定義が流れ去ってしまった状態を指します。
IaCでは、サーバーやネットワークの設定をコードとして管理し、「いつでも同じ状態に再現できる」ことが理想です。しかし現実には、障害対応のために担当者が手動でサーバー設定を変更したり、管理コンソールからポチポチと設定を変えたりすることが起こります。こうしたアウトオブバンド変更(帯域外変更)が積み重なると、コードと実環境が少しずつズレていきます。
ドリフト検知はこのズレを定期的・自動的に発見し、「コードに戻すべきか」「コードを更新すべきか」を判断する材料を提供します。セキュリティ設定の意図しない変更 や コンプライアンス違反の早期発見 にも活用でき、インフラ管理の信頼性を大きく高める機能です。
ドリフトが起きる原因と影響
| 原因 | 具体例 |
|---|---|
| 手動操作 | 障害対応でコンソールから直接セキュリティグループを変更 |
| 複数チームの競合 | インフラチームとアプリチームが別々に設定を触る |
| 自動スケーリング | クラウドが自動的にリソースを追加・変更する |
| 外部サービス連携 | 外部ツールがAPIで設定を書き換える |
| ヒューマンエラー | 「テスト用の変更」をそのまま戻し忘れる |
ドリフトが放置されると次のような問題が起きます。
- 再現性の喪失: コードから環境を再構築しても、現行と異なる環境ができてしまう
- セキュリティホール: 意図しないポート開放や権限付与が見過ごされる
- 障害調査の困難化: 「コードを見ても実際と違う」状態で原因調査が混乱する
覚え方
「ドリフト=設計図と現場のズレ」
車のドリフト走行で「タイヤが向いてる方向と実際に進む方向がズレる」イメージそのまま!コードが指す方向と、実際のインフラが向いている方向がズレてしまった状態だよ。
主要ツールのドリフト検知機能
| ツール | 機能名 | 検知方法 | 特徴 |
|---|---|---|---|
| AWS CloudFormation | Drift Detection | スタック単位でリソースを比較 | AWSコンソール・CLIから手動実行も可 |
| Terraform | terraform plan / terraform refresh | ステートファイルと実環境を比較 | CI/CDに組み込みやすい |
| Pulumi | pulumi refresh | ステートと実環境を比較 | 複数クラウド対応 |
| AWS Config | 構成変更の継続的記録 | リアルタイムで変更を検知 | 変更履歴・コンプライアンス評価も可能 |
| Driftctl | OSSのドリフト検知専用ツール | Terraformステートと実環境を比較 | 「管理されていないリソース」も検出 |
Terraformでのドリフト検知フロー
① terraform plan を実行
↓
② ステートファイル(.tfstate)と実環境を比較
↓
③ 差分があれば "Plan: X to change" として表示
↓
④ ① コードに合わせて実環境を修正(terraform apply)
② 実環境の変更をコードに取り込む(コードを更新)
③ 意図的な変更なら ignore_changes で除外
ドリフト検知の仕組み(SVG図解)
歴史と背景
- 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パイプライン — コードの変更を自動的にテスト・デプロイする仕組み
- コンプライアンス管理 — セキュリティや法令に沿った設定・運用を維持する取り組み