ウェブサイト検索

コンテナセキュリティのベストプラクティス:Dockerのセキュリティ確保


コンテナ化に関して言えば、Dockerは簡単に最も広く採用されている技術となりました。業界の企業やユーザーがコスト削減、サービスのスケーリング、および数多くのアプリケーションの実装の効率化を目指す中で、見過ごしてはならない重要な側面はDockerのセキュリティです。Dockerは従来のデプロイメントよりもセキュリティが高いと一般的に評価されていますが、それは真実であるものの、私たちはこの強力なツールの悪用を防ぐために、潜在的なセキュリティの欠陥に注意を払う必要があります。

このチュートリアルでは、Linuxシステム上でのDockerに関する最も重要なセキュリティ対策のいくつかを説明します。これらは、システム管理者がDocker内のコンテナ化されたアプリケーションを潜在的な悪用や悪意のあるユーザーから安全に保つために遵守すべきベストプラクティスです。

このチュートリアルでは、あなたは学びます:

  • LinuxでDockerを安全に運用するためのトップ5のベストプラクティス

Dockerセキュリティのベストプラクティス

以下では、Docker環境とそのコンテナ化されたアプリケーションを安全に保つための最も重要な推奨事項を5つカウントダウンします。

Dockerは何に使われますか?
Dockerはコンテナ化の最大の名前ですが、同様の作業を行うことができる他のツールも多数あります。多くのLinux管理者は、アプリケーションをコンテナにパッケージ化し、任意のシステムに簡単にデプロイできるようにDockerを使い始めます。これは、開発者が自分の作業を共有する素晴らしい方法でもあり、Dockerを持っている誰でもアプリケーションを実行できます。

1. ルート権限の使用を避ける

Linux のユーザーはできる限り管理者権限の使用を最小限に抑えることを試みるべきです。これはすでに Linux システムの黄金のルールであり、root アカウントは通常のユーザーアカウントでは実行できない重要な作業やコマンドを実行するためにのみ使用されるべきです。

同じルールがDockerコンテナにも適用されます。開発者は時々、Docker化されたアプリケーションに必要以上の権限を怠惰または無造作に付与することがありますが、どの権限が本当に必要かを決定し、それに応じて委譲する時間をかけるべきです。このような見落としは、ユーザーがアプリケーションのコントロールを持つことができると、実質的に環境に対して自由に行動できることを意味し、深刻な結果をもたらす可能性があります。

この落とし穴を回避するためには、コンテナをルートとして実行しないことを確認し(Dockerfile内でUSERを確認する)、--id 0や--privilegedといったオプションでコンテナを実行することを避ける必要があります。また、ほとんどの状況でDocker自体をルートとして実行しないことも避けることができますが、これは上記のポイントほど重要な予防策ではありません。

2. 定期的に更新する - 注意して行う

Dockerイメージの更新は通常良いことです。新しい機能やセキュリティパッチなどが導入されます。そのため、定期的に更新を取得し、すべてのDockerイメージを最新の状態に保つことを一般的に推奨します。しかし、稼働率が非常に重要なセンシティブな環境では、これらの変更を本番環境に適用する前に事前に準備するための追加の措置を講じることができます。

アップデートは一般的に良いものですが、壊れた変更やまだ問題が解決されていない不安定な機能を導入することもあります。多くのDockerコンテナを使用し、稼働時間を確保するために特別な注意が必要な環境では、Kubernetesのような技術を利用することで、徐々にアップデートを展開し、エラーが発生した場合にアップデートを中止してロールバックするためにアプリケーションを監視することができます。

参照: KubernetesとDockerの違いは何ですか?

3. 公式画像を使用する

可能な限り、Docker Hubでダウンロード用に提供されている公式のイメージを使用することをお勧めします。これらのイメージは定期的に更新され、Dockerコミュニティの開発者によって運用されているため、一般的に他のウェブサイトの雑多なユーザーによって保守されているイメージよりも信頼性が高く、より長持ちします。

例えば、NGINXやUbuntuのような一般的なアプリケーションは、Docker Hubに公式イメージが利用可能です。これらを使用するのは非常に簡単で、この機能はデフォルトでDockerに組み込まれています。


Pull an official nginx image from Docker Hub:
docker pull nginx:latest

上記に示した同じコマンドも、画像を更新するために使用できます。

4. コンテナ機能の制限

この推奨は、最初の推奨と密接に関連しています。それは、root権限の使用を避けることです。同様に、できるだけDockerコンテナの機能を制限する必要があります。コンテナは、一般的に、職務を正しく遂行するために必要な最小限の権限のみで実行されるべきです。Dockerアプリケーションは通常非常に特定の役割を持っているため、私たちは割り当てる機能について非常に正確に決定できます。

機能を制限する一つの方法は、--internal フラグを使用することです。これにより、Dockerコンテナが内部ネットワークの外にアクセスすることができなくなりますが、これはしばしば委任する必要のない権限です。したがって、Dockerコンテナ同士はまだ(正しく設定されていれば)通信できますが、ホストシステムの外部ネットワークにはアクセスできません。プロキシを介してアクセスするように設定されたDockerアプリケーションでは、--internal フラグは常に使用することができるものです。

--cap-drop=ALLオプションは、Linuxの権限を最低限に減少させるもので、ほとんどのアプリケーションには必要ありません。このオプションを、ルート権限なしで特定のポートにサービスをバインドするための--cap-add=NET_BIND_SERVICEのような他のオプションと組み合わせることができます。

5. Docker Bench Securityによるセキュリティ監査

Dockerの開発者たちは、それが多くの側面を持つ複雑なアプリケーションであることを知っています。すべてのLinux管理者がDockerに熟知し、潜在的なセキュリティの欠陥をチェックするためにすべての設定を注意深く確認することを期待するのは無理があります。

それがDocker Bench Securityが存在する理由です。これは公式のDocker GitHubから来ており、あなたのDockerセットアップのセキュリティ監査を行います。基本的には、あなたの環境のセキュリティに対するさまざまなチェックを実行する一連のBashスクリプトを実行し、見つかった脅威とセットアップを強化するために取るべき対策を報告します。

リポジトリをクローンしてスクリプトを実行するだけで、それは非常に簡単です。


git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
sudo sh docker-bench-security.sh

締めくくりの考え

このチュートリアルでは、Linuxシステム上でDockerをセキュリティ強化するための5つのベストプラクティスのリストを説明しました。Dockerは比較的新しい技術ですが、その多くのベストプラクティスは、能力の制限、セキュリティ監査ツール、更新のインストール、信頼できるソフトウェアの使用など、従来のLinuxシステムで実施されているものと似ています。Dockerを使用すること自体に加えて、これらの推奨事項を採用することで、従来のデプロイメントよりも攻撃面を最小限に抑え、アプリケーションのセキュリティを維持するのに役立ちます。

関連記事: