インフラのプロビジョニングは適切なプロセスや機能が伴わないと、果てしなく回り続ける車輪の中にいるような感覚に陥ります。この無限ループから脱する解決策は「インフラストラクチャのコード化(IaC:Infrastructure-as-Code)」を採用し、パブリッククラウドからプライベートデータセンターまで、複数の環境におけるプロビジョニングを自動化することです。

IaCはインフラを展開または変更する時の(人やワークフローなどの)ボトルネックをなくし、アプリケーションを提供するまでの時間を短くするというメリットをもたらします。しかしかつてのようなチケットベースのITプロセスではないため、注意が必要です。インフラの変更が、あらゆるセキュリティのベストプラクティスに従っていることを確認しないため、逸脱がないように“ガードレール”のようなものを設ける必要があります。

もし、IaCで標準化やガードレールがない場合どうなるでしょうか?多数の開発者と運用者が毎日動的にインフラをプロビジョニングしている環境では、次第にガバナンスが欠如し、コンプライアンスの維持が困難になります。結果として、セキュリティインシデントのリスクが高まることになります。

セキュリティは担保するだけではなく、ソリューションが効率的であることも確認していく必要があります。IaCはクラウド運用、IT、R&D、セキュリティ、エンジニアリング、コンプライアンス、財務など、複数のチーム間で部門横断的な目標を達成しながら、インフラをプロビジョニングする担当者らがコンポーネントを共同で再利用する上で役立ちます。さらに、セキュリティとデータガバナンスのコンプライアンスの強化にも役立ちます。

しかしながら、IaCのワークフローを標準化して整備したとしても、完璧ではありません。実際には組織の目標や不測の事態に応じて、インフラは変更および更新され続けます。インフの状態が変化し、コードで定義されたものと一致しない状態 (この現象を「ドリフト」と呼びます) になると、IaCの効率とセキュリティを損なう危険性があります。そのため、リソースのライフサイクル管理が重要になってきています。ここで鍵となるのがドリフト検出です。

IaCの価値を最大化するためには、インフラで起きるドリフトの原因、その影響 (特にセキュリティ) を理解し、問題の解決に役立つドリフトの検出と修復を実装するための最善の方法を理解することが重要です。

インフラが「ドリフト」してしまう原因

ドリフトが発生してしまう原因はいくつか考えられます。まず、組織内の全員が適切に確立された「IaCのワークフロー」を使用していない場合があります。全員が同じものを使用していないため、コードで定義されたインフラと実際の状態との間に違いが生じてしまう可能性があります。

もう1つの一般的な原因には、「緊急事態の対応」があります。何らかの不慮の事態が起きると、対応管理チームは問題をできるだけ早く修復しようとします。場合によっては時間短縮のために、インフラにパッチ適用する時の標準的な手順をバイパスすることもあるでしょう。こうした手順のショートカットで起きる変更は、コードを追跡して解決することを難しくさせる可能性があります。

さらに時間が経過するにつれ、クラウドまたはサービスプロバイダーのシステムや仕様が更新される可能性もあります。すなわち、インフラのルールとプロバイダーのシステムが徐々に乖離するにつれ、ドリフトは大きくなります。例えば、何らかのサービスプロバイダーがサードパーティー向けに提供しているAPIで考えてみると、些細な仕様変更だったとしても、インフラに影響を与える可能性があるのです。

また、カスケード効果により、ドリフト検出が複雑化する可能性もあります。例えば、新しいインフラのリソースを作成または変更する場合、予期せずコード化されていない関連リソースが生じてしまう可能性があります。リソースの状態を変更するようなカスケード効果により、誰も気付かないうちに相互に影響を及ぼします。

ドリフトがインフラのセキュリティと機能に与える影響

クラウドの採用が広がるにつれ、組織のリソースとプロセスはますます複雑になり、インフラの状態に矛盾が生じる可能性があります。もし、インフラを調整するための標準的な手順、通知、ガイドラインがなければ、一時的な変更やわずかな調整であったとしてもビジネスに致命的な影響を与えるリスクがあります。

例えば、計画外のダウンタイム、監査結果、セキュリティインシデント、やり直し、未使用のリソース(無駄な出費)などです。

最も重要なことは、インフラのドリフトでリスクが生じると、問題が発生しないように対処することです。例えば重要なシステムが誤ってパブリック環境に公開されていたり、リソースが保護されていないことに気づかず重要なデータが漏えいしたりするなど、このような致命的なリスクが劇的に高まる可能性があります。

さらに、開発チームが本番環境の変更を認識していないと、ほぼ確実にアプリケーションが「突然」クラッシュしたり、デプロイしたプロジェクトが予期せず失敗したりするなど、インシデントに直面することになります。