DevOpsは、アプリケーションを開発して公開し、サポートからのフィードバックを反映していく方法として主流になりつつあります。しかし、DevOpsを成功に導くには、組織面での複雑さやマシンデータの収集といった課題を克服する必要があります。
DevSecOpsとは、開発(Development)、セキュリティ(Security)、運用(Operations)の手法を組み合わせた広範な技術的フレームワークです。DevSecOpsの読み方は「デブセックオプス」です。DevOpsフレームワークから派生したもので、多くの組織において、従来後付けで扱われてきたセキュリティという重要な問題を開発や運用の段階から考慮することを目指しています。DevSecOpsの最終的な目標は、セキュリティをアジャイルビジネスプロセスの必須要素にすることです。
これまで、セキュリティは主に独立した専門家チームが担い、開発サイクルの最終段階でアプリケーションの検証やストレステストを行うのが一般的でした。ソフトウェアが完成(またはほぼ完成)した後でセキュリティが検討され、そのタイミングがアプリケーションのリリース後、開発者にバグが報告されたときである場合も少なくありませんでした。
しかし今日では、そのアプローチは通用しません。なぜなら、セキュリティチームが新しいソースコードを分析してテストを終えるまでに、そのコードが別のコードに置き換えられることもあるためです。そこで登場したのがDevSecOpsの考え方です。DevSecOpsでは、開発者や運用担当者を含め、開発サイクルに関わる全員が共同で、アプリケーションとその実行環境のセキュリティに対する責任を担います。つまり、アプリケーション開発の初期時点から、アプリケーション自体のセキュリティコントロールはもちろん、その実行環境のセキュリティも考慮するということです。
この記事では、DevSecOpsの概要やメリット、DevSecOpsとDevOpsの違い、DevSecOpsチームの構築方法、「セキュリティは全員の責任」という考え方を組織全体で共有するためのDevSecOpsの実践方法(ベストプラクティス)について説明します。
DevSecOpsが重要な理由は、それがアプリケーションのセキュリティや開発環境に対する意識を高めるだけでなく、アプリケーションと開発環境のセキュリティを実際に向上させるメリットがあるためです。DevSecOpsを実践すれば、開発者とセキュリティ担当者間のコミュニケーションを活性化し、開発プロセスにセキュリティを直接組み込むことができます。そして、開発プロセスのすべての段階ですべてのコードをセキュアに保つというシンプルな目標を全員で共有できます。
DevSecOpsは、コードのリリース頻度が上がっている近年、特に注目を集めています。クラウドツールやアジャイル開発手法の登場によって開発サイクルはますます短くなり、セキュリティ対策は従来のツールや手法ではほとんど追い付かなくなっています。
DevSecOpsのベストプラクティスを取り入れれば、より安全なアプリケーションをより速いペースで開発できます。開発サイクルの初期段階で脆弱性を発見できれば、負担の大きい手戻りを減らし、コードの全体的な品質を向上できます。当初は、開発段階からセキュリティを考慮することはイノベーションの邪魔になると開発者が不満に思うかもしれませんが、しだいにDevSecOpsアプローチの価値を実感するようになるでしょう。特に、セキュリティニーズに対応するために自動化ツールを取り入れれば、開発者の負担を最小限に抑えることができます。
DevSecOpsの考え方が初めて登場したのは2012年1月、ガートナー社のブログでした(現在は削除されています)。ブログを投稿したNeil MacDonald氏は、DevOpsの構想は「IT環境でいまだ孤立している情報セキュリティを組み込まなければ不完全」だと述べています。MacDonald氏は、成功したシステム攻撃の75%が既知の脆弱性を狙ったもので、必要なパッチや最新の設定基準を適用する時間が開発者にあればこれらは防げたはずだと指摘しています。そして、当時「DevOpsSec」と呼んでいたこのビジョンを実現するには、情報セキュリティを多角的に見直す必要があると述べ、適応力とプログラム性を高めることや、情報セキュリティへの配慮をDevOpsSecチームの必須事項にすることを提言しています。
後に、「DevOpsSec」の「Sec」が中央に移動しました。そこには、開発と運用をセキュリティが橋渡しするという意味が込められています。少し厄介なのは、最近になって、開発プロセスでは何よりもまずセキュリティを考慮すべきという考えから「SecDevOps」という呼び名が登場していることです。
いずれにしても今日では、「DevSecOps」の呼び名が業界で浸透しています。IDC社とMicro Focus社が実施した最新調査によると、新型コロナウイルスの世界的な感染拡大によってDevOpsやDevSecOpsの導入が加速し、新しいサービスの需要とアプリケーションの使用頻度が増大しています。実際、約4分の3の企業がDevSecOpsの取り組みを加速したと回答しています。しかし、企業はサイバーセキュリティに力を注いでいるものの、ソフトウェアの開発、運用、セキュリティの統合が完了したと回答した割合は45%にとどまり、半数以上が「取り組みが遅れている」と回答しました。このことから、DevSecOpsの考え方が登場してから約10年たった今日でも、導入は期待されるほど進んでいないと言えます。
自分の組織のサイバーセキュリティの計画がセキュリティ脅威に対応しているかは「セキュリティエッセンシャルガイド」をご覧ください。
DevSecOpsを実践すれば、アプリケーションのセキュリティが向上するだけでなく、セキュリティリスクやセキュリティ上の脆弱性を前倒しで考慮に入れることになります。それにより、開発サイクルの早い段階でこれらに対処し、後で大きな問題に発展するのを防ぐことができるメリットがあります。DevSecOpsでは自動セキュリティツールの活用が欠かせないため、最終的には、DevOpsの継続的な開発プロセスにセキュリティを統合して、いわば「継続的セキュリティ」を実現できるメリットもあります。セキュリティ脅威が巧妙化し続ける中でも、DevSecOpsなら、ソフトウェア開発ライフサイクルにおけるセキュリティテストの役割を明確化し、重要性を高めることで、リスク対策を強化できます。
また、DevSecOpsは、包括的なセキュリティ指向のプラクティスを確立するために重要な、よりセキュアなアプリケーションの開発、ソフトウェア開発環境のセキュリティ向上、セキュアな本番環境の構築も実現します。さらに、開発環境でQE、DevOps、SRE、セキュリティの各役割を担うメンバー間の理解を深め、チーム内で作業のプロセスと目標に対する認識を一致させて、フローの分断を回避できます。

