GitOpsはアプリケーションセキュリティを強化するのか?
2023年8月21日
0 分で読めますGitOpsは2017年にWeaveworksによって提唱されました。なじみのあるツールを使ってクラウドネイティブアプリケーションの継続的デプロイを実現し、Kubernetesクラスターの管理やアプリケーションのデリバリーにおける開発者体験を向上させます。
GitOpsでは、本番環境におけるインフラストラクチャのあるべき状態をGitリポジトリに記録します。自動化されたプロセスが本番環境の状態を継続的に確認し、リポジトリで宣言された状態と比較します。これらのGitリポジトリには、継続的インテグレーションとデプロイ(CI/CD)、デリバリー、テストなどの状態を記述した宣言的な仕様が保存されます。そのため、GitOpsではバージョン管理によって、CDプロセス中にツールを切り替えることなくデプロイを処理できます。つまり、GitはInfrastructure as Codeの信頼できる唯一の情報源です。
この記事では、GitOpsの基本原則と、それがアプリケーションセキュリティをどのように強化するのか、また、変更を迅速にデプロイするプロセスが効率向上にどう役立つのかを解説します。
GitOpsの4つの原則
宣言的な記述
宣言的な記述のパラダイムでは、開発者がアプリケーションに求める要件を記述できます。アプリケーションをホストするシステムが、指定された要件を満たすようにアプリケーションの配置方法を決定します。これにより、開発者はデプロイの段取りではなく、アプリケーションそのものに集中できます。
バージョン管理
GitOpsを使えば、CDパイプラインの変更、以前のデプロイバージョンへのロールバック、変更のマージを簡単に行えます。Gitリポジトリで、アプリケーションの状態に関するプルリクエストなどの操作を管理します。その状態を保存することで、不変性とバージョン管理を徹底し、バージョン履歴を記録します。
変更承認の自動化
開発者はGitリポジトリを通じてプルリクエストやマージリクエストを作成し、変更を適用します。CIパイプラインが実行され、宣言された要件を満たしていれば、要求された変更がマージされます。マージ後は、開発者の操作を介さずにGitOpsワークフローのオペレーターがデプロイプロセスを実行します。
継続的な照合
GitOpsパイプライン内のソフトウェアエージェントは、本番環境のインフラストラクチャの状態を継続的に監視し、バージョン管理で定義されたあるべき状態と比較します。そして、本番環境をあるべき状態にするために必要な変更を加えます。
GitOpsがアプリケーションセキュリティを強化する仕組み
この4つの原則により、GitOpsはアプリケーションセキュリティに大きな効果をもたらします。
まず、宣言的な仕様をGitでバージョン管理すれば、重大なセキュリティインシデントが発生した場合でも、侵害されたバージョンに依存せず、インフラストラクチャを迅速に複製してセットアップできます。このインシデント対応能力により、ダウンタイムを短縮できます。Gitのバージョン管理システムが備える強力な暗号技術により、変更を正確に追跡・管理できます。また、暗号技術を使って変更に署名することで、作成者と出所を証明し、あるべき状態を安全に保つことができます。
さらに、GitOpsワークフローのソフトウェアエージェントは、あるべき状態と実際の状態に差異があればアラートを発し、重大な脆弱性やセキュリティ上の問題をすばやく検知できるようにします。変更承認を自動化すれば、必要に応じてシステムを更新またはロールバックできるため、セキュリティ侵害にも迅速に対応できます。
コードとして管理するセキュリティ対策
GitOpsモデルでは、セキュリティ対策も含め、サイクル全体のすべてをコードとして管理します。セキュリティ設定やポリシーをコードとしてGitリポジトリに宣言できます。その結果、ワークフロー内でセキュリティ脆弱性やバグによって生じた変更をすばやく特定できます。これにより、ユーザーは侵害に早期対応し、以前にデプロイしたセキュリティ設定へのロールバックや新しいバージョンのデプロイで問題を修正できるため、パイプラインの変更を迅速に進められます。また、Infrastructure as Codeを使えば、影響を受けるコード行をリポジトリにプッシュする際に、差し迫った攻撃の規模を予測できます。
セキュリティ対策のシフトレフト
これによって、開発者やサイバーセキュリティの専門家は、どのようにセキュリティ対策をシフトレフトできるのでしょうか。セキュリティをコードとして実装すれば、セキュリティを優先事項に位置付け、パイプラインの早い段階で導入できます。これにより、後々セキュリティ上の問題につながりかねない、必要な状態からの変更を特定できます。また、Gitのバージョン管理システムで適用する前にセキュリティポリシーを作成してレビューすることもでき、開発を加速できます。
GitOpsでコンプライアンスをコードとして実現する方法
コンプライアンスポリシーは、開発チームが高品質で安全なソフトウェアを維持するのに役立ちます。ポリシーをコードとして実装するには、ポリシーをテキストファイルで定義する必要があります。これをコンプライアンスポリシーに適用するには、ポリシー管理と適用のために、コンプライアンスポリシーを宣言的なコードにする必要があります。システムの複数のバージョンにポリシーを手動で適用する必要がないため、大規模なポリシー適用を強化できます。また、CI/CDツールを使ったポリシーテストの自動化も簡単になります。
変更の迅速化
一般にGitOpsでは、自動化されたパイプラインを通じて効率的に変更を反映できるため、本番環境のインシデントにすばやく対応できます。GitOpsはCI/CDを活用してインフラストラクチャの上に抽象化レイヤーを設け、セキュリティポリシーと設定による審査を経た後にのみ、システムの状態に変更を適用します。そのため、アプリケーションや人間のユーザーから、基盤となるシステムとそのコンポーネントを隠すことができます。
さらに、インフラストラクチャ管理はすべて単一のプラットフォーム上で行われるため、変更を安全に追跡・記録できます。実際のシステムの状態を定義されたあるべき状態と比較することで、監査も簡素化されます。Gitのコミット履歴は、誰がいつ設定を変更したかを含む、自然なログを備えた信頼性の高い監査証跡となります。自動化されたCI/CDワークフローにほかのツールを追加して、ログをさらに記録することもできます。
GitOpsでCI/CDパイプラインを保護する
GitOpsは単なる次の流行ではありません。安全で信頼性が高く、迅速な運用を実現します。
この記事では、GitOpsによってアプリケーションセキュリティを強化する4つの原則を紹介しました。宣言的なパラダイムであるべき状態を定義することで、災害発生時のロールバックが可能になります。CI/CDパイプライン内のソフトウェアエージェントがシステムを常時監視して変更を検知し、宣言ファイルで定義されたあるべき状態との整合性を保ちます。さらに、Gitの強力な暗号技術システムにより、アプリケーションコードと設定に加えられた変更を正確に追跡できます。
また、GitOpsがセキュリティやポリシーをコードとして強化する方法についても解説しました。GitOpsでは、設定をコードとして扱うのと同様に、セキュリティポリシーやコンプライアンスポリシーをテキストファイル内でコードとして宣言できます。これにより、CI/CDパイプラインで新たな変更を簡単に実装・検証できます。ポリシーは新バージョンのデプロイ時に自動適用されるため、迅速なデプロイにもつながります。最後に、GitOpsは基盤システムからユーザーやマシンを隔てる抽象化レイヤーを提供するとともに、ログを記録する強力な監査システムも備えています。
GitOpsは、設定管理やCI/CDプロセスにおけるセキュリティ自動化に大きなメリットをもたらします。



