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

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

オープンソースの詳細については、以下をご覧ください。

51CTO オープンソース基本ソフトウェアコミュニティ

​​https://ost..com​​

1. コンテナの構成

1. 特権コンテナの使用を禁止する

--privileged を使用してコンテナを起動すると、すべてのカーネル機能がコンテナに付与され、Capability の機能制限が上書きされます。この場合、コンテナはホスト層が実行できるほとんどの操作を実行できるため、システムのセキュリティ リスクが増大するため、禁止する必要があります。

 $ docker run -d - - 特権nginx

2. コンテナリソースの使用を制限する

デフォルトでは、ホスト上のコンテナはリソースに無制限にアクセスできます。このとき、コンテナが攻撃を受けたり、プログラムエラーが発生したりすると、過剰なリソース占有によりホストや他のコンテナの動作に影響を及ぼす可能性があります。

そのため、Cgroup の特性を通じてコン​​テナのリソース使用制限を設定することで、このような問題による影響を最小限に抑えることができます。

例 1: 使用できる CPU コアの最大数を 1 に制限します。

 $ docker run -d - - cpus 1 nginx

例 2: コンテナが特定の CPU を使用するように制限します。たとえば、ホストに 4 つの CPU がある場合、コンテナは最初の CPU のみを使用できます。次のように設定できます。

 $ docker run -d - -cpuset -cpus 0 nginx

例 3: コンテナの最大メモリ使用量を 512M に制限します。

 $ docker run -d -m 512 m nginx

3. コンテナネットワークを分離する

Docker はデフォルトでブリッジ ネットワークを使用し、仮想ブリッジを作成します。同じブリッジに接続されたコンテナは相互にアクセスできます。ネットワーク セキュリティを強化するには、デフォルトの docker0 ネットワークに依存せず、カスタム ネットワークを介してコンテナー ネットワークを分割することをお勧めします。これにより、ホスト マシン内のコンテナー間のアクセス分離を確保できます。

さらに、ネットワークのセグメンテーションは可能な限りホスト レベルで実行する必要があります。異なるホストでは、セキュリティ要件が異なるコンテナを実行する必要があります。たとえば、開発環境、テスト環境、本番環境のホストは互いに分離する必要があります。

4. ホストシステムディレクトリをマウントしない

/boot、/dev、/etc、/proc、/sys、/usr など、ホスト上のシステム関連ディレクトリは、コンテナーへのマウントを明示的に禁止する必要があります。特に読み取り/書き込みモードでは、この状況によりコンテナがホスト システムを変更できるようになるため、ホスト システムに重大なセキュリティ リスクが生じます。

残念ながら、現在、このような動作を制限するための Docker レベルの適切な技術的ソリューションは存在せず、監査などの手段を通じてのみ検出できます。

5. コンテナのルートファイルシステムを読み取り専用としてマウントする

コンテナのルート ファイル システムを読み取り専用モードでマウントします。このモードでは、ルート ファイル システムへの変更が回避されるため、コンテナーのセキュリティが確保されます。もちろん、読み取り専用モードも不便を伴い、出力コンテンツを永続ストレージに書き込むには、マウントされたストレージと組み合わせて使用​​する必要があります。

読み取り専用を設定する方法は非常に簡単です。次のように、コンテナを起動するときに --read only オプションを追加します。

 $ docker run -it - - 読み取り専用nginx sh  
# echo 'test' > /root/1.txt
sh : 2 : / root / 1 作成できません。txt : 読み取り専用ファイルシステム

6. ホストのネットワークスタックの共有を禁止する

コンテナを起動するときに、--network host を使用して、コンテナがホストとネットワーク スタックを共有できるようにします。このとき、コンテナはホストの IP とその他のネットワーク構成を使用し、コンテナのポートをホストに自動的にマップします。

この方法は一定の利便性をもたらしますが、コンテナにリスクももたらします。このモードでは、ホストのネットワーク スタックをコンテナー内で操作できるため、推奨されません。

 $ docker run -d - - ネットワークホストnginx

