概要
DevSecOps とは、開発 (development)、セキュリティー(security)、運用 (operation) の略であり、組織文化、自動化、およびプラットフォーム設計に対するアプローチのことです (読み方は、「デブセックオプス」となります)。DevSecOps では、セキュリティが IT ライフサイクルのすべてのフェーズに統合され、セキュリティに対する責任は組織全体で共有されます。
(動画) DevSecOps とは?
DevSecOps とDevOps の比較
DevOps は開発チームや運用チームだけのものではありません。DevOps アプローチのメリットであるアジリティと応答性を十分に活用したいのであれば、IT セキュリティもアプリケーションのライフサイクル全体に組み込む必要があります。
セキュリティを早期の段階で考慮する必要があるのはなぜでしょうか。これまで、セキュリティの役割は開発の最終段階にある特定のチームの責任として切り分けられてきました。開発サイクルが数カ月から数年にも及んでいた時代にはこれで問題ありませんでしたが、そうした時代は終わりました。効果的な DevOps の導入により、開発サイクルを短縮し、リリース頻繁を高めることが可能になりますが (数週間や数日単位に短縮できる場合もある)、セキュリティの実施方法が旧式のままでは、DevOps の取り組みがどれほど効率的であっても台無しになってしまいます。
しかし、コラボレーションを重視する DevOps のフレームワークにおいては、セキュリティは最初から最後まで組み込まれ、その責任も共有されます。これは非常に重要な考え方なので、「DevSecOps」という用語も作り出され、セキュリティ基盤を DevOps の取り組みに導入する必要性を強調しています。
DevSecOps とは、アプリケーションとインフラストラクチャのセキュリティを、開始時点から考慮することです。また、DevOps ワークフローのスピードが落ちないように、一部のセキュリティゲートを自動化することも必要です。セキュリティ機能を搭載した統合開発環境 (IDE) を全員で使用するなど、継続的にセキュリティを統合するための適切なツールを選択すると、このような目標を達成しやすくなります。とはいえ、DevOps 体制における効果的なセキュリティを実現するには、新しいツールを導入する以上の取り組みが必要となります。そのためには、DevOps がもたらす組織文化の変革をさらに発展させ、ライフサイクルの後工程ではなく前工程からセキュリティチームを関与させることが必要になります。
DevOps セキュリティを組み込む
「DevOps」であれ「DevSecOps」であれ、セキュリティをアプリケーションのライフサイクル全体に重要な要素として組み込むことが理想であることに変わりはありません。DevSecOps の中心となる概念は「組み込みセキュリティ」であり、アプリケーションおよびデータの周辺でのみ機能するセキュリティではありません。セキュリティが開発パイプラインの末端に留まっていると、DevOps を採用する組織の開発サイクルは再び長期化し、本来避けたかった事態に逆戻りする結果となります。
DevSecOps で重要な点の 1 つとして、DevOps の取り組みの開始時点でセキュリティチームとパートナー各社を参加させ、情報セキュリティを構築し、セキュリティ自動化の計画を策定する必要性があります。また、開発者もセキュリティを念頭にコードを作成できるよう支援する必要があります。このプロセスでは、セキュリティチームが、内部脅威や潜在的なマルウェアなどの既知の脅威に対する可視性、フィードバック、知見を共有し、協力する必要があります。また、開発者向けの新しいセキュリティ関連のトレーニングが必要になることもあります。これらは、従来のアプリケーション開発ではそれほど重視されてきませんでした。
「組み込みセキュリティ」とは実際にはどのようなものでしょうか。初めて DevSecOps に着手する場合は、リスク許容度を決定し、リスク便益分析を実施することから始めることをお勧めします。所定のアプリケーションについてどの程度のセキュリティ制御が必要か、それぞれのアプリケーションについての市場投入期間のスピードアップの必要度はどの程度か、などを検討できます。さらに、パイプラインでセキュリティチェックを手作業で行うと多くの時間がかかるため、DevSecOps では反復タスクを自動化することが重要なポイントとなります。
DevOps セキュリティを自動化する
組織の課題には、短期かつ頻繁な開発サイクルを維持する、大きな混乱を伴わずにセキュリティ対策を運用に取り入れる、コンテナやマイクロサービスなどの革新的なテクノロジーに遅れをとらない、また通常は別々に作業するチーム間の緊密な共同作業を促進するなどが含まれます。こうした課題はどのような組織にとっても簡単なことではありません。これらはすべて人が開始し、組織のコラボレーションも人が行います。しかし、DevSecOps のフレームワークにおいて、このようなやり取りを促進するのは自動化になります。
それでは、何をどのように自動化すべきでしょうか?この質問への答えは各種のガイダンス (例) に記されています。まず、組織は開発と運用の環境全体を見渡し、じっくりと検討する必要があります。これには、ソース・コントロール・リポジトリ、コンテナレジストリ、継続的インテグレーションと継続的デプロイメント (CI/CD) パイプライン、アプリケーション・プログラミング・インタフェース (API) 管理、オーケストレーションおよびリリース自動化、運用管理と監視などを考慮することが含まれます。
新しい自動化テクノロジーは、アジャイル開発手法の導入を促進し、新しいセキュリティ対策の進化にも一役買っています。しかし、近年 IT 業界で変化したのは自動化だけではありません。今やコンテナやマイクロサービスなどのクラウドネイティブ技術がほとんどの DevOps の取り組みにおける主要な部分になり、DevOps セキュリティはこの動きに対応できる必要があります。
コンテナとマイクロサービス向けの DevOps セキュリティ
コンテナによってより大規模で動的なインフラストラクチャが実現し、多くの企業でビジネスの遂行方法が変革されました。このため、DevOps ではセキュリティの適用方法を新しい状況に適応させ、コンテナ固有のセキュリティガイドラインに一致させる必要があります。
クラウドネイティブ技術については、静的なセキュリティポリシーやチェックリストは有効ではありません。セキュリティは、アプリケーションおよびインフラストラクチャのライフサイクルのどの段階にも連続的に統合される必要があります。
DevSecOps とは、セキュリティをアプリケーション開発の隅々にまで組み込むことです。このようにパイプラインに統合するには、新しいツールを導入する場合と同じように、組織全体で新しい考え方を取り入れる必要があります。これを念頭に入れて、DevOps チームはセキュリティを自動化し、環境全体とデータ、そして継続的インテグレーション/継続的デリバリープロセスを保護していく必要があります。これには、コンテナ内のマイクロサービスのセキュリティが含まれるでしょう。
環境とデータのセキュリティ
- 環境を標準化および自動化する:各サービスに付与する権限は必要最低限にして、不正な接続とアクセスのリスクを最小限にすべきです。
ユーザー ID とアクセス制御機能を一元化する:厳密なアクセス制御と一元化された認証メカニズムは、マイクロサービスのセキュリティ保護に欠かせません。認証は複数のポイントで発生するからです。
マイクロサービスを実行するコンテナを相互およびネットワークから分離する:移動中のデータと保管されているデータの両方が、攻撃者にとって高価値のターゲットとなる可能性があります。
アプリケーションとサービスの間のデータを暗号化する:セキュリティ機能を内蔵したコンテナ・オーケストレーション・プラットフォームが、不正アクセスのリスクを低減させます。
セキュアな API ゲートウェイを導入する:セキュアな API によって認可とルーティングの状況がわかりやすくなります。公開される API を減らすと、攻撃対象となる領域を縮小できます。
CI/CD プロセスのセキュリティ
セキュリティスキャナーをコンテナに統合する:これはコンテナをレジストリに追加するプロセスの一部として組み込むべきです。
CI プロセスでのセキュリティテストを自動化する:これには、ビルドの一環としてセキュリティの静的分析を実行することや、ビルドパイプラインに導入される設定済みのコンテナイメージをスキャンして、既知のセキュリティ脆弱性の有無を確認することが含まれます。
セキュリティ機能のテストを自動化して、受け入れテストプロセスに追加する:入力検証テストに加えて、検証の認証と認可機能を自動化します。
既知の脆弱性へのパッチなど、セキュリティアップデートを自動化する:DevOps パイプラインを通じて実行します。管理者が本番システムにログインする必要がなくなり、文書化された追跡可能な変更ログを作成できるようになります。
システムおよびサービス構成管理機能を自動化する:これにより、セキュリティポリシーに準拠でき、手作業によるエラーを削減できます。監査と修復も自動化する必要があります。