DevOpsとDevSecOpsの基本的な違いの1つは、統合のレベルです。多くのDevOps手法にはセキュリティがプロセスの一部として含まれますが、DevSecOpsではセキュリティがプロセス全体で重視され、すべてのステップに組み込まれています。また、アプリケーション開発の迅速化が目標の1つに挙げられる点はDevOpsと同じですが、DevSecOpsでは、DevOpsのペースを維持しつつ、アプリケーションに一貫したセキュリティテストを実行するなど、より強力なセキュリティプロセスを実践することが求められます。
DevOpsとDevSecOpsには共通点がたくさんあります。たとえば、開発者と運用担当者間のコミュニケーションを緊密に保つこと、自動化ツールを活用してデリバリーのスピードを上げること、古いウォーターフォール手法から脱却して継続的な開発サイクルを確立することなどです。しかし、DevSecOpsでは、これらすべてのプラクティスにセキュリティの要素が含まれます。DevSecOps環境では、開発チームやIT運用チーム内にセキュリティ担当者を配置し、セキュリティテストやコード分析を自動化するツールを採用して、CI (継続的インテグレーション)/CD (継続的デリバリー)パイプラインプロセスでコードのリリース前に常にセキュリティチェックを実行するルーチンを組み込みます。
Security Compass社の最新レポートによると、DevSecOpsを導入するとDevOps開発サイクルが遅くなるという問題に直面しがちなものの、DevSecOpsの経験が豊富な組織はセキュリティとコンプライアンスに関する定型作業を自動化することによってサイクルを大幅に短縮していることがわかりました。
アジャイルプロセスは、開発プロジェクトの複雑さを軽減することで管理を容易にし、デリバリーサイクルを短縮することを目的としています。そのために、小規模なチーム編成でメンバーが緊密に連携し、「スプリント」と呼ばれる単位でプロセスを区切って、新しいコードを段階的にデプロイします。
DevSecOpsでも、継続的なデプロイおよびテストプロセスを確立して、ビルド/テスト/デプロイのワークフローサイクルを回し、デリバリーの頻度を上げながらコードの全体的な品質を確保する点はアジャイルと同じです。
この2つの概念は相互排他的なものではありません。アジャイルプロセスを実践する組織がDevSecOpsの手法を取り入れたり、2つのアプローチを統合したある種のハイブリッドプロセスを確立したりすることもよくあります。
2つの主な違いは、アジャイル開発手法(スクラムやエクストリームプログラミングなど)が開発チームの構成やプログラミング方法に重点を置いているのに対して、DevOpsはコードのコンパイルやリリースの方法に重点を置いている点です。アジャイル手法では、結果としてコード変更が速いペースで繰り返されるため、自動化やDevOpsの実践が欠かせません。これに対してDevOpsは、アジャイル開発手法を取り入れなくても実現可能です。
アジャイルプロセスとDevSecOpsのもう1つの違いは、もちろん、アジャイル手法ではセキュリティが必ずしも優先事項でないのに対して、DevSecOpsでは開発プロセスの初期段階からセキュリティを統合することが重視される点です。アジャイルプロセスを実践している組織のうち、DevSecOpsのプラクティスや戦略を取り入れていない組織の多くは、セキュリティを後回しにしています。しかし、2つの概念は相性が良く、多くの点で、組み合わせて導入することが推奨されます。
新しい手法を取り入れるときは常でそうであるように、DevSecOpsを導入して定着させるまでにはさまざまな課題が生じます。これらの課題の解決には、自動化とスクリプト環境が鍵を握ります。
代表的な課題を以下に挙げます。
- 現場のメンバーが組織構造の変更に抵抗感を持つ。メンバーは現行の作業体制に満足していて、うまく回っているチームにセキュリティ担当者を入れることに抵抗感を持つことがあります。たいていは、作業体制を変更すると開発スピードや品質がむしろ下がると感じることが原因です。
- セキュリティの重要性が十分に理解されていない。従来、開発者の多くはセキュリティ脅威やセキュリティプラクティスについてあまり深く理解していませんでした。逆に、セキュリティ担当者は開発プロセスの理解に欠けることがよくあります。そもそも、専門性の高いセキュリティとペースの速い今日の開発を統合することは容易ではありません。
- 従来のセキュリティプラクティスは柔軟性が低い。従来のウォーターフォールモデルは冗長でスピード感がなく、俊敏性を求められる今日の開発にはあまり向いていません。DevSecOps環境でこの2つを組み合わせる場合はセキュリティ自動化ツールが不可欠です。
- 新しいツールの導入と学習が必要である。DevSecOpsを実践するには、開発チームのメンバーに、セキュリティ担当者との共同作業や新しい開発プロセスに慣れてもらう必要があります。同様に、セキュリティ担当者には、開発ツールについて十分に学んでもらう必要があります。
DevSecOpsは戦略であり、ツールキットであり、トレーニングであり、文化的シフトでもあります。そのため、DevSecOpsの実践方法に関する教科書のようなものはありませんが、一般的には以下のステップで行います。
- 継続的デリバリーを取り入れる。DevOpsアプローチで求められる継続的デリバリーや開発チームと運用チームの統合をまだ行っていない場合は、そこから始めます。デリバリープロセスを刷新して、短いリリースサイクルを何度も繰り返す方法を主体にすれば、DevSecOpsに移行するために必要な運用体制が整います。
- セキュリティプロセスをDevOpsチームのワークフローと整合させて統合する。開発者をセキュリティチームに加えるのではなく、セキュリティ担当者をDevOpsチームに加えてセキュリティプロセスを統合します。目標は、自動セキュリティテストなどのセキュリティツールを開発プロセスに直接組み込むことです。
- DevSecOps向けの自動化ツールを積極的に導入する。開発パイプラインにセキュリティ運用のルーチンとチェックポイントを新たに追加すれば、必然的に開発スピードが落ち、開発チームの不満を招く可能性があります。スピードと生産性を保つには、できるだけ多くの作業を自動化します。
- 継続的なセキュリティ監視のためのツールを導入する。コードを本番環境にデプロイしたら、次は運用です。リリースしたアプリケーションを能動的に監視してセキュリティを継続的に確保する必要があります。脆弱性が発見された場合に備えて、適切な修復プランを用意しておくことも重要です。
- チームメンバーに対するセキュリティ教育を徹底する。多くの場合、開発チームはセキュリティプロトコルについてあまり詳しくありません。実際、開発チームは防御の最前線に立つわけではありませんが、状況を詳細に理解できるようにすることは重要です。DevSecOpsは、全員がセキュリティの原則と要件を理解したときに最も威力を発揮します。
- セキュリティを文化の一部として考える。セキュリティは単なるツールと技法の寄せ集めではなく、意識の問題です。模範を示し、何が期待されているかをわかりやすく伝え、DevSecOpsのプラクティスの導入と実践に対する報酬を用意しましょう。
DevSecOps体制は、開発チーム、運用チーム、セキュリティチームをただ一緒にしただけでは構築できません。実際、DevSecOpsの体制には、3つのチームが別々に作業する比較的孤立した形態から、作業を共有してチームメンバー間で自由に分担する完全に統合した形態まで、さまざまなものがあります。一般的には、できるだけ緊密なコラボレーションと高い透明性を維持できる体制作りを目指します。
DevSecOpsを成功させるための、開発チーム、運用チーム、セキュリティチームの統合方法に関するヒントをいくつかご紹介します。
- 新しいメンバーを追加する前に既存のメンバーを評価する。既存のメンバーは現行の体制についてよく理解している可能性が高いので、その知識を無駄にしてはいけません。DevOpsチームを構築するときは新しい人材と新しいスキルを注入する必要がありますが、効果的なチームを作るには、ベテランと新顔をバランス良く配置することが大切です。
- 必要なスキルを見積もる。開発チームは優秀だが社内にセキュリティの専門家がいない、運用チームにベテランが少ないなど、現在あるスキルと欠けているスキルを評価すれば、どのような人材を補充すべきか簡単に判断できます。評価の際には、チーム内のリーダーシップが十分であるかどうかもよく検討する必要があります。一般的に、優秀な開発者は、新しいスキルを教えるのが上手な信頼できるリーダーの下で働くことを好みます。
- 新しい挑戦や失敗を許容する。DevOpsやそこから派生したプラクティスを実践するには、時間をかけて良くしていくことを前提とした、協力的で失敗を恐れずに仕事に取り組める体制を築く必要があります。体制とワークフローを改善するためのさまざまなアイデアを試し、その結果を評価できる仕組みを提供するようにします。そして、成功した取り組みだけでなく、結果は失敗でも果敢に挑戦した取り組みに対しても十分な報酬を用意しましょう。
DevSecOpsやDevOpsの成功へのヒントは「DevOps成功への道のり」をご覧ください。
長期的な成功を掴むチャンスを最大限に高めるには、DevSecOpsチームをサポートする文化の構築に注力し続けることが大切です。
- 協調を重視する。DevOpsやDevSecOpsの実践が失敗するのは、多くの場合、内輪もめが起きたり部門間のコミュニケーションが途絶えたりすることが原因です。そうならないためには、継続的な改善につながるオープンな姿勢や、協調、知識共有を評価の基準に加えます。
- チームに権限と自律性を与える。使用するプロセスやツールをチームに指示することを避けます。これらについてはチームに決定権を与え、自分たちで答えを見つけられるようにします。これにより、チームの結束が強まり、文化が向上します。
- 強力なリーダーシップでDevSecOpsをサポートする。従業員を動かすには、経営幹部がセキュリティに対する強力なコミットメントを示す必要があります。CEOからの明確な指示がなければ、セキュリティに本気で取り組む文化を構築することはまずできません。
- 教育に投資する。DevSecOpsチームのメンバーのスキル調整に取り組みます。開発者のためにセキュリティトレーニングを用意するとともに、セキュリティ担当者にはDevOpsの方法論を十分に学んでもらいます。最終目標は、セキュリティは共通のゴールであることを組織の全員に理解してもらうことです。

