DevSecOps、シフトレフト、GitOps。おそらくこれらすべての用語を最近耳にしたことがあると思いますが、正確な意味まではわからない場合もあるのではないでしょうか。実際には、これらのプラクティスは同じ原則を数多く共有しており、開発者がセキュリティに費やす時間が短縮されると同時に、より良い成果を達成することができます。こうしたことを望まない人がいるでしょうか。不明瞭な点を明確にするとともに、これらの用語の意味と、セキュリティおよび開発チームにどのように適用されるかについて詳しく見ていきましょう。
DevSecOpsとは:DevOpsの原則をセキュリティに適用
近年、DevOpsはますます一般的になってきており、開発者は運用面の問題に対してより多くの責任を負うようになっています。つまり、システムに障害が発生した場合、それを修正する責任はすべての人にあるという考え方であり、システムダウンの抑制につながります。DevOpsは、開発と運用を分けるのではなく、これらの機能に対する責任はコーディング、リリース、管理に携わるすべての関係者が連帯で負うものであると位置付けています。
これまでのDevOpsへの移行による考え方の転換と同様、セキュリティの考え方の転換も進んでいます。これは一般的にDevSecOpsと呼ばれています。DevSecOpsとは、アプリケーション開発ライフサイクルに関わるすべての関係者が運用に対する責任を負うように、アプリケーションのセキュリティについても責任を負うようにすることです。
DevOpsとDevSecOpsの違いは何でしょうか。DevOpsでは、インフラストラクチャを管理していない場合であっても、すべての人がシステムダウンに対する責任を負います。DevSecOpsでは、ソフトウェアの開発に関与していない場合であっても、すべての人が脆弱性に対する責任を負います。DevOpsのビジネス目標がシステムダウンを抑制することであるように、DevSecOpsのビジネス目標はデータ損失を無くすことです。システムダウンが抑制されることはデータ損失を無くすことにもつながります。結局のところ、可用性はCIAトライアドの一部なのです。満足のいくセキュリティ対策ができていない開発チームも、DevSecOpsを実施することでセキュリティの懸念を解消できます。
ただし、すべての人がDevSecOpsを理解しているわけではありません。なぜなら、名前の順序が紛らわしいだけでなく、セキュリティが特別であるかのように見えるからです。実際には、開発プロセスの全ステップで、あらゆる機能をこのように緊密に統合する必要があります。継続的なセキュリティは、継続的インテグレーションおよび継続的デリバリーと同様です。つまり、セキュリティも同じように開発プロセスに継続的に統合する必要があります。
重要なのは、開発ライフサイクルの早い段階でセキュリティプラクティスを適用するという考えを実行に移すことです。
DevSecOpsの実践:シフトレフトにより、開発チームはセキュリティを含むソフトウェア品質の問題点を早期に把握可能
開発チームが開発中のものに対する責任を負うようにするには、開発ライフサイクルの早い段階でセキュリティを含むさまざまな開発プロセスをシフトレフトする必要があります。セキュリティテストを含む、すべてのテストステップを開発時の最終段階から早い段階に移行することで、ミスの数が減り、運用面の懸念事項に対処するコストが削減され、開発者はより迅速に対応することができます。
シフトレフトの原則は、運用だけでなくセキュリティにも適用されます。ユーザーに影響を及ぼす前にセキュリティ侵害を阻止し、セキュリティ脆弱性への対処と修正を行えるように迅速に対応することが重要です。セキュリティをリリース直前のチェック項目として機能させる代わりに、開発ライフサイクルのすべてのステップにセキュリティを統合することで、開発チームは問題を早期に見つけることができるようになります。開発者を中心としたセキュリティ対策アプローチは、セキュリティ対策を常にワークフローに組み込むことができ、リリースの数日後や侵入テストレポートの数か月後などの遅いタイミングではなく、コーディングの途中で問題に対処できることを意味します。
シフトレフトはプロセスの変更であり、1つの具体的な制御やツールではありません。シフトレフトとは、すべてのセキュリティ対策をより開発者中心にすること、および開発者にその場でセキュリティに関するフィードバックを提供することです。コードに関する作業をGitで行っている開発者には、セキュリティをシフトレフトするコンセプトをGitに適用することが適切だと考えています。
セキュリティ制御を一貫性のある方法で管理:GitOpsでは、Gitを開発環境にとって信頼できる情報源として利用可能
GitOpsは、環境内のあらゆるものをコードとして考えるという現在の傾向を活用しています。もちろん、GitOpsはコードとしてのインフラストラクチャです。ただし、GitOpsはコードとしての構成、コードとしてのポリシーでもあり、考え得る、ほぼあらゆるものにコードを使用します。適用されないものとしては、機密情報くらいでしょうか。機密情報はコード内に含めないでください。
GitOpsは、考え方とプロセスの変更であるDevSecOpsやシフトレフトとは対照的に、実装に関してはより規範的です。GitOpsは、開発者の環境にとって信頼できる情報源としてGitを使用し、その信頼できる情報源に変更を加える方法を管理するための履歴およびレビューツールとしてGitのプロパティを使用するシステムです。
また、導入を可能な限り自動化し、エラーのないプロセスにするために、コードの上に構築されるものでもあります。GitOpsを使用すると、コードへの変更をプッシュしたり、gitワークフローの一部として変更をレビューしたりできます。その後、自動化を使用して、本稼働環境で実際の変更を導入、モニタリング、調整するという面倒な作業をすべて実行することができます。
GitOpsは、DevOps、特にDevSecOpsにおける理想を最適にサポートするシステムです。デプロイを開発から切り離すことができるため、どのような頻度でもデプロイできます。DevOpsの状況に関するDORAのレポートによると、バージョン管理、継続的インテグレーション、テストの自動化、Gitで利用可能なその他のツールを活用している場合、より迅速に開発できることがわかっています。
DevOpsでは、これはシステム停止後の対応における平均復旧時間(MTTR)に関して特に重要となります。また、DevSecOpsでは、これは平均修復時間(便宜上こちらもMTTR)に関して重要です。バージョンを管理できれば、ユーザーの環境で使用されているバージョンを把握でき、アップグレードが必要かどうか、脆弱性の影響を受けやすいかどうかが分かります。十分なテストを実施することで、パッチのような修正を迅速に導入でき、インフラが壊れることはありません。
Gitを使用することで、信頼できる唯一の情報源を持つことができ、インフラ、構成、およびアプリケーションに対応できます。この延長線上で考えると、変更を加えるときも単一のプロセスで対応できます。必要な制御とゲートをこのプロセスに実装して、開発パイプラインに関するすべてのセキュリティニーズを確実に満たすことができます。また、一貫性のある開発プロセスにすることで、導入時だけでなくコード(または設定)のチェックイン時やビルド時などの早期にセキュリティ要件を検証し、シフトレフトを実現できます。
要約すると、DevSecOpsは、セキュリティプラクティスを開発ライフサイクルの一部として認識して継続的に適用し、その責任をチーム全体で共有するという、考え方の転換です。これには多くの場合、セキュリティテストを開発の一部としてライフサイクル内の早期にシフトレフトすることが伴います。そうすることで、セキュリティおよび開発者をワークフロー内に常に含めておくことができます。また、早い段階でセキュリティの問題に対処でき、修正コストを抑えられますさらに、Gitをお客様の環境にとって信頼できる情報源として利用することで、こうした原則をコードだけでなく、コード周辺の、設定を含むあらゆるものに対してより簡単に適用できます。こうした概念を適用する単一の方法があるわけではなく、むしろセキュリティが現在の開発ワークフローにとってますます重要かつ不可欠になっていると認識することが重要です。
すべての開発者がセキュリティに対する責任を負えるようにサポートし、開発ライフサイクルの早い段階でセキュリティテストを実行し、Gitを使用することで、開発チームはセキュリティ問題を早期に発見して修正することができます。今後のブログでは、こうしたことがファーストパーティおよびサードパーティのコードに対してどのような意味を持つかについても分析します。
安全なソフトウェア開発のために
より簡単な方法でコードを安全に維持したい場合は、このシリーズの今後の投稿にご注目ください。または、セキュリティに関する当社のホワイトペーパーをご確認ください。
本ブログで紹介した各機能は、以下のサイトで詳細を確認することができます。
GitHubでは、企業における安全なソフトウェア開発を進めるためのソリューションを提供しています。ご相談がある場合は、GitHub営業担当にお問い合わせください