はじめに
DockerコンテナとKubernetesは、最新のソフトウェア開発ライフサイクルの原動力です。 Dockerは、ホストマシンで直接作業するよりも安全なオプションですが、コンテナーでの作業中に多くの潜在的なセキュリティ問題が発生する可能性があります。
この記事には、攻撃やセキュリティ侵害を防ぐのに役立つ10のコンテナセキュリティのベストプラクティスが含まれています。
1。 Dockerとホストを定期的に更新する
ホストとDockerが最新であることを確認してください。セキュリティの脆弱性を防ぐために、最新のOSリリースおよびコンテナ化ソフトウェアを使用してください。各アップデートには、ホストとデータを保護するために不可欠な重要なセキュリティパッチが含まれています。
Dockerを最新の状態に保つことは、プラットフォーム自体に限定されません。実行中のコンテナーは自動的に更新されません。コンテナとそれらが基づいているイメージも更新する必要があります。
2。リソース割り当ての構成
リソースを過剰に消費する危険にさらされたコンテナを回避するには、DockerのメモリとCPUの使用制限を設定します。
リソースクォータを構成せずに、コンテナにホストのフルRAMおよびCPUリソースへのアクセスを許可します。これはデフォルト設定であるため、他のサービスを中断しないように、コンテナが使用できるリソースの量を制限することをお勧めします。
これにより、コンテナーがすべてのリソースを使い果たすのを防ぐだけでなく、Docker環境を効率的に保つのにも役立ちます。リソースクォータにより、コンテナは予想される速度で実行され、セキュリティが強化されます。
3。ルート以外のユーザーを使用する
Dockerを使用すると、コンテナーを特権モードで実行できます。一部のセキュリティプロトコルをバイパスする方が速い方法かもしれませんが、この方法の使用は常に制限する必要があります。
特権コンテナを実行することの危険性は、潜在的な悪意のある活動への扉を開くことです。特権Dockerユーザーには、rootと同じ特権があります。これは、ホスト上のカーネル機能やその他のデバイスにアクセスできることを意味します。悪意のあるユーザーがコンテナを介してホストシステムに侵入し、コンテナ上のすべてのものを危険にさらす可能性があります。
Dockerのデフォルト設定であるため、root以外のユーザーのみに固執するのは簡単です。デフォルトの構成を変更するには、 --privileged
を追加する必要があります docker run
へのフラグ 指図。ただし、これは重大な安全上の問題であるため、使用しないでください。
4。機能を制限する
コンテナには、制限されたLinux機能のセットがあります。たとえば、ユーザーがルートのような効率でコンテナを実行できるようにすることができますが、完全なルート権限はありません。
Dockerの制限された機能はデフォルトのセキュリティ設定であり、各コンテナで同じです。したがって、必要なものだけを含めるように機能を変更することをお勧めします。管理者は、 --cap-add
を使用してそれらを管理します および--cap-drop
オプション。
コンテナ機能を設定する最も安全な方法は、すべてを削除することです( --cap-drop=ALL
を使用) オプション)、必要なものを追加します。
すべての機能と略語のリストについては、Linuxのマニュアルページの機能のセクションを参照してください。
5。新しい特権を禁止する
上記の例に見られるように、Dockerでは、コンテナーの起動後にコンテナーの機能と特権を変更できます。特権昇格攻撃を防ぐために、コンテナ特権を定義することをお勧めします。
コンテナプロセスが新しい権限を取得できないようにするには、 --security-opt
を使用します 値がno-new-privileges:true
のフラグ 。 docker run
にフラグを追加する コマンドは、 --cap-add
を使用して設定したルールを上書きします および--cap-drop
オプション..
さらに、 setuidを削除または無効にすることができます およびsetgid 画像内のバイナリ。そうすることで、この機能がパストラバーサル/インジェクション、バッファオーバーラン、および特権昇格攻撃に使用されないようにします。
6。信頼できる画像を使用する
オンラインレジストリから画像を取得するときは、安全で信頼できるソースからの画像であることを確認してください。最も安全なオプションは、公式のDockerハブに固執することです。管理ポリシーがない公開サードパーティレジストリは避けてください。
オンラインライブラリを使用している場合は、常に画像内のコンテンツを確認してください。また、ホストシステムに何かをダウンロードする前に、画像スキャンツールを使用して脆弱性を検索してください。
Docker Hubをチェックして、目的のイメージがそこにあるかどうかを確認することをお勧めします。これは、100,000を超えるコンテナイメージを備えたDockerの世界最大のライブラリおよびコミュニティです。
7。画像とコンテナを軽量に保つ
最小限のベースイメージを使用し、コンテナーコンポーネントの数を減らすことで、Dockerコンテナーの攻撃対象領域を最小限に抑えます。画像サイズを小さく保つことで、セキュリティ違反を防ぎ、コンテナのパフォーマンスを高速化できます。
イメージサイズを小さくするためのヒントについては、Dockerイメージを小さく保つ方法を参照してください。
8。安全なレジストリ
Dockerレジストリは、コンテナのイメージを保存および提供するために使用されるコンテンツ配信システムです。 Dockerの公式オンラインレジストリを使用するか、ホストにプライベートレジストリを設定できます。
エンタープライズレベルのイメージストレージソリューションの場合は、 Docker Trusted Registry(DTR)を使用する必要があります 。ファイアウォールの背後にレジストリをインストールして、潜在的な侵害を防ぐことができます。
9。 Dockerデーモンソケットを公開しないでください
Dockerは、 /var/run/docker.sockと呼ばれるUNIXドメインソケットと通信します。 。これは、DockerAPIのメインのエントリポイントです。 Dockerデーモンソケットにアクセスできる人は誰でも、無制限のルートアクセス権を持っています。
ユーザーが/var/run/docker.sockに書き込むことを許可する または、ソケットをコンテナに公開することは、システムの他の部分にとって大きなセキュリティリスクです。そうすることで、基本的にルート権限が付与されます。
Dockerソケットをコンテナー内にマウントしても、コンテナー内の特権アクセスに制限されません。これにより、コンテナーはホストおよび他のすべてのコンテナーを完全に制御できます。したがって、これは推奨される方法ではありません。
10。 APIとネットワークアクティビティを監視する
APIとネットワークは、Dockerのセキュリティにおいて重要な役割を果たします。 Dockerコンテナーは、APIとネットワークを介して通信します。したがって、侵入を避けるために、アーキテクチャを安全に構成する必要があります。
セキュリティ管理者は最近、誤って構成されたDockerAPIを悪用する新しいタイプの攻撃を発見しました。ハッカーは、不適切に構成されたAPIとネットワークセキュリティを利用し、それを使用してイメージを展開し、ホストシステムで悪意のあるコンテナを実行します。
ネットワークとAPIを安全に設定するだけでなく、潜在的な異常を検出するためにアクティビティを監視する必要もあります。