サンドボックスコンテナランタイムは、システムの他の部分から隔離された軽量 VM でアプリケーションを実行します。 このアーキテクチャは、アプリケーションポッドのカーネルレベルの隔離を確立すると同時に、ホストインフラストラクチャからの厳密な環境分離を維持します。 このメカニズムは、ホストまたは他のコンテナを、サンドボックスコンテナ内の攻撃や脆弱性から効果的に保護します。 このトピックでは、サンドボックスコンテナのアーキテクチャ、利点、および使用シナリオについて説明します。
背景情報
サンドボックスコンテナは、信頼できないアプリケーションの隔離、障害の隔離、パフォーマンスの隔離、複数のユーザー間の負荷の隔離などのシナリオに適しています。 サンドボックスコンテナはセキュリティを強化し、アプリケーションのパフォーマンスへの影響はわずかであり、ロギング、監視、および弾力的なスケーリングに関して Docker と同じユーザーエクスペリエンスを提供します。
オープンソースの Kata Containers と比較して、サンドボックスコンテナはストレージ、ネットワーキング、および安定性の面で最適化されています。
アーキテクチャ
主な機能
サンドボックスコンテナは、Alibaba Cloud によって開発されたコンテナセキュリティランタイムです。 サンドボックスコンテナ V1 と比較して、サンドボックスコンテナ V2 は同じ隔離パフォーマンスを維持し、ポッドのオーバーヘッドを 90% 削減します。 また、サンドボックスコンテナを 3 倍速く起動でき、ホストにデプロイできるポッドの最大数を 10 倍に増やすことができます。 サンドボックスコンテナ V2 は、次の主な機能を提供します。
サンドボックス化された軽量 VM に基づく強力な隔離。
アプリケーション管理に関して runC との互換性。
runC ベースのアプリケーションのパフォーマンスの 90% に相当する高パフォーマンス。
File Storage NAS (NAS) ファイルシステム、Alibaba Cloud ディスク、および OSS バケットは、virtio-fs を介してサンドボックスコンテナにマウントできます。 NAS ファイルシステムは、サンドボックスコンテナに直接マウントすることもできます。
ロギング、監視、およびストレージに関して runC と同じユーザーエクスペリエンス。
RuntimeClass (runC および runV) のサポート。 詳細については、「RuntimeClass」をご参照ください。
最小限の技術スキル要件で使いやすさ。
オープンソースの Kata Containers ランタイムと比較して、安定性が向上しています。 Kata Containers の詳細については、「Kata Containers」をご参照ください。
サンドボックスコンテナと Kata Containers の比較
項目 | カテゴリ | サンドボックスコンテナ V2 | Kata Containers |
サンドボックスの起動に費やされる時間 | 約 150 ms | 約 500 ms | |
サンドボックスの追加オーバーヘッド | 低 | 高 | |
ルートファイルシステム | virtio-fs。 パフォーマンス:☆☆☆☆ |
| |
ボリューム | HostPath/EmptyDir | virtio-fs。 パフォーマンス:☆☆☆☆ | |
ブロックストレージ付きディスク | virtio-fs。 パフォーマンス:☆☆☆☆ | ||
NAS |
| ||
Object Storage Service (OSS) | virtio-fs。 パフォーマンス:☆☆☆☆ | ||
ネットワークプラグイン |
| Flannel | |
監視とアラート |
| サンドボックスコンテナを使用するポッドでは、ディスクとネットワーク状態の監視は使用できません。 | |
安定性 | ☆☆☆☆☆ | ☆☆ | |
サンドボックスコンテナの使用シナリオ
シナリオ 1:runC と比較して、サンドボックスコンテナ (runV) は、信頼できないアプリケーションにカーネルレベルの隔離を提供します
runC のセキュリティリスク
runC は、名前空間とコントロールグループ (cgroup) を使用してコンテナを隔離します。 これにより、コンテナはセキュリティリスクにさらされます。
ノード上のすべてのコンテナは、ホストカーネルを共有します。 カーネルに脆弱性がある場合、悪意のあるコードがホストにエスケープし、バックエンドネットワークに侵入する可能性があります。 悪意のあるコードの実行は、権限の昇格、機密データの侵害、システムサービスや他のアプリケーションの破壊を引き起こす可能性があります。
攻撃者は、アプリケーションの脆弱性を悪用して内部ネットワークに侵入する可能性もあります。
runC のコンテナのセキュリティリスクを軽減するために、次の対策を実施できます。
Seccomp:システムコールをフィルタリングします。
SElinux:コンテナプロセス、ファイル、およびユーザーの権限を制限します。
ケイパビリティ:コンテナプロセスのケイパビリティを制限します。
ルートレスモード:ユーザーがコンテナランタイムとコンテナをルートロールとして実行することを禁止します。
上記の対策は、runC のコンテナのセキュリティを強化し、悪意のあるコンテナによるホストカーネルへの攻撃を軽減できます。 ただし、コンテナのエスケープとホストカーネルの脆弱性は未解決のままです。
runV のセキュリティリスク
runV は、検証済みの軽量 VM サンドボックスを介してカーネルレベルの隔離を実装します。信頼されていないワークロードは、専用のゲスト OS カーネル上で動作します。ゲストカーネルが侵害された場合、攻撃対象領域は影響を受けたサンドボックス内に厳密に限定されるため、ホストカーネルと隣接するコンテナ化環境が完全に保護されます。
Terway の拡張 NetworkPolicy 機能と統合することで、このアーキテクチャはポッドネットワークアクセス制御の詳細な構成を可能にし、システム境界、データプレーン、ネットワークセグメントを含む多次元の隔離を実現します。
シナリオ 2: runC コンテナ環境における障害の増幅、リソースの競合、およびパフォーマンスの干渉の軽減
Kubernetes を使用すると、単一のノードに異なるコンテナを簡単にデプロイできます。 ただし、cgroup はリソースの競合に対処するために最適化されていません。 CPU 集約型アプリケーションや I/O 集約型アプリケーションなどのリソース集約型アプリケーションは、同じリソースを奪い合う可能性があります。 これにより、応答時間が大幅に変動し、全体的な応答時間が長くなります。 アプリケーションの例外または障害は、ホスティングノードに拡散し、クラスタの実行を中断する可能性があります。 たとえば、アプリケーションのメモリリークや頻繁なコアダンプはノードを過負荷にする可能性があり、コンテナの例外はホストカーネルのバグをトリガーしてシステム全体の障害を引き起こす可能性があります。 専用のゲスト OS カーネルとハイパーバイザーを通じて、サンドボックスコンテナは runC コンテナで一般的な問題を解決します。 問題には、障害の拡散、リソースの競合、パフォーマンスの干渉が含まれます。
シナリオ 3:マルチテナントサービス
複数の事業部門または部門で構成される企業のアプリケーションを隔離する必要がある場合があります。 たとえば、財務部門には高セキュリティアプリケーションが必要です。 ただし、セキュリティに依存しない他のアプリケーションには、高いセキュリティ要件はありません。 runC のコンテナは、信頼できないアプリケーションで発生する潜在的なリスクを排除できません。 このシナリオでは、次の対策を実施できます。
複数の独立したシングテナントクラスタをデプロイします。 たとえば、財務業務とセキュリティに依存しない他の業務を異なるクラスタにデプロイします。
マルチテナントクラスタをデプロイし、名前空間を使用して異なる事業部門のアプリケーションを分離します。 ノードのリソースは、単一の事業部門専用です。 このソリューションは、リソースクォータとネットワークポリシーとの調整のためのデータ隔離を提供して、マルチテナント隔離を実装します。 複数のシングテナントクラスタと比較して、このソリューションは管理プレーンを少なくすることに重点を置いているため、管理コストが削減されます。 ただし、このソリューションでは、一部のテナントのリソース使用率が低いためにノードで発生するリソースの浪費を防ぐことはできません。
サンドボックスコンテナを使用すると、サンドボックス化された仮想マシンを使用して信頼できないアプリケーションを隔離できます。 これにより、コンテナエスケープのリスクを防ぎます。 また、各ノードに異なるコンテナ化アプリケーションをデプロイすることもできます。これには、次の利点があります。
リソーススケジューリングが簡素化されます。
ノードはサービス専用ではなくなります。 これにより、ノードリソースの使用率が向上し、リソースフラグメントとクラスタリソースコストが削減されます。
サンドボックスコンテナは軽量仮想マシンを使用するため、runC のコンテナとほぼ同じパフォーマンスが得られます。
使用上の注意
クラスタバージョン:Kubernetes 1.16 以降を実行している マネージドクラスター と 専用クラスター でのみサポートされています。 クラスタをアップグレードするには、「ACK クラスタを手動でアップグレードする」をご参照ください。
オペレーティングシステム:カスタムイメージ は、サンドボックスコンテナで実行されているノードプールではサポートされていません。
v1.30 未満のクラスタ:Alibaba Cloud Linux 3 と Alibaba Cloud Linux 2 (EOL) のみ。
v1.30 以降のクラスタ:Alibaba Cloud Linux 3 のみ。
インスタンス仕様:ECS ベアメタルインスタンスファミリ のみ。
ネットワークプラグイン:
Flannel (完全にサポートされています)
Terway (制限付き):排他的 ENI モードと DataPath V2 モードはサポートされていません。