DevSecOps の説明

2022年5月23日 // 2 min read

image

DevSecOps は、DevOps のアイディアに基づき、ソフトウェア開発ライフサイクル全体にセキュリティ プラクティスを適用することで、より安全なコードをより迅速にリリースします。

DevSecOps は、コラボレーション、自動化、継続的な改善を通じて、企業がセキュリティを業務に組み込み、より安全で高品質なソフトウェアを大規模に構築するのに役立つ一連のプラクティスを提供します。

DevOps は、多くの組織がソフトウェアを構築してリリースする方法に変革をもたらしました。しかし最近まで、ソフトウェア開発ライフサイクル (SDLC) の 1 つの側面 (セキュリティ) は、DevOps の対象外でした。DevSecOps は、DevOps がソフトウェア開発の全ステージを通じて品質、速度、緊密なコラボレーションを優先するのと同じ方法で、セキュリティをソフトウェア開発ライフサイクル (SDLC) に組み込むことで、これを修正しようとしています。最新の組織では、DevSecOps は単なる「DevOps」となり、セキュリティは SDLC エクスペリエンスに組み込まれています。

DevSecOps を導入する組織には通常、以下のようなメリットがあります。

  • データ侵害のリスクの軽減: DevSecOps は、設計によってコードを安全にすることを目指しています。SDLC 全体でセキュア コーディングの文化的プラクティス、安全な開発者環境、自動セキュリティ テストを組み合わせることで、セキュリティの脆弱性や欠陥が本番ソフトウェアに混入する可能性を軽減するのに役立ちます。

  • コンプライアンスの向上: DevSecOps の実行者は、多くの場合、自動化を使用してコード コンプライアンスを適用し、CI/CD パイプラインに直接ポリシー適用ツールを統合します。

  • 依存関係の信頼性向上: 最新のテクノロジー スタックは、多くの場合、パブリック パッケージ リポジトリからのサードパーティ コードに大きく依存しています。DevSecOps の実行者は、ソフトウェア リリース前に潜在的な問題を特定するために、ツールや自動テストを頻繁に活用しています。

  • エンド ユーザーへの迅速な価値提供: セキュリティ優先の文化を生み出し、自動チェックを適用することで、DevSecOps は、コードのデプロイを遅らせる個別のセキュリティ レビューの必要性を軽減します。

DevSecOps の主なメリットは?

DevSecOps は、SDLC の全てのステップにセキュリティを組み込もうとします。これは理想的に、コーディングからブランチのマージ、ビルド、デプロイ、そして本番ソフトウェアの運用に至るまで、各ステージでセキュリティ関連のテスト (自動化されているかどうかにかかわらず) が行われることを意味します。さらに、DevSecOps は、製品に携わる全員がそのセキュリティに責任を負うという考え方を推進します。これにより、チームは本番環境に移行する前に脆弱性を発見できるようになり、ソフトウェア リリースを遅らせる可能性のある後半ステージの手動によるセキュリティ レビューの必要性を軽減します。

DevSecOps のベスト プラクティス

バグのあるコードを本番環境にプッシュすると、カスタマー エクスペリエンスが低下し、ダウンタイムによってビジネスが失われる可能性があります。しかし、安全でないコードをデプロイした場合、その影響ははるかに深刻になる可能性があります。

DevSecOps は、DevOps の自然な進化であり、リリース直前に行われるサイロ化されたプロセスではなく、セキュリティを SDLC の中核的な部分にしようとしています。DevOps 以前の世界では、テスト チームと運用チームが開発からサイロ化されることが多かったように、現代のセキュリティは、多くの場合、DevOps ライフサイクルの外で行われる専門チームの仕事です。

DevSecOps は、SDLC 全体にセキュリティを組み込む必要があると主張しています。組織が既に DevOps を実践している場合でも、DevOps 文化を導入する方法を検討している場合でも、ここでは、DevSecOps プラクティスを確立するために必要な基礎となるベスト プラクティスを紹介します。

  • DevSecOps 文化を構築する: DevSecOps の成功は、全員がセキュリティの責任を負うことに依存します。つまり、SDLC の各担当者が、アプリケーションとインフラストラクチャの設定を防御的にコーディング、ビルド、テスト、設定します。DevOps と同様に、DevSecOps は、各個人が協力して可能な限り最も安全な製品を構築するオープンな文化の中で成功します。

  • 製品にセキュリティを設計する: DevSecOps は、最初の計画ステージから本番環境レベルのコードのデプロイまで、製品にセキュリティを設計することを目指しています。つまり、セキュリティ作業は機能作業と並行して計画され、実行者には開発作業の各ステージを通じてセキュリティの知識とテストが提供されます。目標は、セキュリティをチームの日常業務の一部にすることです。

  • 脅威モデリングのプラクティスを構築する: セキュリティの脆弱性の種は、多くの場合、コード行が記述される前に蒔かれます。計画フェーズで潜在的な脅威をモデル化し、そのような問題を軽減するようにインフラストラクチャとアプリケーションのアーキテクチャを設計します。また、信頼できる人物がシステムへの侵入を試みる侵入テストを定期的に実施することで、脅威モデルで見逃している可能性のある弱点を明らかにすることができます。

  • 速度とセキュリティを自動化する: 自動テストは SDLC 全体で使用され、適切なセキュリティ チェックが適切なタイミングで行われます。これによって、セキュリティ要件が満たされていることを確認しながら、コア製品の構築に集中する時間を増やすことができます。

  • 製品開発におけるセキュリティ チェックポイントを計画する: SDLC でリスク プロフィールが変化する移行ポイントを特定します。これは、開発者が自分のコードをメイン ブランチにマージした時点である可能性があり、そのコードがチーム メンバーのマシンで実行され、最終的に本番環境に到達する可能性が高まる可能性があります。その場合、プル リクエストを開始することは、適切な手動エスカレーションとともに、自動セキュリティ チェックの適切なトリガー イベントとなる可能性があります。

  • セキュリティの失敗を学習の機会としてとらえる: DevOps の継続的な改善の文化に基づいて、DevSecOps プラクティスを成功させるには、セキュリティ インシデントを学習の機会に変えるように努めます。これは、監査ログを活用し、インシデント レポートを作成し、悪意のある行為をモデル化して、ツール、テスト、プロセスを改善し、アプリケーションとシステムのセキュリティを強化することで実現できます。

  • 依存関係を常に把握する: 依存関係から生じる潜在的な脅威を理解し、軽減することは、製品のセキュリティにとって非常に重要です。社内コードと同じ脅威モデリングと自動テストを依存関係に適用します。GitHub では、オープン ソース ソフトウェアに存在する何千万もの脅威を特定し、その詳細を共有することで、組織や開発者が脆弱性を認識し、回避できるよう支援しています。

  • 分析機能とレポート機能を構築する: 継続的監視は DevSecOps プラクティスの重要な要素であり、これにはリアルタイムのアラート、システム分析、プロアクティブな脅威監視が含まれます。アプリケーションと DevSecOps パイプラインのあらゆる側面を測定することで、アプリケーション ヘルスを理解するための共通点を作成できます。ダッシュボードとアラートのレポートにより、問題が早期に浮き彫りになります。問題が発生した場合、設定したテレメトリー (アプリケーションレベルのログ収集など) により、インシデントの解決と根本原因の分析のためのインサイトが得られます。

DevSecOps 文化

DevSecOps 文化の構築は、セキュリティを全員の責任とすることから始まります。これは、多くの組織にとって大きな変化となる可能性があります。従来、セキュリティは開発者がセキュリティ専門家の手に委ねるものでした。また、それが摩擦の原因にもなっていました。エンジニアリング チームは、セキュリティ プラクティスを、ソフトウェアを迅速にリリースするための障害とみなしていました。

DevSecOps は、コードの作成、テストの実行、サービスの設定の際に、セキュリティを SDLC の中核とすることで、この認識を根本的に変えようとしています。新しい機能や修正はそれぞれ、セキュリティへの影響を考慮することから始まります。セキュリティとコンプライアンスのポリシーは、テストを通じて適用されます。何か問題が起こったときは、それを学び、次回はもっとうまくやるためのチャンスになります。

また、DevSecOps プラクティスのセキュリティは、ソフトウェア リリースを遅らせるものではなく、リリース自体の一部となり、より迅速で安全なデプロイメントにつながります。

ただし、DevSecOps プラクティスを成功させるには、SDLC の全てのステージにセキュリティを組み込む必要があります。これは組織によって異なります。ただし、DevSecOps 文化を定義する主柱があります。これには以下が含まれます。

  • 人: DevSecOps プラクティスは、異なる分野間の障壁を取り除き、各人が製品のセキュリティと品質に対する責任を共有する自然なコラボレーション環境を構築することを目指しています。

  • プロセス: DevSecOps は、セキュリティを SDLC の最後に行われることが多い個別のステージから、個人の作業の不可欠な部分に移行します。自動化されたセキュリティ評価、セキュリティを重視したユニット テスト、広範な監視、防御的なコーディングにより、製品ライフ サイクルの早い段階で脆弱性が表面化し、すばやく修正できる迅速なフィードバック ループが作成されます。

  • 製品: DevSecOps は、セキュリティ問題の特定を自動化する CI/CD などのテクノロジーを使用して。DevOps ツールチェイン上に構築されます。Dependency Scanning、静的および動的アプリケーション セキュリティ テスト、自動ポリシー適用ツールは、SDLC の全てのステージにセキュリティを組み込むためによく使用されます。幅広い最適なソリューションを相互に統合して、「オープン」ツールチェインを構築できます。ただし、他の組織では、より統合されたセキュリティを重視した製品スイートの方が、より総合的なエクスペリエンスを提供できる場合があります。

  • ガバナンス: 継続的な改善は、DevSecOps の中心であり、実行者がプロセスとツールを改良する機会を見いだせるような測定の文化を構築することが必要です。

DevSecOps パイプライン

DevSecOps 文化は、ソフトウェア作成の基本的な部分としてセキュリティを確立しようとしますが、それは DevSecOps プラクティスの導入を成功させるために必要なことの一部に過ぎません。次のステップは、DevOps パイプライン の各ステージにセキュリティを統合することです。

SDLC 全体でセキュリティに特化したツールとプロセスを使用することで、DevSecOps パイプラインは、実行者がより安全な製品を設計し、製品ライフ サイクルの早期にセキュリティ問題を発見するのに役立ちます。

DevOps パイプラインの無限性

一般的な DevSecOps パイプライン ステージ

DevSecOps は DevOps 上に構築され、DevSecOps パイプラインは DevOps パイプライン上に構築されます。DevOps が各ステップに品質と速度を統合したように、優れた DevSecOps パイプラインは、セキュリティ問題が発生する可能性が高い SDLC の重要なポイントを予測するように設計されています。

これは、以下の一般的な DevSecOps パイプライン ステージに分類されます。

  • 計画: DevSecOps プラクティスでは、セキュリティは SDLC パイプラインの計画ステージから始まります。これには、潜在的なセキュリティ上の脅威を分析し、脅威モデリングを使用してその脅威に対抗する方法を決定することが含まれます。また、製品にセキュリティを積極的に設計して、主要なデータ衛生やその他のセキュリティに関する決定を前もって行い、最初からセキュリティが作業に組み込まれるようにすることも含まれます。

  • コード: DevSecOps パイプラインのコーディング ステージでは、実行者がセキュリティとコンプライアンスの問題に積極的に対応できるようなポリシーを使用して、防御的なプログラミングの文化を構築することが重要です。これは、NULL などのコードの特に危険な側面の扱い方に関するルールの指定と同じくらい単純な場合や、入力検証などの領域に関する広範なガイドラインを含む場合もあります。

  • ビルド: ビルド ステージでは、一般的な DevSecOps パイプラインには自動セキュリティ チェックが含まれており、ソース コードの脆弱性がメイン ブランチに到達する前に検出されます。これには、プレコミット フックを使用して静的アプリケーション セキュリティ テスト (SAST) ツールを実行することが含まれます。このツールでは、コードに潜在的な問題があれば、テストに失敗した場合と同様にビルドが停止し、作業を進める前に、独自のソース コードの潜在的な脆弱性を修正する時間を確保します。また、コードベース内のオープン ソース コンポーネントを追跡し、依存関係における脆弱性を検出するためのソフトウェア構成分析 (SCA) ツールも含める必要があります。

  • テスト: DevSecOps パイプラインのテスト ステージは、潜在的なセキュリティの脆弱性や問題を発見するために、実行者がテスト戦略と自動テスト スイートを開発する重要なポイントです。これには通常、アプリケーションが予期しない入力や不正な形式の入力を処理する方法などのセキュリティ問題を探すために、基本レベルでユニット テストを使用することが含まれます。また、実行時にアプリケーションの脆弱性を発見するために、動的アプリケーション セキュリティ テストを含めることもできます。このようにして、テスト フェーズは機能性と同じくらいセキュリティも強化されます。このステージでは、動的アプリケーション セキュリティ テスト (DAST) を DevSecOps パイプラインに統合することをお勧めします。

  • リリース: リリース ステージでは、DevSecOps パイプラインには、多くの場合、追加の自動セキュリティ テストと脆弱性スキャンが含まれ、早期のステージでは明らかにならなかった問題を検出します。組織によっては、最小特権の原則を導入し、各個人やツールが必要なものだけにアクセスできるようにする場合もあります。

  • デプロイ: デプロイ ステージでは、DevSecOps 実行者は、それまでの各段階でセキュリティ チェックに合格したコードのみが本番環境に投入されるようにします。これには、アプリケーション コードと、本番環境でソフトウエアを実行するために使用される基になるインフラストラクチャに自動テストを適用して、ランタイムのセキュリティ上の懸念を検出することが含まれます。

  • 運用と監視: DevSecOps パイプラインの運用と監視 のステージでは、組織は多くの場合、アプリケーションレベルとインフラストラクチャのメトリクスを使用して、セキュリティ侵害を示す可能性のある異常なアクティビティを特定します。インシデントが発生した場合、ログ収集やその他のイントツルメンテーションを使用して問題を特定し、その影響を理解できます。

