継続的インテグレーションでシフトレフトする方法
継続的インテグレーション(CI)は、デプロイパイプラインを通じてコード品質を向上させるプロセスです。セキュリティはプロセスの早い段階でパイプラインに統合でき、組織のシフトレフトに役立ちます。
シフトレフトとは、ソフトウェア開発ライフサイクルの早い段階でテストを移行するアプローチです。コードが本番環境の準備が整った時点でセキュリティ テストが行われると、過去に遡って問題を修正することが難しくなり、すでに迅速な修正ができなくなっていることがよくあります。結果としてハンドオフの遅延、セキュリティ上の問題、さらにはセキュリティ部署と他のDevOpsチームとの間でサイロ化が発生する可能性があります。
組織がDevSecOpsの構造への移行を進めるにあたって、セキュリティテストを開発ライフサイクルの早い段階で導入することは必須です。そのためにはデプロイパイプラインにセキュリティテストを組み込み、共有リポジトリの他のコミットに対してだけでなく、セキュリティについても継続的にコードをテストするようにします。
継続的インテグレーション(CI)は、デプロイパイプラインを通じてコード品質を向上させるプロセスです。セキュリティをプロセスの早い段階でデプロイパイプラインに統合できるため、組織がシフトレフトを行う上で効果的です。
セキュリティを継続的インテグレーションパイプラインに組み込む
静的アプリケーションセキュリティテスト(SAST)は、継続的インテグレーションを通してセキュリティを自動化する方法の1つです。SASTはソースコードを分析し、デベロッパーがソフトウェア開発ライフサイクルの早い段階で問題を解決できるようにします。
GitLab CI/CDの場合、デプロイパイプラインはSASTレポートをチェックし、ソースブランチとターゲットブランチの脆弱性を比較します。調査結果はマージリクエストに表示されます。
動的アプリケーションセキュリティテスト(DAST)は、多くの場合SASTと併用されます。SASTはソースコードを分析し、DASTは実行されたアプリケーションのランタイムエラーを分析します。デプロイ後のアプリケーションは、クロスサイトスクリプティングや破損した認証の欠陥のような新しい形式のセキュリティリスクにさらされます。
SASTと同様、GitLabはDASTレポートをチェックしてソースブランチとターゲットブランチの脆弱性を比較した結果を表示しますが、比較対象はターゲットブランチのベースコミットに対して実行された最新のパイプラインのみとなります。
その他の種類のセキュリティテストには、インタラクティブアプリケーションセキュリティテスト(IAST)とランタイムアプリケーションセキュリティプロテクション(RASP)があります。IASTはアプリケーション内にエージェントを配置することで動作し、RASPはライブ攻撃に対応できるセキュリティツールのような働きをします。
ツールチェーンの複雑さを軽減
ツールチェーンが複雑化すると、メンテナンスに時間がかかるだけでなく、システムがセキュリティリスクにさらされる可能性があります。多くのDevSecOpsチームは、プラグイン、スクリプト、またはハードコードされたカスタムインテグレーションを使用してツールをまとめています。その一部は手動で行う必要があるため、こうしたツールチェーンはヒューマンエラーの影響を受けます。さらにツールが増えると、認証、権限、セキュリティ要件が増え、ソフトウェア開発ライフサイクルの可視性が低下します。こうした抽象化レイヤによって、問題の特定と解決が困難になります。
複雑なシステムには複数の障害点が含まれているものです。組織がシフトレフトする場合、こうした複雑さを一部解消することで、セキュリティとコンプライアンスを開発ライフサイクルに組み込みやすくなります。複雑なツールチェーンやプラグイン環境は、特別な注意を必要とする壊れやすいパイプラインという問題を引き起こす可能性があります。
継続的インテグレーションシステムを強化する
強化は、脆弱性の表面を減らすことによってシステムを保護するプロセスです。ツールチェーンの複雑さを軽減してリスクの原因を減らすのと同様、チェックリストを強化することで組織は内部システムを検査し、セキュリティのベストプラクティスに従っていることを確認できます。
推奨される対応の一例として、ソースおよびビルドアーティファクトリポジトリ、CIおよび継続的デリバリー(CD)サーバー、構成管理、ビルド、デプロイ、リリースツールをホストするシステムの強化があります。オンプレミスとクラウドでそれぞれ何を行っているか、またそれがワークフローにどのような影響を与えるかをチームが把握できるようにしましょう。
デプロイパイプラインにセキュリティスキャンを組み込むことに加えて、継続的インテグレーションシステムを強化すると、チームがシフトレフトしやすくなります。成熟したDevOpsチームは、継続的インテグレーションプロセスにセキュリティテストを自然に実装し、シフトレフトアプローチを採用しています。そうしたDevSecOpsチームは、セキュリティを後回しにするのではなく、最優先に考えています。