Introduction
システムやアプリケーションを開発する際に、セキュリティに関する対策が後回しになってしまうケースも多いでしょう。従来のウォーターフォール型開発の場合、開発工程の最後の方でセキュリティ対策を検討することも多く、セキュリティ対策が不十分な状態でリリースすることもあり得ます。
しかし、近年はサイバー攻撃が高度化、多様化し、システム開発を行う際に高度なセキュリティ対策を行うことが求められています。そのため、従来の開発のやり方ではセキュリティ対策が不十分になり、サイバー攻撃の被害にあってしまう可能性もあるでしょう。
そこで、DevSecOpsという開発手法を導入することにより、開発初期からセキュリティ対策を検討でき、セキュリティ品質を向上させることが可能です。
この記事では、DevSecOpsの基本概要や実際の開発工程と運用工程について、導入するメリットや導入する際に必要なことなどを解説します。
目次
DevSecOpsとは?
DevSecOpsとは、ソフトウェア開発手法のひとつです。開発チームと運用チームが協力しあって開発や運用を行うDevOpsに、セキュリティの観点が追加されたものです。
ここでは、DevSecOpsの基本概要やDevOpsとの違い、DevSecOpsが注目されている理由について解説します。
開発から運用までのサイクル全体でセキュリティを確保する方策
DevSecOpsとは、DevOpsにセキュリティの観点が追加されたものです。開発と運用、セキュリティに関して情報を共有し、開発プロジェクトのなかでセキュリティ対策を前倒しして実施します。これにより、セキュリティの課題を早期発見し、対応コストを削減することが可能です。
デジタル庁の『政府情報システムにおけるセキュリティ・バイ・デザインガイドライン』によると、DevSecOpsは次のように定義されています。
DevSecOps
開発と運用がシームレスに連携する DevOps にセキュリティを組み込むことで、セキュリティを確保しつつ、開発スピードを損なわない開発手法のこと
開発から運用まで含めたシステムライフサイクル全体でセキュリティ確保する方策
DevOpsとの違い
DevOpsとは、開発チーム(Development)と運用チーム(Operations)が協力して、開発や運用を行うためのソフトウェア開発手法です。
従来のウォーターフォールモデルのシステム開発では、開発チーム主導で開発が行われた後、運用チームにシステムが引き渡されることが多いです。しかし、その場合、開発要件に運用の視点が入りづらいなどのデメリットがあります。そこで、DevOpsの考え方を導入することにより、開発から運用への引継ぎがスムーズになる、システムを安定稼働させやすいなどのメリットを得られます。
このDevOpsにセキュリティの考え方をプラスしたものが、DevSecOpsです。この考え方によって、開発、運用、セキュリティという3つの観点で連携を密に行い、セキュリティの課題を早期に解決できます。
▽あわせて読みたい▽
>>DevOpsとは?アジャイル開発との違い、導入するメリット・デメリットについて解説のページへ
DevSecOpsが注目されている理由
近年、新しいサイバー攻撃の手法が次々と登場しており、対抗するために、早期にセキュリティ対策を実現できる開発手法が必要とされています。いままでは、開発工程のなかでセキュリティ対策が後回しにされていましたが、DevSecOpsを採用することで、セキュリティの課題を早期発見できるようになります。
また、セキュリティ対策を前倒しで実施することにより、対応コストを削減することも可能です。
DevSecOpsの考え方により、脆弱性などのセキュリティリスクを低減しながら開発速度を維持し、コストを抑えられます。多様化や高度化が進むセキュリティ攻撃に対応した開発を行うために、DevSecOpsが注目されているのです。
DevSecOpsでの開発工程
DevSecOpsは、4つの開発工程と4つの運用工程で成り立っています。ここでは、DevSecOpsの具体的な開発工程と、それぞれの工程で行われるセキュリティ対策に関する作業についてご説明します。
開発工程(Dev)
開発工程(Dev)では、次のような作業が行われます。
【開発工程(Dev)】
工程名 | 実施する内容 | セキュリティ対策に関する作業 |
Plan | プロジェクト全体の計画を行う。タスク管理や開発要件の定義を実施する。 | セキュリティポリシーを策定し、コンプライアンスをチェックする。 基盤を選択する。 |
Code | 開発要件をもとにソースコードを実装する。 | 静的アプリケーション・セキュリティ・テスト(SAST)を行う。 |
Build | ソースコードからアプリケーションを作成する。 | ソフトウェア・コンポジション解析(SCA)を行う。 |
Test | 開発したシステムのテストを行い、不具合がないことを確認する。 | 動的アプリケーション・セキュリティ・テスト(DAST)、インタラクティブ・アプリケーション・セキュリティ・テスト(IAST)、ペネトレーションテスト、業務テストを行う。 |
開発工程において、上記の表にあるセキュリティ対策に関する作業を組み込みます。テスト工程では、とくにツール化することで、開発作業を効率よく進めることが可能です。
運用工程(Ops)
運用工程(Ops)では、次のような作業が行われます。
【運用工程(Ops)】
工程名 | 実施する内容 | セキュリティ対策に関する作業 |
Release | 開発したシステムを本番環境に適用するための計画を行う。環境構築の手順作成などを行う。 | – |
Deploy | 開発したシステムを本番環境に配置し、環境を整える。 | – |
Operate | 本番環境の監視、保守作業、トラブル対応などの運用を行う。 | バックアップ、リカバリー、トラブル対応を行う。 |
Monitor | 運用時に得られたログやユーザーからの情報、意見などを分析して次のプロジェクトにつなげる。 | システム監視、アプリケーション・ネットワーク監視、異常監視、容量監視、性能監視、アクセス監視、セキュリティ障害の通知などを行う。 |
運用工程においては、脆弱性などが検出された場合に、迅速な対応ができるような体制を整えておく必要があります。
DevSecOpsを導入するメリット
DevSecOpsを導入することで得られるメリットについて、ご説明します。
脆弱性などのセキュリティリスクを低減できる
DevSecOpsの考え方を導入することで、セキュリティ対策を開発工程に組み込むことが可能です。
従来の考え方だと、開発作業が優先されて、セキュリティ対策は開発が終わるころに検討されるなどのケースが多かったかもしれません。しかし、開発の終盤はスケジュールがひっ迫し、セキュリティ対策が見送られたり、対応が最小限になったりします。セキュリティ対策が十分に検討されないままリリースされると、セキュリティリスクをはらんだままになってしまうでしょう。
しかし、DevSecOpsの導入により、セキュリティ対策に関する検討が開発工程に組み込まれるため、脆弱性などのセキュリティリスクを低減することが可能です。
▽あわせて読みたい▽
>>脆弱性とは?その種類や放置する危険性、正しいセキュリティ対策について解説のページへ
開発速度が向上する
開発中に脆弱性が発見された場合、開発作業を止めて修正やテストを行う必要があります。そして、発見される工程が後ろになればなるほど、手戻りが大きくなってしまいます。
しかし、DevSecOpsを導入することで、開発当初からセキュリティに関しても検討が進められるため、手戻りが発生しにくくなります。手戻りが減れば、開発速度をはやめることが可能です。
品質の向上が期待できる
開発工程の終盤でセキュリティに関する課題が発見されても、納期まで時間がないため、十分な品質を保つことがむずかしいでしょう。しかし、DevSecOpsの導入により、セキュリティの課題を早期に解決でき、余裕をもって実装できるため、品質の向上が期待できます。
開発工程や運用工程全体が、セキュリティ対策を優先的に対応する流れになっているため、セキュリティレベルの高いシステムを開発できるでしょう。
規制コンプライアンスを確保できる
上記でご説明したとおり、DevSecOpsでは、開発工程の最初のPlan工程でセキュリティポリシーを策定し、コンプライアンスのチェックを行います。そのため、コンプライアンスに関しても、十分に検討したうえで開発を進められます。
DevSecOpsの導入にあたって必要なこと
DevSecOpsを導入する際には、やるべきことが数多くあります。ここでは、導入時に必要な準備についてご説明します。
DevSecOpsに適した組織体制、ルールの構築
現状の組織体制が開発、運用、セキュリティの分野で分断されている場合、そのままの状態でDevSecOpsを導入することはむずかしいでしょう。それぞれのチームが同じゴールを目指して、協力しやすい組織体制やルールを整える必要があります。
また、セキュリティに関する知識や技術、経験が豊富なセキュリティ人材の確保も必要です。さらに、開発チームと運用チームも、セキュリティに関する知識や経験を養うために教育していく必要があるでしょう。
開発プロセスの見直し
従来の開発工程と運用工程、セキュリティに関する検討や実装などが、別々に行われる開発プロセスを見直す必要があります。
具体的には、開発初期の段階でセキュリティに関するリスク分析を行う、セキュリティ関連のテストを自動化できるツールを導入するなどです。また、運用工程で得られたセキュリティに関するフィードバックを、次の開発工程で活かす必要もあります。
このように、DevSecOpsに対応した開発プロセスに、見直す必要があるでしょう。
ソフトウェアやツールの導入
DevSecOpsに対応したソフトウェアやツールを導入して、開発作業を効率よく行うことも、CI/CDを実現するために重要です。
CIは継続的インテグレーション、CDは継続的デリバリー/デプロイメントを指しています。CIとは、コードの変更が生じた際に、共有のソースコードリポジトリに自動的に組み込む手法のことです。CDとは、コード変更を統合、テスト、デリバリーするプロセスを指しています。どちらも、コードの変更を本番環境にスムーズにリリースするために、必要な要素です。
以下の表で、DevSecOpsに対応したソフトウェアやツールをご紹介します。
【DevSecOpsに対応したソフトウェアやツール】
使われる主な工程 | 内容 | 対応するツール | |
静的アプリケーション・セキュリティ・テスト(SAST) | 開発工程 | ソースコードをスキャンしてエラーや欠陥を検出する。 |
GitLab SAST |
ソフトウェア・コンポジション解析(SCA) | 開発工程~運用工程 | ソースコードをスキャンして既知の脆弱性を検出する。 |
GitLab Dependency Scanning Black Duck Gemnasium |
動的アプリケーション・セキュリティ・テスト(DAST) | テスト工程 | 動作中のアプリケーションの脆弱性を検出する。 |
GitLab |
インタラクティブアプリケーション・セキュリティ・テスト(IAST) | テスト工程 | テスト中に内部の処理を解析して脆弱性を検出する。 | Contrast ASSESS |
高度なセキュリティ対策を実現できる人材
高度化、多様化したサイバー攻撃に対応できるシステムを開発するためには、高度なセキュリティ対策を実現できる人材が必要です。
具体的には、開発工程に初期から参画してセキュリティ対策を検討できる、最新のサイバー攻撃に関する知識や技術をもっている人材です。また、運用工程で得たセキュリティに関するフィードバックを次の開発に活かせる、運用工程でセキュリティに関する運用がしやすい設計ができる必要もあるでしょう。
そのためには、セキュリティの知識や技術だけではなく、開発技術や運用の経験なども必要になります。
DevSecOpsの考え方を活用して、高度なセキュリティ対策を実現できる人材がいなければ、開発をスムーズに進めることはむずかしいでしょう。
DevSecOpsの導入における課題
DevSecOpsの考え方に沿った開発や運用は、従来の進め方と大きく異なります。そのため、その変化に対応できる組織や人材が必要です。
DevSecOpsをスムーズに導入するためには、開発プロセスの大きな変更に対応できるように、準備期間が必要になるでしょう。いままでと開発手法や開発環境がまったく異なるため、開発メンバーの理解を得る必要もあります。ときには、プロセスを大きく変更することに抵抗するメンバーも出てくるかもしれません。
DevSecOpsを導入する際に生じる課題を整理し、一つひとつ解決していく必要があります。
まとめ
この記事では、DevSecOpsの基本概要や実際の開発工程と運用工程について、導入するメリットや導入する際に必要なことなどを解説しました。
セキュリティ対策に重点を置いた開発手法であるDevSecOpsを導入することで、セキュリティに関する品質が向上するなどのメリットを得られるでしょう。一方で、セキュリティ人材の確保や組織体制の見直しなど、導入するために必要なことも多いです。十分に検討を重ねて準備を行わなければ、DevSecOpsに対応した開発プロセスに、スムーズに移行することはむずかしいでしょう。DevSecOpsの導入でお困りのことがございましたらご相談ください。