DevSecOps 自動化の原則

自動化が正しく実装されると、人々がテクノロジーを使用して反復的な手動タスクを実行し、より高品質のソフトウェアをより迅速に提供できるようになり、SDLC が加速します。DevSecOps は、SDLC の全てのステージにわたってセキュリティ テストを統合することで自動化をさらに進め、速度と一貫性を向上させ、潜在的なリスクを軽減します。

DevSecOps がセキュリティを全員の責任にするのであれば、DevSecOps の自動化は、セキュリティの専門家でなくても、コードと構成の安全性を確保するために必要なツールを全員に提供できるように努めます。

独自の DevSecOps パイプラインのどこに自動化を適用するかを検討する場合は、以下の原則を考慮します。

  • 自動化を戦略的にする: DevOps プラクティスでは、SDLC 全体の速度と品質を促進するために自動化を使用することがよくあります。しかし、DevOps プラクティスにおいて戦略的であることが重要であるのと同様に、DevSecOps 環境で自動化を適用する方法とタイミングについて戦略的であることも、それ以上ではないにしても同様に重要です。

  • 創造性に集中できるようにする: 可能な限り反復的なタスクを自動化します。そうすることで、人々はより一貫した大規模なチェックを行いながら、時間と精神的エネルギーをより複雑な作業に費やすことができます。

  • コード レビューを体系化する: 静的アプリケーション セキュリティ テストなどのツール を使用して、コード レビューの要素を自動化します。ただし、人によるコード レビューも依然として重要であり、コード レビューのチェックリストがテクノロジー スタックに固有のセキュリティ問題をカバーしていることを確認することが重要です。フィードバック サイクルを構築し、新しい情報が入手可能になるたびに、それをチェックリストに組み込みます。たとえば、インシデントが発生したときに、コード レビューや自動テストを使用して、どのようにすればもっと早く問題を発見できたのかを検討します。

GitHub Advanced Security が DevSecOps 組織に最先端のセキュリティ ツールを提供する方法を見る >


反映ツール


DevSecOps ツールチェイン

DevSecOps の導入は、セキュリティを SDLC に関わる全員の中心的な関心事にするという文化の転換から始まります。これを達成するために、組織は多くの場合、新しいプロセスを導入し、自動セキュリティ テストとセキュリティ ツールを SDLC に適用する DevSecOps ツールチェインを構築します。

DevSecOps ツールは、多くの場合、CI/CD、自動テスト、構成管理、監視などの一般的な DevOps ツールに基づいて構築されます。目標は、セキュリティを重視したツールを製品ライフ サイクルの各ステージに統合することです。

DevSecOps ツールチェインの主要コンポーネント

  • コミットとマージの自動セキュリティ テスト: DevSecOps プラクティスの基本的な目標は、プレコミット トリガーとマージ トリガーを使用して自動スキャンをトリガーすることで、影響を受ける前にコード内の問題を検出することです。組織が実装する可能性のあるスキャンには、以下のようなものがあります。

  • コード スキャン: 静的アプリケーション セキュリティ テストとも呼ばれ、保存されているコードを評価して (つまり、コードを実行せずに)、脆弱性につながる可能性のあるコードを検出します。

  • 脆弱性スキャン: 動的アプリケーション スキャン ツールは、アプリケーションを構築してサンドボックス環境にデプロイし、既知のセキュリティ上の脅威にどのように対応するかを観察します。

  • シークレット スキャン: 最も厳格なポリシーを適用していても、シークレットがコミットに混入することがあります。シークレット スキャン ツールは、コミットが行われる前にシークレットを検出するために使用されます。また、SCA ツールと組み合わせて、特定のコードベース内のオープン ソースの依存関係における脆弱性を検出することもできます。

