マイクロセグメンテーションによるレジリエントで安全なマイクロサービスの構築
この記事は元々掲載されました 新しいスタック。
約10~12年前、ソフトウェアの世界ではエンタープライズアプリケーションのアーキテクチャ面での変化が起こりました。アーキテクトやソフトウェアビルダーは、プライベート・データセンターにデプロイされた巨大で緊密に結合されたモノリシック・アプリケーションから、パブリック・クラウド・インフラストラクチャーでホストされる、よりマイクロサービス指向のアーキテクチャーへと移行し始めました。マイクロサービスに内在する分散型の性質は、パブリッククラウドにおける新たなセキュリティ課題です。過去 10 年間、スケーラブルで自律的で堅牢なエンタープライズアプリケーションを構築するためのマイクロサービス指向アーキテクチャの採用が増えているにもかかわらず、組織は従来のデータセンターと比較して、クラウドにおけるこの新しい攻撃対象からの保護に苦労することがよくあります。これには、マルチテナンシーに関する懸念や、インフラストラクチャや運用環境に対する可視性と制御の欠如に関する懸念が含まれます。このアーキテクチャの変化により、特にコンテナベースのデプロイの高速化が最重要視されるようになると、セキュリティ目標の達成が難しくなります。
この記事の目的は、マイクロセグメンテーションとは何か、そしてそれがソフトウェアアーキテクト、DevOpsエンジニア、ITセキュリティアーキテクトが安全で回復力のあるマイクロサービスを構築するのにどのように役立つかを理解することです。具体的には、以下について説明します。 ネットワークセキュリティ 一般的なコンテナオーケストレーションメカニズムであるKubernetesに関連する課題と、侵害が発生した場合のラテラルムーブメントを防ぐためのマイクロセグメンテーションの価値について説明します。
マイクロサービスの導入に伴うセキュリティ上の課題
マイクロサービス指向のアーキテクチャでは、アプリケーションを小規模で疎結合のサービスに分割する必要があります。これらのサービスは分散型であるため、多くの場合、独自のデータストアを持つことになります。これらのサービスはそれぞれコンテナを使用して個別にデプロイされます。コンテナは、オブジェクトコード、サードパーティライブラリ、オペレーティングシステム、ツール、その他の依存関係など、あらゆるものをアプリケーションにパッケージ化するメカニズムを提供します。必要なものをすべてパッケージ化すると、コンテナはそれらを円滑に実行するための実行環境となります。これらのコンテナは Kubernetes などのオーケストレーターを使用して管理されます。
一般的な概念によると、コンテナエコシステムは分離によってセキュリティを強化するように設計されています。ただし、コンテナを分離したからといって、必ずしも必要なセキュリティ境界が確保されるわけではありません。Kubernetes には、認証、承認、ネットワークポリシー、ポッドセキュリティ標準など、いくつかのセキュリティ機能がありますが、残念ながら、コンテナも Kubernetes もデフォルトではセキュリティを提供していません。Kubernetes のデプロイメントでは、デフォルト構成ではセキュリティよりも機能が優先されます。そのため、これらのコンテナの作成、移動、破棄を担当する開発者または信頼性エンジニアが、デプロイメントのセキュリティを確保する方法を常に知っているとは限りません。ネットワークとセキュリティの観点から、Kubernetes の重要な側面をいくつか詳しく見てみましょう。
- 名前空間: Kubernetes では、名前空間はクラスターリソースを複数のユーザー間で仮想空間に分割する論理的な方法です。Linux とは異なり、何も強制しません。 ネットワークセグメンテーション。名前空間はセキュリティ境界ではないため、ある名前空間のサービスは別の名前空間のサービスにアクセスできることに注意してください。
- ネットワークポリシー: Kubernetes ネットワークポリシーは、名前空間、ポッド、IP アドレスブロック間のレイヤー 3 およびレイヤー 4 通信を可能にするアプリケーション固有の構成です。Kubernetes がインストールされている場合、ネットワークポリシーはデフォルトでは使用できません。ポッドを作成する前に、ネットワークポリシーを適用するネットワークプラグインをインストールして設定する必要があります。また、ネットワークポリシーをサービスレベルでは適用できないことにも注意してください。アクセス制御をサービスまで拡張できないため、これはセキュリティの観点から見ると重大な欠点です。
- ポッドセキュリティ基準: クラスターでは、ポッドは同じ物理マシンまたは仮想マシンを共有する複数のコンテナーをサポートします。ポッド内のコンテナ間でのデータ共有と通信が可能になります。ポッドセキュリティ標準では、管理者はきめ細かな認証モデルを使用してリソースとその権限を制御できます。このセキュリティ制御にはアドミッションコントローラが必要ですが、デフォルトでは有効になっていません。特権ポッドはすべてのコンテナへの管理アクセスを提供します。その結果、特権コンテナへのアクセス権を取得した攻撃者は、ホストリソースへの管理アクセス権を取得できます。
- シークレットストレージ: Kubernetes は、パスワード、OAuth トークン、SSH キーなどの機密情報を、プレーンテキストと見なされる Base 64 でエンコードされた形式でシークレットとして保存します。シークレットへのアクセスを制限するために使用される認証ポリシーは、デフォルトでは設定されていません。これらは環境変数やマニフェストファイルを介して共有されますが、これもシークレットの処理には安全ではないと考えられています。保存中のシークレットのデフォルト暗号化がなく、強固なシークレット管理が行われていない場合、シークレットはラテラルムーブメントの格好のターゲットになります。
ラテラルムーブメントと悪質なインサイダー

