In this article
DevOpsからDevSecOpsへ!
DevOpsは過大評価されているという声もあります。しかし、アプリケーションの更新を毎月、あるいは四半期ごとにしかリリースできない世界を想像してみてください。
現代の消費者は、企業に対して品質を維持しながら要望にすばやく応えることを期待しています。同様に企業も、収益性を保ちつつ、顧客や市場の期待に迅速に適応する必要があります。こうした要件を背景にアジャイル開発手法が導入され、さらに開発サイクルの短縮と継続的デリバリーを支えるため、ソフトウェア開発チームとIT運用チームが緊密にコミュニケーションを取り、協力するDevOpsが生まれました。
DevOpsは、デプロイ頻度の向上や効率性の改善など、組織に数多くのメリットをもたらしました。しかし、セキュリティはどうでしょうか。DevOpsだけに注力する考え方から、開発ライフサイクルにセキュリティを組み込む方向へ転換する必要があります。こうしてDevOpsは自然な進化を遂げ、DevSecOpsが生まれました。
DevSecOpsがサイバーセキュリティの未来である理由
「DevOps」という概念は、2009年に生まれました。きっかけとなったのは、「10+ Deploys a Day: Dev and Ops Cooperation at Flickr」というプレゼンテーションです。一方、DevOpsの実践と文化は、Toyotaが開発したリーン生産方式から発展しました。トヨタ生産方式は、DevOpsにも通じるいくつかの重要な概念に基づいています。人の手による配慮を伴う自動化、継続的な改善、ジャストインタイム生産です。
自動車業界と同様に、こうした概念によって品質を維持しながら、コードを迅速かつ大規模にデプロイできるようになりました。しかし、従来のセキュリティプロセスでは、DevOpsを用いて開発された最新のアプリケーションを効率的に保護できません。その理由はいくつかあります。
変化のスピード:DevOpsの導入とクラウドベースのインフラによって、環境の変化の速度は大幅に上昇しました。従来のセキュリティ技術やプロセスは、オンプレミスのインフラとウォーターフォール型のソフトウェアリリース手法を前提に設計されています。
クラウドネイティブ開発:オンプレミスのネットワークセキュリティは、明確に定義された境界があることを前提としていました。一方、クラウドアーキテクチャでは攻撃対象領域が広がり、境界も曖昧になります。
コンテナ化とInfrastructure as Code:コンテナ化とInfrastructure as Code(IaC)の普及により、アプリケーションでは、実行に使用するコンテナやインフラの構成を指定するのが一般的になりました。これにより設定ミスのリスクが生じますが、従来のセキュリティプロセスではコンテナやIaCのセキュリティが考慮されていません。変化の速さ、最新アプリケーションのクラウドネイティブな性質、コンテナ化とIaCが組み合わさることで、リリースするコードのセキュリティ確保に対する開発者の責任はますます大きくなっています。その結果、セキュリティはDevOpsの中心的な役割を担うようになりました。
DevOpsからDevSecOpsへ、文化はどのように変化したのか?
DevOpsからDevSecOpsへの移行が、現代の開発ワークフローやツールにどのような影響を与えたのか、いくつかの側面から見ていきましょう。

