はじめに
Docker はアプリケーションをコンテナ化するための人気のある選択肢となっていますが、これらのコンテナのセキュリティと制御を管理することは重要です。このチュートリアルでは、Docker でのケイパビリティ境界セット (capability bounding sets) を理解し、設定するプロセスを案内します。これにより、Docker ベースのアプリケーションのセキュリティと制御を強化することができます。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
Docker はアプリケーションをコンテナ化するための人気のある選択肢となっていますが、これらのコンテナのセキュリティと制御を管理することは重要です。このチュートリアルでは、Docker でのケイパビリティ境界セット (capability bounding sets) を理解し、設定するプロセスを案内します。これにより、Docker ベースのアプリケーションのセキュリティと制御を強化することができます。
Docker のケイパビリティ (capabilities) は、コンテナに特定の特権を付与したり制限したりするためのセキュリティ機能です。ケイパビリティは Linux カーネルの機能で、ルートユーザーの従来の全有または全無のアプローチではなく、プロセスに付与される権限をより細かく制御することができます。
Linux カーネルでは、30 以上の異なるケイパビリティを付与または制限することができます。いくつかの例を挙げると、以下のようなものがあります。
CAP_NET_ADMIN
: コンテナがネットワークインターフェイスの設定、ファイアウォールの設定、ルーティングテーブルの管理など、ネットワーク関連の操作を実行できるようにします。CAP_SYS_ADMIN
: ファイルシステムのマウント、カーネルモジュールのロード、その他の低レベルのシステム操作を含む、幅広いシステム管理特権を付与します。CAP_CHOWN
: コンテナがファイルやディレクトリの所有者を変更できるようにします。デフォルトでは、Docker コンテナには制限されたケイパビリティのセットが付与されており、これにより攻撃対象範囲と潜在的なセキュリティリスクを減らすことができます。ただし、場合によっては、特定の機能を有効にするためにコンテナに追加のケイパビリティを付与する必要があることがあります。
表 1: 一般的な Docker ケイパビリティ
ケイパビリティ | 説明 |
---|---|
CAP_NET_ADMIN |
コンテナがネットワーク関連の操作を実行できるようにします。 |
CAP_SYS_ADMIN |
幅広いシステム管理特権を付与します。 |
CAP_CHOWN |
コンテナがファイルやディレクトリの所有者を変更できるようにします。 |
Docker のケイパビリティを理解することは、コンテナのセキュリティを確保し、システムリソースへの適切なアクセスレベルを保証するために重要です。
Docker コンテナのケイパビリティ境界セットを設定するには、コンテナを起動する際に --cap-add
と --cap-drop
オプションを使用できます。
--cap-add
オプションを使用すると、コンテナの境界セットに 1 つ以上のケイパビリティを追加できます。一方、--cap-drop
オプションを使用すると、コンテナの境界セットから 1 つ以上のケイパビリティを削除できます。
以下は、CAP_NET_ADMIN
ケイパビリティを追加し、CAP_SYS_ADMIN
ケイパビリティを削除してコンテナを起動する例です。
docker run --cap-add=NET_ADMIN --cap-drop=SYS_ADMIN -it ubuntu:22.04 /bin/bash
この例では、コンテナには CAP_NET_ADMIN
ケイパビリティが付与され、ネットワーク関連の操作を実行できますが、幅広いシステム管理特権を付与する CAP_SYS_ADMIN
ケイパビリティは削除されます。
また、docker inspect
コマンドを使用して、実行中のコンテナの現在のケイパビリティ境界セットを表示することもできます。
docker inspect <container_id> | grep "CapBnd"
これにより、指定したコンテナの現在のケイパビリティ境界セットが表示されます。
表 1: 一般的な Docker ケイパビリティ境界セットオプション
オプション | 説明 |
---|---|
--cap-add=<capability> |
指定したケイパビリティをコンテナの境界セットに追加します。 |
--cap-drop=<capability> |
指定したケイパビリティをコンテナの境界セットから削除します。 |
Docker コンテナのケイパビリティ境界セットを設定することは、アプリケーションのセキュリティを確保し、攻撃対象範囲を減らす上で重要なステップです。
Docker のケイパビリティ境界セット (capability bounding sets) は、コンテナのセキュリティと分離性を強化するために、さまざまな実用的なシナリオで使用できます。
コンテナ内で信頼できない、または潜在的に悪意のあるアプリケーションを実行する場合、ケイパビリティ境界セットを使用して、コンテナに付与される特権を制限することができます。たとえば、CAP_SYS_ADMIN
ケイパビリティを削除して、コンテナが機密性の高いシステム管理タスクを実行できないようにすることができます。
docker run --cap-drop=SYS_ADMIN -it untrusted-app /bin/bash
コンテナがデータベースや Web サーバーなどの機密サービスを実行している場合、ケイパビリティ境界セットを使用して、コンテナが必要なシステムリソースにのみアクセスできるように制限することができます。これにより、攻撃対象範囲を減らし、セキュリティ侵害の潜在的な影響を最小限に抑えることができます。
docker run --cap-drop=CHOWN --cap-drop=SETUID --cap-drop=SETGID -it secure-service /bin/bash
医療や金融などの一部の業界では、アプリケーションに付与される特権に関する特定のコンプライアンスまたは規制要件がある場合があります。ケイパビリティ境界セットを使用して、Docker コンテナがこれらの要件を満たし、必要なセキュリティ標準に準拠するようにすることができます。
表 1: ケイパビリティ境界セットの設定例
ユースケース | 削除するケイパビリティ |
---|---|
信頼できないアプリケーション | CAP_SYS_ADMIN , CAP_SETUID , CAP_SETGID |
機密サービス | CAP_CHOWN , CAP_SETUID , CAP_SETGID |
コンプライアンス要件 | CAP_SYS_ADMIN , CAP_MKNOD , CAP_AUDIT_WRITE |
Docker コンテナのケイパビリティ境界セットを理解し、設定することで、アプリケーションのセキュリティと分離性を強化し、コンプライアンス要件を満たし、潜在的な攻撃対象範囲を減らすことができます。
このチュートリアルの終わりまでに、Docker のケイパビリティ (capabilities) とケイパビリティ境界セット (capability bounding sets) の設定方法について包括的な理解を得ることができます。また、これらのケイパビリティを管理するための実用的なアプリケーションを学び、Docker ベースのアプリケーションのセキュリティと制御を向上させることができます。