マイクロサービスのセキュリティ:6つのベストプラクティス
2022年2月10日
0 分で読めますコンテナ化されたデプロイへの移行に伴い、多くの開発チームがマイクロサービスアーキテクチャへと移行しています。マイクロサービスを活用すると、開発チームはよりアジャイルな方法でアプリケーションを迅速に構築し、デプロイできます。また、機能を個別にリリースできるため、開発サイクルの短縮、実装に用いるテクノロジーの選択肢の拡大、ソフトウェアの耐障害性の向上につながります。
マイクロサービスは、従来のモノリシックなアプリケーションをモダナイズするうえで優れた手段となりますが、このアプローチによってセキュリティリスクが生じることもあります。ここでは、マイクロサービスのセキュリティについて詳しく解説し、検討すべきベストプラクティスをご紹介します。
マイクロサービスのセキュリティとは?
マイクロサービスのセキュリティとは、開発チームとセキュリティチームが、マイクロサービス型アプリケーションアーキテクチャに伴うリスクを最小限に抑えるために用いる戦略です。マイクロサービス自体を安全に構築することに加え、サービス間の通信を安全に保つことも含まれます。
マイクロサービスとは、個別にデプロイできる独立したソフトウェアコンポーネントです。大規模なアプリケーションをより簡単かつ効率的に拡張できます。独立したサービスは更新が容易で、開発者はコンポーネントごとに最適なテクノロジースタックを選べるためです。また、マイクロサービスは互いに独立してデプロイできるため、アプリケーション全体を拡張せずに特定の部分だけを拡張でき、リソースの使用量とコストを削減できます。
一方、マイクロサービスを迅速かつ個別に構築、デプロイできることには、セキュリティリスクも伴います。開発チームがセキュアコーディングのベストプラクティスを採用していなければ、新たなマイクロサービスをデプロイするたびに、アプリケーション全体にリスクをもたらす可能性があります。
マイクロサービスのセキュリティに関する6つのベストプラクティス
前述のとおり、マイクロサービスのセキュリティは、アプリケーション全体のセキュリティ態勢を強化するためのアプローチです。導入時に検討すべき6つのベストプラクティスをご紹介します。
1. 設計段階からセキュリティを組み込む
マイクロサービスベースのアプリケーションの多くは、組織がモノリシックなシステムをモダナイズする際にデプロイされます。そのため、設計段階はレガシーアプリケーションのセキュリティを強化する絶好の機会です。開発チームとセキュリティチームは、マイクロサービスアーキテクチャの設計時にアプリケーションセキュリティを優先し、アプリケーションの成長や進化に合わせて安全性を維持できる基盤を整える必要があります。
安全なソフトウェアの設計では、アーキテクチャから始め、アプリケーションのあらゆるレイヤーでセキュリティを考慮する必要があります。脅威モデリングは、システムの処理設計や、サブシステムまたはマイクロサービス間のデータフローを分析するプロセスです。これにより、チームは潜在的な弱点を特定し、設計プロセスの早い段階で対策を講じられます。
マイクロサービスベースのアーキテクチャでは、アプリケーションのコードやオープンソースコンポーネントを脅威から保護し、マイクロサービスを実行するコンテナとインフラストラクチャを安全に保つことが重要です。また、マイクロサービス同士がセキュリティリスクなしに通信できるようにする必要があります。
2. DevSecOps文化を取り入れる
マイクロサービスの主なメリットの1つは、アプリケーション全体を再デプロイせずに、個々のソフトウェアコンポーネントを迅速にデプロイできることです。これによりDevOpsチームはアプリケーションをより速く構築できますが、セキュリティリスクが生じる可能性もあります。そのため、開発プロセス自体にセキュリティテストを組み込む意識への転換が不可欠です。
リスクの低減には、セキュリティ対策を開発プロセスやビルド、継続的インテグレーション環境に直接組み込むDevSecOpsのアプローチが欠かせません。DevSecOpsでは自動化を推進し、開発スピードを損なわずに安全なソフトウェアを提供する責任をチームで共有します。さらに、デプロイ後にセキュリティ対策を後付けする必要がなくなるため、安全なソフトウェアの提供にかかるコストと時間を削減できます。
3. アプリケーションセキュリティツールを統合する
DevSecOpsの重要な要素の1つは、AppSecツールを自動化された継続的インテグレーション/継続的デリバリー(CI/CD)パイプラインに統合することです。CI/CDパイプラインにこれらのツールを組み込むことで、セキュリティを開発の早い段階に取り入れ、アプリケーションのセキュリティ態勢の改善にかかる時間と労力を削減できます。コードを書いている最中なら、問題が発生した後よりも、IDE内で直接セキュリティ上の問題を修正しやすいためです。
たとえば、静的アプリケーションセキュリティテスト(SAST)を使えば、開発チームはソフトウェア開発ライフサイクル(SDLC)の早い段階で、アプリケーションのソースコードに潜むセキュリティ上の問題を発見し、修正できます。これにより、本番環境にコードをプッシュする前に、マイクロサービスへの変更をすべて検証できます。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップで、CTFチャレンジの解き方を学びましょう。
4. 依存関係をスキャンする
マイクロサービスに加え、最新のソフトウェアでは多くのオープンソースコンポーネントが使われています。多くの場合、アプリケーションが依存するオープンソースコードの量は、開発チームが独自に作成するコードを大きく上回ります。しかし、サードパーティ製の依存関係に脆弱性が含まれていると、アプリケーションのリスクに影響する可能性があります。
個々のマイクロサービスでは異なるテクノロジースタックが使われることが多く、サードパーティ製コンポーネントを追跡し、安全性を確認するのは容易ではありません。オープンソースセキュリティ管理ツールを使うと、開発チームは使用しているオープンソースコードの潜在的な脆弱性を、より簡単に発見して修正できます。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップを視聴して、CTFの課題の解き方を学びましょう。
5. セキュアなコンテナを使用する
マイクロサービスベースのアプリケーションは数十から数百ものコンポーネントで構成されるため、開発チームはデプロイを容易にするためにコンテナを頻繁に使用します。そのため、コンテナセキュリティは、マイクロサービスを安全に保ち、クラウドネイティブセキュリティを実現するうえで欠かせない要素です。
コンテナセキュリティは、コンテナの基盤となるイメージだけにとどまりません。イメージを保管するコンテナレジストリや、オーケストレーションに使用するツールも対象です。コンテナレジストリをスキャンして脆弱なイメージを検出することは、複数のマイクロサービスが同じベースイメージを使用することによるリスクを減らすうえで重要です。また、Kubernetesなどのコンテナオーケストレーションツールに関連する設定ミスやその他のリスクを排除することも、マイクロサービスを安全にデプロイする方法の1つです。
6. APIゲートウェイを構築する
マイクロサービスアーキテクチャでは、APIが独立したソフトウェアコンポーネント間の主要な通信手段となるため、アプリケーションの中でも特に脆弱性が生じやすい領域の1つです。
APIゲートウェイは、クライアントと複数のバックエンドサービスの間に配置されるツールです。このAPI管理ツールは、認証やレート制限などを処理し、APIを不正利用から保護します。その結果、APIゲートウェイは、望ましくないサードパーティからのアクセスや、サービス拒否(DoS)攻撃に伴う大量のトラフィックから、マイクロサービスベースのアプリケーションを守ることができます。
マイクロサービスセキュリティに関するFAQ
マイクロサービスはより安全ですか?
アプリケーションの規模や複雑さによってリスクプロファイルは異なりますが、多くの場合、マイクロサービスアーキテクチャはモノリシックアプリケーションよりも安全です。マイクロサービスは疎結合であるため、脆弱性の影響はアプリケーション全体ではなく、特定のコンポーネントに限定されることがよくあります。
サービス間通信に適切な認証を導入すれば、マイクロサービスベースのアプリケーションでは、モノリシックアプリケーションよりも追加のセキュリティチェックを実施できます。また、脆弱性が発見された場合も、問題を修正してマイクロサービスを再デプロイすることで、セキュリティリスクをすばやく軽減できます。
マイクロサービスを保護するにはどうすればよいですか?
マイクロサービスを保護するには、最初の段階から効果的なアプリケーションアーキテクチャを設計する必要があります。個々のソフトウェアコンポーネントは迅速に開発・デプロイされることが多いため、安全なマイクロサービスベースのアプリケーションを提供するには、開発プロセスにアプリケーションセキュリティを直接組み込むことが重要です。脅威の状況は常に変化しているため、アプリケーションを危険にさらす可能性のある脆弱性を継続的に検出して修正する、自動化されたAppSecツールの活用が不可欠です。
CoveoがマイクロサービスのデプロイメントパイプラインにSnykを統合し、ビジネス全体でDevSecOpsの実践を拡大するのに役立てた方法をご覧ください。
