DevSecOpsを4つのステップで実践する方法:DevSecOps導入戦略
2023年6月22日
0 分で読めます現代のクラウド環境は、かつてないほど多くの構成要素、相互に依存するチーム、高速なプロセスで成り立っています。この複雑さにより、ソフトウェア開発ライフサイクル(SDLC)全体にセキュリティ対策を導入し、さらに関係するチームに継続して取り組んでもらうことが難しくなっています。
現代の開発環境を保護するには、コードから本番環境まで、セキュリティチームとDevOpsチームが効果的に連携するDevSecOpsのアプローチが必要です。これは、開発プロセスの終盤までセキュリティを考慮しなかった10年前のセキュリティ対策とは、まったく異なるアプローチです。
ただし、組織で既に使われているDevOpsワークフローにセキュリティ対策を導入するには、適切な知識と戦略が必要です。
DevSecOpsを実践するための4つのステップ
組織でDevSecOpsを実践する方法を検討する際は、SDLCに新しいツールやプロセスを加えるだけではないと考えましょう。必要なのは、考え方そのものを変えることです。開発者がセキュリティの価値を理解し、セキュリティチームは、セキュリティ対策をできる限りシンプルで開発者に使いやすいものにする必要があります。DevSecOpsは相互理解と明確なコミュニケーションを促すことで、セキュリティ、開発、運用チームの間にある隔たりを効果的に埋めます。
1. 文化の変革だと認識する
DevSecOpsを成功させるための第一歩は、文化を変えることです。この変化は、次の4つの領域で起こります。
人
DevSecOpsのベストプラクティスは、アプリケーションのコーディング、リリース、保護を担う人々から始まります。関係するすべてのチームが相手の立場を理解し、相手の優先事項、目標、対応可能な範囲を把握することが大切です。たとえば、セキュリティチームが新しいセキュリティツールを導入したいと考えていても、開発者がそのツールを使うために新しいシステムにログインしなければならず、開発ワークフローから外れているうえ、誤検知が多いとします。この場合、セキュリティチームは開発者のワークフローになじみ、生産性を高めながら、誤検知でチームを煩わせないセキュリティツールを検討すべきです。
プロセス
DevSecOpsには、戦略的なプロセスも必要です。DevSecOpsの取り組みで何を成功とするのかを定め、責任を明確にする仕組みを整えましょう。また、セキュリティチームが承認の門番となるようなプロセスは見直してください。セキュリティゲートの仕組みでは、次の段階に進む前に、チームが一定のリスク軽減基準を満たさなければなりません。やがて、これが大きなボトルネックになります。その代わりに、セキュリティテストを早い段階から頻繁に実施し、プロセスの初期に問題を見つけ、開発者自身がリスクを軽減できるようにしましょう。これにより、セキュリティは開発者の作業を遅らせずに安全を守るガードレールとなります。
テクノロジー
DevSecOpsを導入する際は、開発者を第一に考えたセキュリティ技術を選びましょう。開発者に使いやすいツールには、次のような特徴があります。
DevOpsツール、CI/CDパイプライン、レポート・アラートソフトウェアなどとスムーズに連携できる
習得にあまり時間がかからない
使い慣れた開発環境やワークフローで快適に使える(開発用CLIに直接同期できるツールもあります!)
開発者が実行できる修正ガイダンスを提供する
アプリケーションセキュリティの複数の領域を一元化し、セキュリティツールの乱立と、それに伴う追加の負担を解消する
既存のフローに簡単に組み込める自動化機能を備えている
2. 設計プロセスにセキュリティチームを参加させる
開発チームとセキュリティチームは、最初から安全なアーキテクチャを設計し、アプリケーションの基盤にDevSecOpsを組み込む必要があります。実現する方法をいくつかご紹介します。
まずは脅威モデリングからDevSecOpsを始めましょう。既存のアプリケーションのアーキテクチャを調べ、初期段階のセキュリティ問題の根本原因を突き止めます。
SDLCのごく初期に、コードとオープンソースコンポーネントを確認しましょう。安全でないコードやコンポーネントをできるだけ早く見つけ、リスクを軽減する方法を取り入れます。たとえば、アプリケーションに組み込む前にSnyk Advisorを使って、オープンソースパッケージのセキュリティを確認できます。
3. 継続的インテグレーション(CI)を実践する
継続的インテグレーション(CI)は、DevOpsを構成する重要な要素です。開発者が新しいコードを早期にテストし、バージョン管理された中央のソースコードリポジトリにまとめて保存することで、運用タスクにも携われるようにします。通常、開発チームはこうした作業に自動化されたCIツールを利用します。
多くの組織は、CIプロセス全体を通じて、通常の品質テスト(単体テスト、回帰テストなど)とセキュリティテストを組み合わせ、DevSecOpsを実践しています。新しいコードがソースコードリポジトリに追加されるたびに、開発チームはコードのセキュリティと品質の両方を確保できます。
4. DevSecOpsのツールとテストを活用する
では、CI/CDパイプライン全体でどのようなDevSecOpsテストを実施すべきでしょうか。まずは次の3つから始めましょう。
SAST
静的アプリケーションセキュリティテスト(SAST)では、独自のソースコード、バイトコード、アセンブリコードをスキャンし、脆弱性を検出します。Snyk Codeのような開発者に使いやすいSASTソリューションは、脆弱性を検出するだけでなく、開発者が修正する方法を手順ごとに案内します。
SCA
ソフトウェア構成分析(SCA)は、パイプラインの初期段階でSASTと併せて実施します。既知の脆弱性があるサードパーティ製コンポーネントや依存関係を特定し、脆弱なコンポーネントをより適切なものに置き換えられるよう開発者を支援します。SASTがコードの構成のみに着目するのに対し、SCAではオープンソースのライセンスとバージョンも考慮します。Snyk Open Sourceは、これらすべてに対応します。
DAST
動的アプリケーションセキュリティテスト(DAST)は、CI/CDパイプラインの終盤で、統合テストやその他のエンドツーエンドの検証と併せて実施します。攻撃をシミュレートし、外部からアプリケーションをテストします。
DevSecOpsとは?
DevSecOpsとは、組織の文化、プロセス、ツールの選択に浸透する、セキュリティに対する共同責任という考え方です。その名のとおり、開発、セキュリティ、運用の各チームが連携し、コラボレーション、自動化、文化というDevOpsの基本原則に沿って、安全なアプリケーションを提供します。
DevOpsとDevSecOpsの違いは?
DevOpsは、小規模で反復的なリリース(アジャイル)、自動化、頻繁なテストを通じて、高品質なソフトウェアを迅速に開発する手法です。開発チームと運用チームを結び付け、コード品質テストなどのアプリケーションセキュリティのベストプラクティスが含まれることもあります。
しかし、一般的なDevOpsプロセスでは、ほとんどのセキュリティ関連の取り組みに開発者が参加しません。また、現代的なアプリケーションのDevOpsサイクルは、変更の高速化を重視し、主にクラウド上で実行され、コンテナ化やInfrastructure as Code(IaC)に依存する一方、セキュリティを考慮しません。そのため、セキュリティチームが現代のソフトウェア開発の速いペースに追いつくのはほぼ不可能となり、アプリケーションにセキュリティリスクが生じる可能性があります。
そこで登場するのがDevSecOpsです。開発チームと運用チームが、コードを記述しリリースすると同時にセキュリティタスクを実行できるようにします。DevOpsとは異なり、IDEレベルでの統合やGitのコミット前フックなど、ソフトウェア開発サイクルの早い段階でセキュリティ対策を取り入れ、開発者がアプリケーションのセキュリティ態勢に責任を持てるようにします。これにより、後からセキュリティを追加する、よりコストのかかる方法や、責任を「セキュリティチームの問題」として押し付けることを避けられます。
(セキュリティを後から追加する)プロセスはコストがかかり、責任を「セキュリティチームの問題」として押し付けることにもなります。
DevSecOps、クラウドセキュリティ、Snykの原則
DevSecOpsの実践に必要なのは、開発プロセスにセキュリティツールを導入することだけではありません。開発チームと運用チームの既存ワークフローに深く根付く文化の変革が必要ですが、DevSecOpsがもたらす効果は大きな変革につながります。
Snykは、あらゆるアプリケーションセキュリティ活動を包括的に進めるために、組織を支援します。Snykの開発者向けセキュリティプラットフォームを活用すれば、最初のコード行からIaCやコンテナ、クラウドへのデプロイに至るまで、開発者がセキュリティを組み込めます。DevSecOpsツールを試してみませんか?今すぐSnykでアプリケーションをスキャンしてみましょう。
セキュアな開発を加速
Snykは開発者とセキュリティチームをつなぎ、スピードとセキュリティを大規模に両立します。
