Windows コンテナーを使用したセキュリティ、ストレージ、ネットワーク
Windows Server 管理者であるあなたは、Contoso から Windows コンテナーにおけるセキュリティ、ストレージ、およびネットワークのニーズを評価するように依頼されました。 あなたは Windows Server 内のコンテナーと VM との間でそれらのニーズがどのように異なるかを理解することに特に関心があります。
Windows コンテナーのセキュリティ
Windows コンテナーは、物理マシンまたは仮想マシンで実行されている Windows インスタンスと同じベース上に構築されます。 ただし、一部のセキュリティの側面については、異なる方法で処理されることもあれば、Windows コンテナーに固有の方法で処理されることもあります。
共有コンポーネント: Windows コンテナーは、セキュリティを確保するためにホストのコンポーネントの一部を共有します。 これには、Windows ファイアウォール、Windows Defender (ウイルス対策)、その他のリソースのアクセス制限が含まれます。 コンテナー上でこれらのコンポーネントを自分で直接構成する必要はありません。必要な調整はコンテナーのホストによってコンテナーのワークロードに基づいて行われるからです。 たとえば、コンテナーが Web 要求を行った場合、コンテナー ホストは、コンテナーが Web にアクセスできるように、必要なトラフィックをファイアウォール経由で転送します。
分離モード。 Windows コンテナーはプロセスまたは Hyper-V による分離モードでデプロイでき、Hyper-V が最も安全な分離を提供します。 プロセスによる分離では、コンテナーはカーネル、ファイル システム、レジストリをホストと共有します。これにより、管理者特権 (管理者) プロセスがコンテナーのプロセスやサービスとやり取りできるようになります。 ご利用のアプリケーションに適切な分離モードを選択することが、適切なセキュリティ モデルを確保するために重要です。
Windows の更新プログラム。 サービス スタックが Windows コンテナーに存在しないため、Windows コンテナーは一般的な Windows インスタンスのように更新プログラムを受け取りません。 代わりに、使用可能な最新の基本コンテナー イメージを使用して Windows コンテナーを再構築する必要があります。 お客様は、そのために Azure パイプラインを利用できます。 Microsoft は、Patch Tuesday 周期の後、毎月すべての公式イメージの基本コンテナー イメージを更新します。
コンテナー ユーザー アカウント。 既定では、Windows コンテナー内のアプリケーションは、ContainerAdmin ユーザー アカウントの管理者特権で実行されます。 これは、コンテナー イメージ内に必要なコンポーネントをインストールして構成する場合に役立ちます。 ただし、管理者特権を必要としないアプリケーションを実行する場合は、ユーザー アカウントを ContainerUser に変更することを検討する必要があります。 特定のシナリオでは、適切な特権を持つ新しいアカウントを作成することもできます。
イメージとランタイムのスキャン。 コンテナーでは、リポジトリとコンテナー インスタンス上のイメージがセキュリティで保護されている必要があります。 Microsoft は、イメージのスキャンとランタイムのスキャンに Microsoft Defender for Containers を使用することをお勧めします。 Defender for Containers では、レジストリ スキャンによる脆弱性評価と脅威検出によるランタイム保護に対して Windows コンテナーがサポートされます。
Windows コンテナーのセキュリティの詳細については、「Windows コンテナーのセキュリティ保護」を参照してください。
Windows コンテナー用の永続ストレージ
既定で、Windows コンテナーには一時記憶域が使用されます。 すべてのコンテナー I/O は "スクラッチ領域" で行われます。 スクラッチ領域は、ファイル システムでの変更に対応するためにコンテナーに提供される一時ストレージです。 各コンテナーでは、独自のスクラッチを取得します。 ファイルの作成とファイルの書き込みはスクラッチ領域にキャプチャされ、ホストにエスケープされません。 コンテナー インスタンスが削除されると、スクラッチ領域で発生した変更はすべて破棄されます。 新しいコンテナー インスタンスが開始されると、インスタンスに新しいスクラッチ領域が用意されます。
コンテナー内にデータを保持できる機能が重要なアプリの場合や、コンテナーのビルド時に、コンテナー内に含まれていないファイルを表示する場合があります。 その目的では、永続的なストレージを Windows コンテナーに提供できます。
永続的なストレージは、Docker エンジンまたはコンテナー オーケストレーターを介して Windows コンテナーに提供できます。 開発およびテスト環境では、Docker エンジンを使用すると、バインド マウントまたは名前付きボリュームを使用して、ローカル ストレージを Windows コンテナーにすばやく簡単に割り当てることができます。 バインド マウントを使用すると、コンテナーがディレクトリをホストと共有できます。 この方法は、コンテナーを再起動したときに使用可能なローカル コンピューター上のファイルを保存する場所が必要な場合や、複数のコンテナーと共有する場合に有効です。 コンテナーを複数のコンピューターで実行して同じファイルにアクセスする場合は、代わりに名前付きボリュームまたは SMB マウントを使用する必要があります。
運用環境には、コンテナー オーケストレーターによって提供されるエンタープライズ グレードの永続的なストレージ オプションを利用できます。 たとえば、Kubernetes には、複数のホスト上で実行されている複数のコンテナーに永続的なストレージを提供するのに使用できる永続的なボリュームがネイティブで用意されています。 さらに、Kubernetes には、Azure Storage などのクラウド ストレージにボリュームをマップするために使用されるサードパーティ製のプラグインも用意されています。
Windows コンテナー用の永続的なストレージの詳細については、「コンテナー記憶域の概要」を参照してください。
Windows コンテナーのネットワーク
ネットワークに関して言えば、Windows コンテナーは仮想マシンと同様に機能します。 各コンテナーには、Hyper-V 仮想スイッチ (vSwitch) に接続されている仮想ネットワーク アダプター (vNIC) があります。 Windows では、Docker 経由で作成できる、nat、overlay、transparent、l2bridge、l2tunnel の 5 種類のネットワーク ドライバーまたはモードをサポートしています。 物理ネットワークのインフラストラクチャと単一または複数のホストのネットワーク要件に応じて、ニーズに最適なネットワーク ドライバーを選択する必要があります。
Docker Windows ネットワーク ドライバー | 標準的な使用 | コンテナー間 (単一ノード) | コンテナーと外部との間 (単一ノード + マルチノード) | コンテナー間 (マルチノード) |
---|---|---|---|---|
NAT (既定) | 開発者向け | 同一サブネット: Hyper-V 仮想スイッチを介したブリッジ接続 クロス サブネット: サポートされていません (NAT 内部プレフィックスが 1 つのみ) |
管理 vNIC (WinNAT にバインド) を経由してルーティング | 直接サポート外: ホストを経由してポートを公開する必要があります |
透明 | 開発者または小規模な開発向け | 同一サブネット: Hyper-V 仮想スイッチを介したブリッジ接続 クロス サブネット: コンテナー ホストを経由してルーティング |
(物理) ネットワーク アダプターへの直接アクセスでコンテナー ホストを経由してルーティング | (物理) ネットワーク アダプターへの直接アクセスでコンテナー ホストを経由してルーティング |
オーバーレイ | マルチノードに適しています。Docker Swarm に必要です。Kubernetes で使用できます | 同一サブネット: Hyper-V 仮想スイッチを介したブリッジ接続 クロス サブネット: ネットワーク トラフィックをカプセル化し、Mgmt vNIC を経由してルーティング |
直接サポートされていません - Windows Server 2016 の NAT ネットワークまたは Windows Server 2019 の VFP NAT ルールにアタッチされた 2 番目のコンテナー エンドポイントが必要です。 | 同一/クロス サブネット: VXLAN を使用してネットワーク トラフィックをカプセル化し、Mgmt vNIC を経由してルーティング |
L2Bridge | Kubernetes および Microsoft SDN に使用 | 同一サブネット: Hyper-V 仮想スイッチを介したブリッジ接続 クロス サブネット: コンテナーの MAC アドレスを入口と出口で書き換えてルーティング |
コンテナーの MAC アドレスを入口と出口で書き換え | 同一サブネット: ブリッジ接続 クロス サブネット: WSv1809 以降の Mgmt vNIC 経由でルーティングされます |
L2Tunnel | Azure のみ | 同一/クロス サブネット: ポリシーが適用される物理ホストの Hyper-V 仮想スイッチに折り返し | トラフィックは Azure の仮想ネットワーク ゲートウェイを経由する必要があります | 同一/クロス サブネット: ポリシーが適用される物理ホストの Hyper-V 仮想スイッチに折り返し |
上記の Docker オプションに加えて、Kubernetes にはさまざまな Container Network Interface (CNI) プラグインが用意されています。 これらの CNI を使用すると、ネットワーク構成、ネットワーク ポリシーなどに対してさまざまなモードを実装できます。
Windows コンテナー用のネットワークの詳細については、「Windows コンテナーのネットワーク」を参照してください。