GitHub を使用して、DevSecOps 組織が SDLC の全てのステージで詳細な自動セキュリティ テストを適用する方法を見る >

  • 構成管理: DevSecOps では、システム構成から不確実性を取り除くことが最善であるという一般的なルールがあり、これは多くの場合、インフラストラクチャをコードとして導入することで実現できます。Docker、Terraform、Ansible などのツールは YAML や同様の構成ファイルを使用し、自動的に問題をスキャンし、バージョン管理にコミットし、サービスの複数のインスタンスに自動的にロールアウトできます。

DevSecOps 組織の自動化によるアプリケーションとシステムの構成の管理を GitHub が支援する方法を見る >

  • コンテナー オーケストレーション: 一部の環境では、組織は複雑なクラウドネイティブ アプリケーションをより適切にサポートするために、マイクロサービス アーキテクチャを導入する場合があります。この場合、複数のコンテナ を管理し、必要に応じて安全にスケーリングする必要があり、コンテナー オーケストレーション ツールが必要になります。構成管理ツールと同様に、コンテナー オーケストレーション ツールは、多くの場合、YAML 構成ファイルを使用してコンテナ間のやり取りを指示します。

  • ランタイム検証: ランタイム アプリケーション自己保護ツールとも呼ばれるこれらのツールは、アプリケーションの実行中に、脆弱性を強調するレポートを作成して、アプリケーションに対する脅威を積極的に監視、指示します。

  • 継続的監視とレポート: DevSecOps ツールの最もシンプルでありながら非常に効果的な側面の 1 つは測定です。これにはアプリケーションとインフラストラクチャ レベルでの全てのログ収集が含まれます。最適なツールは、何か問題が発生したときにリアルタイムのインテリジェンスを提供し、問題を早期に発見できるようなレポート システムを備えています。たとえば、予期しないポートからの送信データはセキュリティ侵害を示す可能性がありますが、監視とレポートが行われないと検出されない可能性があります。

これまでの要点

セキュリティは、現代のソフトウェア開発組織における決定的な問題です。これを誤ると、組織だけでなく関係する個人にも広範囲に影響を及ぼします。DevSecOps は、最初のステップから安全にソフトウェアを作成するためのフレームワークを提供します。そして、DevOps のよく理解された文化とプロセスの上に構築することは、ほとんどの企業にとって、DevSecOps へのシフト レフトが自然な進化であることを意味します。

GitHub で DevSecOps プラクティスを構築する

GitHub は、集中的な開発者体験と強力なフルマネージド型の開発、自動化、テスト用インフラストラクチャを一体化させ、アイディアから計画、構築、本番稼動まで一貫して支援する統合プラットフォームです。

料金プランを比較する >



私たちの哲学は、将来の企業のために自動化と優れた DevOps をビルドすることです。

Adobe、シニア SCM エンジニア、Todd O'Connor 氏



計画から構築へ 開発の速度を上げる
プロジェクトと完全に統合した優れたプロジェクト ボードとテーブルを使用して、コード ベースのすぐ隣でロードマップ計画を作成し、チーム メンバーにタスクをすばやく割り当てましょう。

GitHub Issues について知る >
コミットまでの時間を短縮しましょう。開発者の環境管理やコンテキストスイッチングをなくし。クラウドの安全なマネージド スペースにより、IT 調達とメンテナンスを簡素化しましょう。

Codespaces について知る >


全てを自動化 コード作成時のセキュリティを確保
GitHub Actions で全ての開発者ワークフローを自動化しましょう。GitHub のフルマネージド型の強力な開発、テスト、自動化インフラストラクチャにより、信頼性と安全性を高めることができます。

GitHub Actions について詳しく知る >
ソフトウェア開発ライフサイクル全体を通じて、コード、依存関係、トークン、極秘データのセキュリティを確保し、脆弱性を自動で解決します。


GitHub でどのようにセキュリティを確保できるかを知る >

Tags

GitHub をビジネスに役立てる方法をお探しですか?

お客様のニーズをお聞かせください

octocaptcha spinner