アジャイルセキュリティ
ウォーターフォール型の手法では、設計やコーディングからテストまでソフトウェア開発を効率的に進められます。しかし、テスト中にセキュリティ上の問題を含む何らかの問題が見つかった場合、開発者は設計段階に戻らなければなりません。この手法ではプロジェクトが遅れる可能性があり、開発者はプロセスの初期に設計されたセキュリティ機能を使わざるを得ません。
アジャイルセキュリティでは、開発サイクルの早い段階からセキュリティやその他のソフトウェアテストを組み込み、コーディング中にセキュリティの脆弱性を発見できます。また、DevOpsチームは各スプリントにセキュリティと脅威モデリングを組み込めるため、セキュリティ対策の複雑さを軽減できます。
自動化
自動化は、継続的インテグレーション/継続的デリバリー(CI/CD)パイプラインと結び付けて語られることがよくあります。CI/CDとは、コードを単一のブランチに統合し、効率的な方法で本番環境にデプロイするプロセスです。こうしたプロセスは繰り返し行われるため、自動化の導入に適しています。CI/CDパイプラインを自動化すれば、手作業によるミスのリスクを減らし、開発サイクルの早い段階でテストを統合して問題を早期に検出できるほか、システムへのリスクがより小さい変更単位でリリースできます。一方で、CI/CDパイプラインやオープンソースソフトウェア、コンテナといった関連技術の普及により、管理が必要なソフトウェアの量は増大しています。
ソフトウェアコンポーネントを一つずつ手動でテスト、検証するのは現実的でも信頼できる方法でもありません。そのため、CI/CDパイプラインに何らかのセキュリティ自動化を組み込むことが重要です。コードをスキャンして開発者にフィードバックするSASTやSCAのツールを使えば、セキュリティ自動化を実現できます。こうした自動テストにより、セキュリティのフィードバックが障害となったり、パイプラインの各工程を遅らせたりするのを防ぎ、DevSecOpsに基づくアプリケーションデリバリーの基盤を築けます。
IaCとコンテナのセキュリティ
コンテナとIaCを使うと、開発者はインフラやアプリケーションの実行環境となるコンテナを構成できます。インフラチームに新しいサーバーの立ち上げや手動での設定を依頼することなく、デプロイ環境をより細かく制御できます。これにより、インフラの構成や保守における追跡困難なエラーを防ぎやすくなりますが、設定ミスや安全でないベースイメージなど、新たな攻撃経路が生まれる可能性もあります。
DevSecOpsの観点では、IaCとコンテナのセキュリティを確保するため、開発者のワークフロー内でコードをチェックし、ポリシーを適用する必要があります。具体的には、IaCの設定ミスを継続的にテストすること、コンテナイメージをスキャンすること、可能な限り安全性の高いイメージへ自動的にアップグレードすること、本番環境の設定ドリフトを監視し、開発者に直接フィードバックすることなどが含まれます。
アプリを無料で保護しましょう
Snykでコード、依存関係、コンテナ、Infrastructure as Codeを保護しましょう
コードとしてのポリシー
従来、開発者や管理者が遵守すべきポリシーは、手作業のワークフローやツールを使って作成、適用されていました。これには、リソースをどこに割り当てるべきか、どのユーザーがどのリソースにアクセスできるべきかといった知識が含まれます。コードとしてのポリシーでは、セキュリティプロセスをコードで記述することで、ポリシーをDevSecOpsに取り入れます。これにより、CI/CDパイプライン全体で修復手順の自動化、スキャン、アクセス制御などのセキュリティポリシーを適用できます。
開発者ファーストのツール
DevOpsと同様、DevSecOpsにも特定のツールが必須というわけではありません。DevSecOpsは、アプリケーションセキュリティに対する文化的なアプローチです。しかし、DevSecOpsを効果的に実践するにはツールが不可欠です。特に、開発者がアプリケーションセキュリティに責任を持てるよう支援するツールや、開発、セキュリティ、運用の各チームの連携を促進するツールが重要です。こうしたツールは、既存の開発パイプラインのできるだけ早い段階でセキュリティプロセスを導入する、セキュリティのシフトレフトを支援します。
セキュリティをシフトレフトすれば、コード内で見つかった問題をより簡単に、低コストで修正できます。安全なコーディング標準を定義、適用することで、脆弱性を早期に発見し、修正できます。さらに、本番環境でセキュリティチームが問題を見つけ、開発者に修正を依頼するために後戻りする際に生じる、開発者とセキュリティチーム間の摩擦を解消できます。

セキュリティで開発者を第一に考える重要性
Snykは、進化するDevSecOpsのセキュリティアプローチにおいて開発者の役割が高まっていることに着目し、開発者が役割を果たすために適切なツールを利用できるよう、クラウドネイティブアプリケーションセキュリティソリューションを開発しました。開発プロセスの最後、あるいは本番環境でセキュリティチームがコードをレビューする従来のアプローチでは、ボトルネックや非効率が生じ、DevOpsのモデルにそぐわない状況を招きます。アプリケーションそのものも変化し、オープンソースコンポーネントやコンテナ、IaCの設定を含むようになりました。Snykのツールを使えば、開発者は開発プロセスにセキュリティを組み込み、自動化と統合によってアプリケーションの各コンポーネントのセキュリティ態勢を強化できます。
DevSecOpsを導入した組織の実例については、導入の経緯を紹介するページをご覧ください。
よくある質問:
DevOpsとは?
DevOpsとは、ソフトウェア開発チームとIT運用チームの緊密なコミュニケーションと協力を実現する、現代的な開発文化および手法です。これにより、開発者は短い開発サイクル、継続的デリバリー、迅速なフィードバックループを取り入れたアジャイルな手法でソフトウェアをリリースできます。
DevSecOpsとは?
DevSecOpsは、DevOpsが自然に進化したものです。従来のセキュリティアプローチでは、DevOpsの手法で構築されたアプリケーションを効果的に保護できません。DevSecOpsでは、セキュリティチームをDevOpsのプロセスに組み込み、アプリケーションの開発中にセキュリティを組み込めるようにします。
DevOpsとDevSecOpsの違いは何ですか?
DevOpsは開発者の視点からアプリケーション開発プロセスの改善に重点を置きます。一方、DevSecOpsはDevOpsのプロセスにセキュリティを組み込みます。DevSecOpsは、現代のクラウドネイティブアプリケーションに適した、より新しく持続可能なソフトウェア開発アプローチです。
DevOpsと比べて、DevSecOpsにはどのようなメリットがありますか?
DevOpsの手法はリリースサイクルを短縮し、開発者が高まる顧客の要望に応えるのに役立ちますが、セキュリティが後回しになりがちです。DevSecOpsは、開発のワークフローやツールにセキュリティを組み込むことで、この問題に対処します。
DevOps、DevSecOps、SecDevOpsの違い
DevSecOpsでは、DevOpsのプロセスにセキュリティを組み込みますが、開発が引き続き優先されます。一方、SecDevOpsでは、初期の計画・設計段階からデプロイに至るまで、開発プロセスにセキュリティを組み込みます。SecDevOpsは、変化の速い現代のサイバーセキュリティ脅威に対応するために、DevSecOpsが自然に進化したものです。