マイクロサービスは分散型の性質を持っているため、接続性がきわめて重要になります。具体的には、コンテナとポッドは名前空間を越えて相互に通信できなければなりません。ただし、クラスター・レイヤーのデフォルト・ネットワーク・ポリシーは、必ずしも以下を実装しているわけではありません。 最小権限の原則 箱から出して。したがって、コードをどのように保護しても、共有リソースへの不正な暗黙アクセスを禁止することはできません。その結果、アプリケーションがクラスター内の横方向の動きの影響を受けやすくなる可能性があります。マイクロセグメンテーションにより、コンテナ、ポッド、クラスターの各レベルで各マイクロサービスの周囲に安全なゾーンを作成して、きめ細かなアクセス制御を実装できます。これにより、爆発範囲を大幅に縮小し、攻撃から回復するための回復力を高めることができます。
既存のKubernetesフレームワークのセキュリティモデルがマイクロサービスに関してもたらす2つ目の顕著な脅威は、悪意のある内部関係者です。攻撃者の観点から見ると、デフォルトでセキュリティが利用できない場合、いくつかの設定ミスが起こり得ます。強力なアクセス制御や承認ポリシーがないと、サーバーサイドリクエストフォージェリのような攻撃が仕掛けられます (SSRF)攻撃者がポッドへの認証済みアクセスを利用して、別のポッド内のリソースへの不正アクセスを取得できるようにします。
上で説明したように、シークレットを保護するための適切なセキュリティ制御はデフォルトでは利用できないことがわかりました。シークレットを暗号化したりローテーションしたりしないことと、シークレットへのアクセスを制限しないことはまったく関係のない問題ですが、セキュリティコントロールが1つもない場合(この場合は暗号化の欠如)、悪意のある内部者(不満を抱いた管理者など)による悪用を防ぐために、2つ目のセキュリティコントロール(つまり、シークレットストアへのアクセスを制限する)が不可欠になります。
マイクロセグメンテーションによるサイバーレジリエンスの導入
セキュリティの観点から言うと、レジリエンシーとは、攻撃や侵害などの壊滅的な出来事による単純な障害から迅速に回復できる能力のことです。レジリエントなマイクロサービスを構築するための最初のステップは、攻撃者から何を守りたいのか、そして資産やリソースが侵害された場合にその影響をどのように抑えることができるのかを理解することです。マイクロセグメンテーションは、重要なデータを保持しているリソースや重要なフォールトトレラントシステムを特定するのに役立ちます。また、最小限の権限に基づいてアクセスをロックダウンするメカニズムも提供します。この方法では、1 つの重要なリソースが危険にさらされても、他のリソースは影響を受けません。
今日の最新のソフトウェア開発ライフサイクルでは、機能の迅速な提供に特に重点が置かれています。これらの機能は、主に同じ開発者または DevOps によって、コンテナを介して本番環境にさらに迅速にデプロイされます。マイクロサービス、サードパーティーライブラリ、その他の依存関係、コンテナ、またはクラスターのコードが影響を受けやすいあらゆる種類の脆弱性を考えると、これらの攻撃をすべて特定して防止するにはどうすればよいでしょうか。その答えは、マイクロセグメンテーションを使用して、重要なリソースへのアクセスをブロックし、「知る必要がある」場合にのみ許可することです。
マイクロセグメンテーションを始める
マイクロセグメンテーションを始めるときに万能な戦略はありませんが、マイクロサービスのマイクロセグメンテーションプロジェクトを立ち上げる際のベストプラクティスを以下に示します。
1。マイクロサービスのデザインパターンを理解し、マイクロセグメンテーションテンプレートを使用する
設計パターンを知ることで、アーキテクチャコンポーネント、データフロー、および重要なデータを保持する資産についての理解が深まります。これらの頻繁に使用される設計パターンに基づいて、対応するマイクロセグメンテーションテンプレートを作成できます。これらのテンプレートがセキュリティとネットワークのチームによって精査されれば、再利用や拡張が容易になり、速度も速くなります。
巨大で密結合されたモノリスアプリケーションとは異なり、マイクロサービス指向のアーキテクチャに基づくアプリケーションは、1 つ以上の特定の設計パターンに従います。これらの設計パターンは次のいずれかになります。
- 分解パターンには、ビジネス機能に基づいてアプリケーションをサブドメインまたはトランザクションに分割することが含まれます。
- 統合パターンには、API ゲートウェイ、アグリゲーター、チェーンマイクロサービスなどのサービス統合設計パターンが含まれます。
- データベースパターンは、アプリケーションの全体的なアーキテクチャにおけるデータベースの位置に焦点を当てています。例としては、サービスごとのデータベース、共有データベース、イベントソーシングなどがあります。
- オブザーバビリティパターンは、ログ集約、分散トレーシング、ヘルスチェックなど、監査、ロギング、モニタリングに焦点を当てたデザインパターンで構成されています。
- 横断的な懸念パターンは、セキュリティ、フォールトトレランス、サービス間通信、構成管理などのアプリケーションレベルの機能を一元的に管理するのに役立ちます。例としては、サーキットブレーカー、サービスディスカバリーなどがあります。
(さまざまなマイクロサービスデザインパターンの詳細については、以下をご覧ください。 ここに。)
2。適切なマイクロセグメンテーションアプローチの選択
現在、市場にはさまざまなソリューションアプローチを採用しているマイクロセグメンテーションベンダーがいくつかあります。マイクロセグメンテーションの手法は、大きく分けて次の 2 つのカテゴリに分類されます。
- テクノロジーにとらわれないマイクロセグメンテーションソリューションは、エージェントベースか 次世代ファイアウォール。
- テクノロジーに依存するマイクロセグメンテーションソリューションは、ハイパーバイザーまたはネットワークファブリックに基づいています。
マイクロサービスはさまざまなテクノロジースタックを使用しており、迅速な導入には迅速なスケーリング能力が必要です。そのため、テクノロジーにとらわれないマイクロセグメンテーション・ソリューションが、クラスター、ポッド、コンテナ、サービスをセグメント化できるコンテナ・エコシステム向けに特別に調整されたものが、最適な選択肢となるでしょう。
3。ネットワークの可視性
セグメント化されたアプリケーションとトラフィックフローを視覚化する機能は、マイクロセグメンテーションソリューションに不可欠です。可視化により、管理者、セキュリティアーキテクト、最高セキュリティ責任者 (CSO) がネットワーク全体をワンストップで把握できるようになります。
4。使いやすい集中管理
各アプリケーションのポリシーを起草することは、最初は大変な作業です。そのためには、IT、ネットワーク、セキュリティアーキテクトとの一連の話し合いが必要です。ポリシーの作成と適用を容易にするために一元的に管理できれば、プロセスのスピードアップに役立ちます。マイクロサービスの設計パターンに従ってカスタマイズされたセグメンテーションテンプレートを活用することも役立ちます。
5。パフォーマンスがボトルネックであってはなりません。
マイクロセグメンテーションポリシーを適用するには、トラフィックを分析し、ポリシーをリアルタイムで効果的に展開する必要があります。攻撃者はパフォーマンスの遅延を利用して攻撃をさらに拡大できます。そのため、特にレイテンシーの影響を受けやすいマイクロサービスでは、パフォーマンスをテストすることが非常に重要です。
結論

このブログ記事では、マイクロサービスによって利用されるコンテナと Kubernetes ベースのデプロイメカニズムがもたらすセキュリティ上の懸念事項について説明しました。「レジリエンシー」という言葉は、重要なリソースへのアクセスの制限をあまり考慮せずに、CI/CD のライフサイクル全体を通じて、より速い速度でマイクロサービスを継続的に本番環境にデプロイしたときから消え始めます。マイクロセグメンテーションは、侵害の影響を最小限に抑える強力なアクセス制御メカニズムを提供します。また、安全なマイクロゾーンを実装することで、エンタープライズアプリケーションの耐障害性も高まります。
マイクロセグメンテーションは、正しく計画され実行されれば、マイクロサービスの世界における横方向の動きに対する強固な障壁となることは間違いありません。迅速に行動しながらマイクロサービスを保護することは困難ですが、立ち止まってセキュリティとレジリエンシーを大規模に実装することを考え、すべての利害関係者と積極的に計画することが重要です。