DevSecOps とは
マルチクラウド環境において、ソフトウェア開発ライフサイクルの各フェーズにセキュリティ対策を統合する方法について説明します。
DevSecOps の定義
DevSecOpsとは、開発 (Development)、セキュリティ (Security)、運用 (Operations) の頭文字をとったもので、ソフトウェア開発ライフサイクルのすべてのフェーズにセキュリティを統合するフレームワークです。組織でこのアプローチが採用されるのは、セキュリティの脆弱性を持つコードをリリースするリスクを軽減するためです。コラボレーション、自動化、明確なプロセスを通じて、問題が想定より困難で対処するのにコストがかかる場合に、チームはそれを後回しにするのではなく、セキュリティに対する責任を共有します。DevSecOps は、マルチクラウド セキュリティ戦略の重要な要素です。
DevSecOps と DevOps
従来のソフトウェア開発では、プロジェクトは計画、設計、開発、統合、テストの各フェーズに分けられ、数か月から数年かけて順次行われます。このアプローチは非常に理路整然としたものですが、多くの組織では非常に多くの時間がかかり、継続的な製品改善に対する顧客の期待に応えることが困難になっています。さらに、一般的にセキュリティは後回しにされるため、企業は侵害のリスクにさらされます。
競争力を維持するために、多くの企業では、機能は豊富でも時間のかかるプロジェクトよりも、高品質なコードの小さな単位の達成を優先する DevOps モデルを採用しています。このフレームワークでは、ソフトウェア開発チームと運用チームが協力して、プロセス全体にテストと統合を組み込みます。自動化、標準化されたプロセス、コラボレーションにより、チームは品質を犠牲にすることなく迅速に行動できます。
DevSecOps は、プロセスのあらゆる側面にセキュリティを組み込む DevOps を強化したものです。この目標は、プロジェクトの最初からセキュリティの問題に対処することです。このフレームワークでは、チーム全体で品質保証とコード統合だけでなく、セキュリティにも責任を負います。実際には、問題を後回しにすることなく、計画中にチームでセキュリティの影響について議論し、開発環境でセキュリティ問題のテストを開始することを意味します。このアプローチの別名は、シフト レフト セキュリティーです。
DevSecOps が必要な理由
攻撃者が組織のデータや資産にアクセスするために使う方法は数多くありますが、一般的な手口はソフトウェアの脆弱性を突くことです。この種の侵害にはコストと時間がかかり、重大度によっては企業の評判を損なうことにつながります。DevSecOps フレームワークは、悪意のある行為者に利用される可能性のある構成誤りやその他の脆弱性を持つソフトウェアをデプロイするリスクを低減します。
DevSecOps の主な構成要素
成功する DevSecOps プロセスには、次のコンポーネントが含まれます。
-
継続的インテグレーション
継続的インテグレーションでは、開発者は 1 日に何度も中央リポジトリにコードをコミットします。その後、コードは自動的に統合され、テストされます。このアプローチを使用することで、チームは統合の問題やバグを解決すべき問題がいくつも発生する可能性のある最後まで後回しにすることなく、プロセスの早い段階で検出できます。
-
継続的デリバリー
継続的デリバリーは、継続的インテグレーションの上に構築され、コードをビルド環境からステージング環境に移行するプロセスを自動化します。ステージングに入ると、単体テストに加えて、ユーザー インターフェイスが機能し、コードが正常に統合され、API が信頼できるものであり、ソフトウェアが予想されるトラフィック量を処理できることなどが自動的にテストされます。このアプローチの目標は、そのまま業務に利用でき、顧客に価値を提供するコードを一貫して提供することです。
-
継続的セキュリティ
ソフトウェア開発ライフサイクル全体にセキュリティを構築することは、DevSecOps の重要なコンポーネントです。これには、プロセスの初期段階での脅威モデリングと、開発者独自の環境から始まるライフサイクル全体を通して自動化されたセキュリティ テストが含まれます。早い段階で、頻繁にセキュリティ上の問題がないか徹底的にテストすることで、組織は問題を最小限に抑えたソフトウェアを効率的に提供できます。
-
コミュニケーションとコラボレーション
DevSecOps は、個人とチームが緊密に連携することに大きく依存します。継続的インテグレーションでは、コードの競合に対処するためにユーザーが協力する必要があり、チームは同じ目標に向かって団結するために効果的なコミュニケーションをとる必要があります。
DevSecOps を実装する方法
DevOps プロセスにセキュリティを追加するには、慎重な計画が必要です。チームにとって最も摩擦が少なく、セキュリティ上の最大の恩恵が得られるプロセスからゆっくり開始します。ここでは、一般的な DevOps スプリントにセキュリティを追加する方法をいくつか紹介します。
-
計画と開発
開発スプリントの早い段階でセキュリティを導入することは、後の脆弱性を軽減するのに役立つだけでなく、コードが構築され統合される前に問題に対処することが容易になるため、時間の節約にもなります。計画と開発の段階で、脅威モデリングを使用して、アプリケーションに対する潜在的な脅威を特定し、軽減します。これにより、最初からアプリケーションにセキュリティを組み込むことができます。コードが共有リポジトリにコミットされる前にセキュリティ上の問題を発見するために、統合開発環境セキュリティ プラグインなどの自動チェックを実装します。これにより、開発者が書いたコードに潜在的なセキュリティ リスクがある場合、即座にフィードバックが行われます。コード レビューの際に、セキュリティの専門知識を有するユーザーに改善策を提示してもらいます。
-
コードのコミット
DevSecOps プロセスを成功させる鍵となる 1 つが、継続的インテグレーションです。開発者は通常、統合の問題を早期発見できるように、1 日に数回、中央リポジトリにコードをコミットします。このフェーズに自動化されたセキュリティ チェックを加えることが重要です。これには、サードパーティ製ライブラリと依存関係のスキャン、単体テスト、静的アプリケーション セキュリティ テストが含まれます。継続的インテグレーションと継続的デリバリーのインフラストラクチャを悪意のあるコードを実行したり資格情報を盗んだりしようとする攻撃者から保護するために、ロールベースのアクセス制御をデプロイすることも重要です。
-
ビルドとテスト
テスト環境で自動化されたセキュリティ スクリプトを実行することで、これまで検出されなかった潜在的な問題を発見できます。このフェーズで実行できるセキュリティ テストには、動的アプリケーション セキュリティ テスト、インフラストラクチャ スキャン、コンテナー スキャン、クラウド構成の検証、セキュリティ受け入れテストなどがあります。
-
運用環境
アプリケーションが運用環境にデプロイされると、一部の組織では侵入テストに取り組み、ライブ環境の弱点を見つけようとします。侵入テストでは、ユーザーは攻撃者の考え方をもとに、アプリケーションに侵入する方法を探します。
-
運用
どんなに優れた DevSecOps プロセスでもすべてを把握できるわけではないため、アプリケーションの脆弱性と脅威を継続的に監視することが重要です。分析データは、セキュリティ態勢が改善されているかどうかを評価し、最適化が必要な領域を明確化するのに役立ちます。
-
DevSecOps のツールとテクノロジ
セキュリティ ツールを選ぶ場合は、現在の DevOps テクノロジとうまく連携するものを選択することが重要です。そうすることにより、セキュリティをプロセス全体に簡単に組み込めるようになります。必要なツールの種類の一部を次に示します。
-
コード スキャンとしてのインフラストラクチャ
DevSecOps チームは、効率性を高めるために通常 Terraform などのオープン ソースのツールを使用し、ネットワーク、仮想マシン、ロード バランサーのようなインフラストラクチャを手作業ではなくコードで管理し、プロビジョニングします。Terraform は、数百から数千ものサーバーにわたる一貫したインフラストラクチャの設定と更新を行うのに役立ちます。構成の誤りが運用環境にデプロイされるリスクを低減するために、コード スキャン ツールは、コード レベルでインフラストラクチャがセキュリティ ポリシーや標準に準拠していないかどうか自動的に確認します。
-
静的アプリケーション セキュリティ テスト
DevSecOps の開発者は、コードがコンパイルされる前に、カスタム コードにセキュリティの脆弱性がないか確認するテストを開始します。これは、ビルドに影響を与えることなく問題を修正するのに役立ちます。静的アプリケーション セキュリティ テスト ツールは、自動チェックとリアルタイム フィードバックを使用して、このプロセスを簡素化します。多くのツールは、どのコードが危険かを正確に特定し、修正案を提示します。
-
ソフトウェア構成分析
チームがアプリケーションや機能をより効率的に構築する方法の 1 つは、サードパーティ製のプラグインやフレームワークを使用することです。これらの事前構築済みツールは時間の節約にはなりますが、ライセンスの問題、コードの書き方の不備、セキュリティの脆弱性などのリスクをもたらす可能性があります。ソフトウェア構成分析ツールは、アプリケーションのオープン ソース コンポーネントを特定し、それらを財産的価値のあるデータベースまたは無料データベースと比較して評価することで、ライセンス違反やセキュリティおよび品質の問題を検出します。
-
対話型アプリケーション セキュリティ テスト
品質保証テストの実行中またはアプリケーションの使用中、対話型アプリケーション セキュリティ ツールでは、脆弱性を検出するためにコードをスキャンし、コードのどこに問題があるかを特定するレポートが提供されます。
-
動的アプリケーション セキュリティ テスト
動的なアプリケーション セキュリティ テストでは、悪意ある行為者がアプリケーションを攻撃するために使用する可能性がある方法をエミュレートします。このテストはアプリケーションの実行中に行われ、事前定義済みユースケースに基づきます。
-
コンテナーのスキャン
コンテナーは DevSecOps で幅広く使用されていますが、それは開発者が自己完結型のコード単位を簡単にデプロイできるようにするためのものです。コンテナー内には、コンテナーのプロセスを実行するコードを含むコンテナー イメージが含まれます。ただし、これらのイメージは既存のイメージを使用したり、公開リポジトリから引用したりしてビルドされる場合が多くあります。コンテナー スキャン ツールは、コンテナーをスキャンし、公開された脆弱性データベースまたは財産的価値のある脆弱性データベースと比較することで、潜在的なセキュリティ問題を明らかにします。
DevSecOps のベスト プラクティス
DevSecOps は、プロセスやツールと同様に、カルチャの変革に関するものです。このフレームワークをできるだけスムーズに採用するためのベスト プラクティスを次に示します。
-
カルチャのシフト
人々は働き方が変わることに抵抗し、対立が生じる可能性があることを認識しておいてください。適応するには、組織の目標と期待を明確に伝達し、オープンな対話の機会を多く設け、チームがメンバーに最適なツール、プロセス、ペースを見つけるまで、柔軟に対応する必要があることを予期することが役立ちます。
-
要件とメトリックの定義
最小限のセキュリティ ベースラインを確立します。ガイダンスとして、業界と規制の要求事項、または Open Worldwide Application Security Project® (OWASP) の上位 10 件の Web アプリケーションに対する重大なリスク、およびSANS のソフトウェア エラーの上位 25 件を参照してください。要件を定義したら、進捗状況を監視するために追跡するメトリックを決定します。
-
小さく始める
セキュリティ自動化ツールには、コードに問題がないか確認するための多くのオプションが用意されていますが、特に DevSecOps の導入初期にそれらをすべてオンにすると、チームで対応できなくなる可能性があります。どのツールを実装し、どれだけの問題をスキャンするかは慎重に判断してください。
-
脅威モデリングの実行
脅威モデリング プロセスは、簡単なものから詳細で技術的なものまで、必要なだけ開発できます。アプリケーションの現実的なセキュリティ ビューをドキュメント化するために、次のアプローチを使用します。
- 攻撃者がどのようにアプリケーションの設計を乱用するか。
- 脆弱性を修正する方法。
- さまざまな問題の優先順位付け。
-
自動化の実装
自動化は、DevSecOps プロセスの品質とスピードの両方を可能にするための鍵です。継続的インテグレーションと継続的デリバリーのライフサイクルのすべてのフェーズで自動化されたセキュリティ スキャンを組み込むことで、プロセスを大幅に遅らせることなく、アプリケーションのセキュリティを向上させることができます。
-
依存関係の管理
ほとんどの開発者は、アプリケーションを効率的に構築するために、サードパーティ製のパッケージやライブラリを使用しています。問題は、これらのソリューションの中にはセキュリティ上の欠陥があり、かつ開発者は常に最新の状態に維持することを注視しているわけではないことです。リスクを軽減するには、使用するコンポーネントがセキュリティ リスクを十分考慮し、更新するための標準化されたプロセスを開発していることを確認してください。
-
評価と改善
プロセスの機能を定期的に評価し、必要に応じて調整することで、組織が目標を達成できるようにします。スプリント完了後に、責めることなく事後分析を行うことで、改善の機会を明確化できる可能性があります。分析データと脅威インテリジェンスは、現在のアプローチでは対応できていないセキュリティ ニーズがあるかどうかを判断するのにも役立ちます。
-
クラウド ネイティブ アプリケーション用の DevSecOps
クラウドネイティブ アプリケーションはクラウド向けに設計されており、通常はベンダーに依存しないため、クラウド間で移植できます。開発チームは通常、マイクロサービス、コンテナー、自動化を使用してそれらをビルドし、DevSecOps プロセスに理想的に適合するようにします。継続的セキュリティ、継続的インテグレーション、継続的デリバリーをクラウドネイティブ アプリケーションの開発プロセスに組み込むことで、セキュリティを犠牲にすることなくスケーラビリティを実現できます。Microsoft Defender for DevOps のような自動化されたセキュリティソリューションを使用することで、コードと DevOps パイプライン全体のセキュリティを確保するのに役立ちます。アプリケーションをクラウドにデプロイしたら、リスクがないかどうか監視を続けます。クラウド ワークロード保護プラットフォーム (CWPP) は、マルチクラウド環境全体のワークロードに対する脅威を検出して軽減することで、これらのアプリケーションと基礎となるデータを保護するのに役立ちます。クラウド セキュリティ態勢管理 (CSPM) ソリューションは、環境全体の構成の誤りや脆弱性を検出し、対処します。
Microsoft Security についてさらに学ぶ
Microsoft Defender for Cloud
包括的なクラウドネイティブ アプリケーション保護プラットフォームを使用して、開発から実行まで、マルチクラウドやハイブリッド環境を保護します。
Microsoft Defender for Cloud Apps
サービスとしてのこのソフトウェア ソリューションにより、アプリのセキュリティ保護、データの保護、アプリのセキュリティ態勢のレベルアップをモダン化することができます。
Microsoft Defender クラウド セキュリティ態勢管理
コンテキストに応じたクラウド セキュリティ態勢管理を行い、マルチクラウド環境を横断して最も重大なリスクに焦点を当てることができます。
よく寄せられる質問
-
DevSecOps は、ソフトウェア開発ライフサイクル全体にセキュリティを統合するプロセスです。組織でこのアプローチが採用されるのは、セキュリティの脆弱性を持つコードをリリースするリスクを軽減するためです。コラボレーション、自動化、明確なプロセスを通じて、問題が想定より困難で対処するのにコストがかかる場合に、チームはそれを後回しにするのではなく、セキュリティに対する責任を共有します。
-
DevSecOps は、開発、セキュリティ、運用を意味するものです。これは、ソフトウェア開発のすべてのフェーズにセキュリティを統合するプロセスを指します。
-
シフト レフトは DevSecOps における概念であり、開発プロセスの最初からセキュリティ対策を組み込むことを指します。
-
DevSecOps フレームワークには、継続的インテグレーション、継続的デリバリー、継続的セキュリティが含まれます。これは、セキュリティ、運用、セキュリティ チームが連携して、セキュリティ脆弱性を軽減しながら、高品質のソフトウェアを迅速に提供するための責任を共有する方法です。
-
DevSecOps プロセスは 1 つだけではありませんが、これらのプロジェクトを実行する一般的な方法は、作業をスプリントに分割することです。各スプリントには、計画、開発、ビルド、テスト、運用などのコンポーネントが含まれます。スプリントを通じて、チームは自動化を使用して品質保証の問題に継続的に対処し、継続的に統合し、セキュリティ リスクを継続的にテストします。
Microsoft Security をフォロー