2. 画像管理

1. 画像に機密情報を保存しない

コンテナ内のプログラムの通常の操作中は、通常、データベース アカウントのパスワード、アクセス トークンなどの機密情報が必要になります。このような機密情報はイメージに保存しないでください。そうしないと、機密情報の漏洩のリスクが発生します。

構成センターなどのソリューションを使用して、この情報を管理のために外部の場所に移動できます。

2. 最小化されたベース画像を選択する

Dockerfile を使用してアプリケーション イメージを構築する場合は、ベース イメージとしてイメージを選択する必要があります。この画像を選択するときは、大きくて包括的な機能を持つ画像の使用を避け、最小限で満足のいくモードを採用する必要があります。

これには 2 つの利点があります:

セキュリティの脆弱性を最小限に抑えます。

リソースの使用量を削減します。

3. 画像をスキャンして検証する

2019年、セキュリティ企業Snykは、最も人気のある10個のDockerイメージのそれぞれに少なくとも30件のセキュリティ脆弱性があることを発見しました。これだけでも、画像のセキュリティについて注意を払うには十分です。

Docker イメージの脆弱性スキャンを実行することで、開発者や運用担当者はイメージのセキュリティ状態を把握し、見つかった問題を修正するための対策を講じることができ、より安全な展開を実現できます。

現在、イメージスキャンをサポートするオープンソースソリューションには、Docker scan、Clair、Anchore などがあります。Docker Scan は最新の Docker バージョンに統合されており、すぐに使用できます。

4. マルチステージビルドを使用する

旧バージョンでは、イメージをビルドする操作は通常、Dockerfile プロセスで完了します。このモードでビルドされたイメージには、ソース コード ファイル、ダウンロードされた依存パッケージ、パッケージ化によって生成された一時ファイルなど、多くの冗長ファイルが含まれます。

この問題を解決するために、Docker はバージョン 17.05 でマルチステージ ビルドの使用をサポートするようになりました。このモードを使用してイメージを構築する場合、最初の段階でコードのパッケージ化やその他のワークフローを完了し、2 番目の段階で適切な実行イメージを選択し、前の段階で生成されたパッケージをイメージにコピーして構成および実行することができます。

多段階構造は、速度が速く、画像サイズが小さく、セキュリティが高いという特徴があります。イメージを構築するには、この方法を使用することをお勧めします。

例:

 #フェーズ1: コンパイルとパッケージ化
Maven から: 3.5.0 - jdk - 8 - alpine AS ビルダー
./pom.xml pom.xml を追加します
./src src / ​ を追加します
mvn clean package を実行します。
# フェーズ2: 構成と操作
openjdk から: 8 - jre - alpine
COPY - - from = builder target / my - app - 1.0 - SNAPSHOTjar my - app - 1.0 - SNAPSHOT
エクスポーズ8080
CMD [ "java""-jar""my-app-1.0-SNAPSHOT.jar" ]

III.管理基準

1. コンテナホストへのユーザーアクセスを制限する

コンテナを実行するホストは、マシンのセキュリティを物理的に確保できる、IDC コンピュータ ルームなどの安全で信頼性の高い環境に保管する必要があります。同時に、システムのログイン権限を適切に管理し、信頼できるユーザーのみがログインしてホストにアクセスできるようにする必要があります。これにより、人為的影響による障害を減らすことができます。

2. Dockerのバージョンを定期的に更新する

古いバージョンは、発見された脆弱性によりセキュリティ攻撃に対して脆弱です。新しいバージョンでは通常、古いバージョンのバグやプログラム エラーが修正されるため、コンテナのセキュリティがより確実に確保されます。コンテナ管理者は、Docker のバージョンを定期的に更新し、新しいバージョンを維持する必要があります。

3. コンテナ監視の改善

監視を合理的かつ効果的に活用する方法は、コンテナ管理者にとって重要なタスクです。完全な監視システムは、リソース負荷の高騰やコンテナの終了など、コンテナの問題をタイムリーに検出するのに役立ちます。