そのようなDevSecOps文化を構築するために必要な「セキュリティリーダーが2022年に学ぶべき4つのこと」をご覧ください。
DevSecOpsはこれまで、開発とセキュリティの両方に利益をもたらすアプローチとしての理解が進んでいませんでした。それでも徐々に、企業に必要な取り組みとして注目されつつあります。セキュリティ脅威はますます巧妙化し、攻撃によって受ける損害は拡大し続けています。Digital Guardian社の調査(英語)によると、2019年のデータ漏えいコストは1社あたり平均820万ドルで、漏えいしたデータ1件あたり242ドルでした。さらにヘルスケア企業の場合は、漏えいの検出までに約8カ月、解決までにそれ以上の時間がかかることがあり、データ1件あたりのコストは約2倍になります。このコスト増大の流れを食い止めるための対策を取ることは企業にとって大きな利益となり、その手段としてDevSecOpsは大きな効果を発揮するのです。
DevSecOpsは、ハッカーや悪質な攻撃に対する唯一の防御策というわけではありませんが、強力な第1の防御線であることは確かです。そのため、セキュリティに重点を置いてDevOpsのパイプラインを再構築すれば、攻撃されてから被害を抑えるのではなく、攻撃前から防御を固めることができます。これまでセキュリティを軽視または無視して大きな代償を払うことになった企業は数え切れません。DevSecOpsを実践すれば、そのリストに名を連ねることのないよう、一歩先を行くことができます。

DevOps 5つのプラクティス
DevOpsチームの明暗を分ける5つのプラクティスについてご紹介します。