NTTコムウェアのウェブサイトでは、JavaScriptを使用しています。ご使用のブラウザがJavaScriptに対応していない、またはJavaScriptの使用を許可していない設定のため、表示・機能が正しくご利用できない場合がございます。JavaScriptの設定を有効にしてご覧いただくことをお奨めします。~DevOpsにおけるセキュリティーの課題~「アプリケーションのリリースサイクルを短縮して、柔軟な開発を可能にする」そのようなニーズに応えるための手法としてDevOpsに取り組むプロジェクトが増えていますが、大きな課題として残されているのが『セキュリティー対策』です。これまでのウォーターフォール型の開発では、セキュリティー対策は開発完了後の下流工程で実施し、発見されたセキュリティー上の脆弱性を修正するという流れが普通でした。開発サイクルが早くリリースを頻繁に行うDevOpsでは、このような下流工程でセキュリティー対策を行う方法はうまく馴染みません。『DevSecOps』の手法です。セキュリティーに対する取り組みの重要性が一層高まっている現状において、DevOpsへの取り組みと同時にDevSecOpsも考えておく必要があるでしょう。Testing)の2つがあります。静的診断は各開発者が個別に行うような単体テストと、動的診断はシステム全体の動作を検証する統合テストと併せて行われることが一般的です。これらの手法はウォーターフォール型の開発と共に長年行われてきていますが、テストツールを使って自動化するのではなく、テスト項目書に従って手作業で行うため、「人手がかかる」、「終了するまで長い時間が必要」、「繰り返し何度も行うのが困難」などの課題があります。そのため、DevOpsのようにCI/CDサイクルを頻繁に実行する開発手法では、そのまま適合させるのは困難です。セキュリティー対策を後回しにすることの課題もう少し具体的に、ウォーターフォール型の開発とセキュリティー対策の課題について考えてみましょう。前述したとおり、セキュリティー対策としての脆弱性診断は、開発の下流工程で行われることがほとんどなので、そこで何か脆弱性が発見された場合、あらためてソースコードへの修正が発生します。いわゆる『手戻り』です。手戻りが発生した際に、ある程度上流工程でセキュリティーを考慮したコーディングを行っていて、ちょっとした修正で済めばよいですが、脆弱性を引き起こしているコーディングが多数見つかったり、根本的な設計を見直す必要があった場合、リリーススケジュールを延期するのか、あるいは脆弱性を抱えたままリリースを強行するのか、厳しい選択を迫られることになるでしょう。外部向けに提供するサービスの場合、脆弱性は大きなリスクとなります。最近ではセキュリティーの問題を起こすのは社内システムのケースも増えているため、外部からアクセスされないサービスだとしてもセキュリティー対策を疎かにすることはできなくなっています。このように、開発の早い段階からセキュリティーを意識して開発を行う必然性は高まっているといえるでしょう。DevOpsにセキュリティー対策を組み込む『DevSecOps』DevOpsでセキュリティーを向上させるには、CI/CDのサイクルにセキュリティー診断を組み込み、脆弱性を開発者に対して素早くフィードバックし、修正に対して何度も繰り返し診断を行えるように自動化を進める必要があります。そのため、診断ツールの利用が欠かせません。利用する診断ツールには、いくつか求められる条件があります。■CI/CDに統合しやすいDevOpsの根幹である、CI/CDサイクルを廻すCI/CDツールが実現するパイプラインに、診断ツールを統合する必要があります。■テストの精度が高い静的診断では、解析するソースコードからセキュリティー脆弱性を見つけ出して開発者に修正を促す必要があります。動的診断では、実際のアプリケーションの動作から脆弱性を見つけ出します。どちらも誤検知せず、高い精度で診断が行えなければ、かえって開発者に負担をかけることになります。診断ツールはできるだけ高い精度で、より具体的に問題と修正方法をフィードバックできる必要があります。シフトレフトDevSecOpsのような手法は、ウォーターフォール型の開発では下流工程(流れ図で言うと右側)でセキュリティー対策を行うのに対して、対策を前倒し(流れ図で言うと左側)にしていくことから「シフトレフト」と呼ばれることがあります。インフラ構築運用(Ops)におけるセキュリティー対策DevSecOpsでは主に開発(Dev)におけるセキュリティー対策の自動化に重きが置かれますが、開発したアプリケーションを実行するインフラの構築運用(Ops)においてもセキュリティーの重要性は変わりません。一般的なインフラでのセキュリティー対策と同様、使用しているプラットフォームやミドルウェアに脆弱性が発見された場合、迅速に対策が取れることが重要です。脆弱性対策が行われたパッケージのアップデート、仮想マシンやコンテナで使用するイメージの更新などを自動化しておく必要があります。システムアーキテクチャの面でも工夫が必要でしょう。適切なアクセス制御をネットワーク/認証などで実施する、Webアプリケーションとデータベースをネットワーク的に分離する、通信を暗号化するなど、設計レベルから検討すべき事項は多岐に渡ります。設計に問題が見つかった場合、柔軟に構成を変更して検証し、システムを再構築できるようにインフラのデプロイ(配備)を自動化しておく必要があるでしょう。『DevSecOps』は今後の開発における必須課題DevOpsを一歩進めて、セキュリティー対策を考慮した開発サイクルを実現するDevSecOpsに取り組むことは、今後の開発プロジェクトにおける必須課題といえるでしょう。脆弱性診断がテストと組み合わせて行われることが多いことから、併せてテストの自動化についても推し進めていくとよいでしょう。徹)※記載されている会社名、製品名、サービス名は各社の商標または登録商標です。