コンテナ監視に関しては、現在一般的に使用されているソリューションには、監視、表示、アラームなどの一連の機能を統合し、コンテナの問題を効果的に検出できる cAdvisor + Prometheus + Grafana + Alertmanager の組み合わせが含まれます。

オープンソースの詳細については、以下をご覧ください。

51CTO オープンソース基本ソフトウェアコミュニティ

​​https://ost..com​​.

<<:  アマゾン ウェブ サービスは、新たな 4 つの近代化を背景に、自動車業界のイノベーションを促進し続けています。

>>:  企業向けクラウドホスティングの5つのメリット

推薦する

企業はクラウドへの早送りボタンを押し、デジタルトランスフォーメーションがクラウドコンピューティングの急速な発展を推進します。

オンライン教育、リモートワーク、クラウド医療、クラウド授業...クラウドコンピューティングの応用シナ...

11 年間のホスト型 SaaS から学んだ教訓!

著者 |アレックス・ギクレスク企画 |趙雲Tanda(従業員管理ソフトウェア)はまもなく11周年を迎...

dediserve-$5/kvm/香港/シンガポール/16 コンピュータ ルーム/1g メモリ/20g SSD/1T トラフィック/500M ポート

dediserve.com は、当初の 9 室から現在の 16 室まで、いくつかの新しいコンピュータ...

インスタント メッセージング ソフトウェアの「10 年間の進化」

【ゼロからのスタート】 2003 年には、QQ や NetEase Bubble などのインスタント...

クラウド コンピューティングを活用して IT 業界で環境の持続可能性を実現するにはどうすればよいでしょうか?

クラウド コンピューティング サービスは、主にエネルギー効率の向上と持続可能な慣行の促進を通じて、I...

VLANを写真と文章で詳しく解説しているので、一目でVLANがわかります

1. VLAN が必要な理由は何ですか? 1.1. VLANとは何ですか? VLAN (Virtua...

他の人が5時間かけて作るよりも強力な外部リンクを1時間で作る方法を教えます

ウェブマスターは、コンテンツが王様であり、外部リンクが皇帝であることは皆知っているかもしれませんが、...

#推奨# UK2 - 年間支払い 12 ポンド/無料の com ドメイン名/無料の SSL/cPanel パネル/10 の Web サイトを構築

UK2 グループの子会社である UK2.NET (1998 年から運営) には、年間支払いがわずか ...

Taiji Assistantは、脱獄バンドルの理由を説明する公開書簡を発行した。

昨夜、evad3rs 脱獄チームは、すべての iPhone、iPod touch、iPad、iPad...

2022年「ナイトエコノミー」インサイトレポート

都市人口の増加とデジタル化の継続的な発展、そして政府による「ナイトエコノミー」を奨励する政策の継続的...

gigsgigscloud: 希少な 200Mbps の日本 CN2 VPS の簡単なレビュー。あなたをリッチな世界へお連れします!

gigsgigscloudの日本データセンターは数日前からオンラインになっています。主にKVMシリー...

Rabbit High Defense CDN: (無料版あり) DDoS に対する高い防御力、CC 防御、申請不要、あらゆる業界へのアクセス、香港 CN2 を含む大規模なノード

「湖北ラビットクラウドテクノロジー株式会社」は、主にエンタープライズレベルのクラウドプラットフォーム...

SEOにおけるコンテンツマーケティングの理論的な利点と欠点

厳密に言えば、「コンテンツ マーケティング: SEO 戦略の選択」の記事で説明されているコンテンツ ...

2019 年に堅実なクラウド移行戦略を構築する方法

組織のオンプレミス IT インフラストラクチャをクラウドに移行することは、多くの企業が行う最も重要な...

PPC 広告が SEO にどのように役立つかについての簡単な説明

中小企業にとっては、毎月数万元をPPC広告に投資する余裕はありません。しかし、検索エンジンマーケティ...