テクノロジー用語に焦点を当てるのではなく、一般化された答えを提供し、「コンテナー」という用語を使用します。
コンテナーは実行されるはずのものだけを実行し、不明なものは信頼できないと仮定して、コンテナーの存続期間中のみコンテナーに常駐するものなので、テストするためのデータベース内のコードの変更は、VM(サンドボックス)またはコンテナー(Docker)で同じアプローチになります最大の違いは、アプリケーションの数秒でknリソース消費とVMをプロビジョニングする時間とコンテナー/ポッドを起動する時間です。
詳細:
Part1_アプリケーションの観点から
次の点からデータサイエンスの世界に来るとき、コンテナーは非常に重要です。
Clouderaと Cloudera Data Science Workbenchの組み合わせ 、AnacondaとAnaconda Enterpriseの両方がコンテナを使用しているため、ビジネスに迅速な結果をもたらし、開発からQA、そして最終的には本番環境へとモデルを簡単にデプロイできます。
なぜ重要な最後のステートメントですか?環境に変更を加えることなく、運用から運用までのコストをかけずに、開発から製品への移植性を実現します。
Part2_セキュリティの観点から
悪名高いセキュリティ上の利点の1つは、ホストOSのセキュリティがコンテナーから分離されていることです。つまり、パッチが個別に適用され、ホストOSにパッチを適用してもコンテナー化されたアプリケーションには影響しません(OSにパッチを適用するときに問題が発生し、そのOSのアプリとサービス(パス、ポート、サービスなど)?
- 例:
library
アプリ/コードに悪意のあるマルウェアが存在する場合、そのマルウェアはコンテナーの稼働中はそのコンテナーにのみ存在し、コンテナーは常にエンドポイントとして実行され、マルウェアを拡散するケースは見られませんでしたネットワークに。
- コンテナーノードの監視は堅牢であり、アプリケーションまたはノードの動作を監視するためにアドオンまたはサービスを配置でき、新しいノード/コンテナーのみを複製し、構成ファイルのみに基づいて複製します。
VMとコンテナの比較:コンテナは別の話ですが、OSをコンテナとは別に管理します(セキュリティが設定されている場合、コンテナは別のタスクです)。
Dockerセキュリティは、主要なセキュリティポイントの詳細情報を提供します。
Dockerの標準とコンプライアンスは、コンテナで利用可能なセキュリティのコンプライアンスと標準の完全なリストを提供します。
「巧妙に作成されたseccompプロファイル(予期しないシステムコールをブロックする)を持つDockerコンテナーは、ハイパーバイザーとほぼ同等のセキュリティを提供します。」
フォルダ共有。コンテナーを使用すると、共有マウントをセットアップしてフォルダーを共有できます。Docker/ kernelはコンテナーが使用するファイルアクセス許可を適用するため、ゲストシステムはその制限を回避できません。これは、データサイエンスアプリケーションとユーザーにとって非常に重要です。企業ではほとんどの場合、機密性の高い/制限されたデータが使用され、セキュリティまたは制限の複数のレイヤーが設定されているため、このセキュリティの問題を解決する1つのアプローチは、ADグループでVDIまたはVMを使用することです。データアクセスを制限/共有するための適切な場所にあり、リソースの維持と割り当てに問題とコストがかかります。
すべてのサービスとログが生成されたアプリケーションまたはOSをデバッグすることになると、コンテナーは今やNLPアプローチに勝って進化していると思います。セキュリティのナラティブを校正するための実験的自然言語処理(NLP)ユーティリティも含まれています。
ここでは、GoogleからJianing Guoを引用します:適切に保護および更新されたVMは、通常のアプリケーションとコンテナーワークロードの両方に適用されるプロセスレベルの分離を提供します。お客様は、Linuxセキュリティモジュールを使用してコンテナーの攻撃面をさらに制限できます。たとえば、オープンソースの本稼働グレードのコンテナーオーケストレーションシステムであるKubernetesは、AppArmor、Seccomp、およびSELinuxとのネイティブ統合をサポートし、コンテナーに公開されるシステムコールに制限を課します。Kubernetesは、コンテナの分離をさらにサポートする追加のツールも提供します。PodSecurityPolicyを使用すると、ノードレベルでワークロードが実行またはアクセスできる内容に制限を課すことができます。VMレベルの分離を必要とする特に機密性の高いワークロードの場合、
さらに、kubernetesクラスターには次の追加のセキュリティ機能があります。
- すべてのAPIトラフィックにトランスポート層セキュリティ(TLS)を使用する
- API認証
- API承認
- VMや専用のベアメタルと比較して、セキュリティの欠陥を簡単に修正し、アプリケーション/環境への影響を最小限に抑えます。
Part3_ コンテナを強化するためのCISベンチマーク:Docker & Kubernetes
。
コンテナーをより安全にする最初のステップは、コンテナー化されたワークロードの実行に使用する予定のホストマシンを準備することです。コンテナホストを保護し、インフラストラクチャセキュリティを守ることで、ベストプラクティスは、コンテナ化されたワークロードを実行するための強固で安全な基盤を構築します。
Dockerの更新、ソフトウェアの脆弱性を最新の状態に保ちます。
デフォルトのパスは(ドッカー関連ファイルのための特定の専用のディレクトリを持っているとコンテナを実行するために参照するだけの十分なスペースを割り当てる/var/lib/docker
が、OSレベルでの他の取り付け点と、モニターへの変更が使用しauditd
たりaide services
変更またはサイズ/不要なワークロードの実行のために、ログを保存必要に応じて設定します。
注:最良の点step 2
は、VMを使用する場合、データサイエンスプロジェクトの場所をさらに監視する必要があることです(異なる場所にあるライブラリ、複数のバージョンのパッケージ、Pythonの場所/パス、cron jobs or systemd
一部のプロセスが実行されることを確認するために実行、すべてのログ)ログなどですが、コンテナを使用すると、このすべてのジョブが単一のポイントで実行され、複数のパスではなくパスのみが監視されます。
システムへの侵入docker
を防ぐため、ユーザーを常にグループに入れて確認しますunauthorized elevated access
(Dockerは、コンテナーのアクセス権を制限せずに、Dockerホストとゲストコンテナー間のディレクトリの共有を許可します)。信頼されていないユーザーはdocker
グループから削除し、作成しないでください。機密ディレクトリのマッピングにより、ホストがコンテナボリュームに移ります。ここでは、インストールと特定のコンテナタスクに別のユーザーを使用するとします。「root
コンテナの実行にはPID
、このタスク専用に使用しないでください(アクセスは昇格されますが、タスクベースになります。クラスタには重力を使用します。インストール時には絶対に使用しません。ルートを使用)。
すべてのDockerデーモンアクティビティを監査します(コンテナー化された「world」でログのスペースをとるので、ログと必要な構成(ログを保存するためのローテーションと期間)を保持するために適切なスペースを持つ個別のパーティションを準備してください。
etc、varなどのすべてのDockerファイルとdocker.serviceを監査し、他に何が適用できるかを監査します。
すべてのコンテナー間通信を制限し、通信が必要な特定のコンテナーをリンクします(カスタムネットワークを作成し、そのカスタムネットワークと通信する必要のあるコンテナーのみに参加するのが最善です)。この強化アプローチにより、他のコンテナへの意図しない、望ましくない情報の開示が防止されます。
コンテナ化されたインフラストラクチャ内のすべてのアプリケーションを構成するか、少なくとも選択できるようにする必要がありますEncryp All Sensitive Information
(sensitive data
会社を含むほとんどの場合、データにアクセスするためにプラットフォームにログインするため、これはデータサイエンティストにとって非常に重要です。
転送中にすべての機密情報を暗号化するオプションがあります。
特定の承認されたのみを使用Ports, Protocols and Services
します。アプリ/プロジェクトを実行する場合、VMはよりオープンな表面を持ちます。コンテナーは、使用されるもののみを指定し、OSレベルで実行される保護またはモニター、これは最小化し"attack surface"
ます。
システムに保存されている機密情報は保存時に暗号化され、情報にアクセスするためにオペレーティングシステムに統合されていない二次認証メカニズムが必要です。
DOESを有効にすることを可能にするOperating System Anti-Exploitation Features/Deploy Anti-Exploit Technologies
:ようData Execution Prevention(DEP)
やAddress Space Layout Randomization (ASLR)
。
VMとコンテナの最も単純なセキュリティの違いは、プロジェクトを更新または実行する場合、VMまたはネットワーク全体で管理者特権でアクセスする必要はなく、定義されたユーザーとして実行するだけで、管理者特権でアクセスする場合は、コンテナの時間であり、ホスト全体で共有されていません(データサイエンスライブラリのインストール、更新、プロジェクトコードの実行など)。
Part4_データサイエンスのコンテナに関連するその他のリソース(Part1-3に組み込まれたリンクの上):
- Dockerのデータサイエンス
- Conda、Docker、Kubernetes:データサイエンスのクラウドネイティブな未来(Anacondaが主催)
- https://devblogs.nvidia.com/making-data-science-teams-productive-kubernetes-rapids/
- データサイエンティストがKubernetesを愛する理由
- データサイエンスのDockerの使用法を理解するための非常に優れた本:データサイエンスのDocker:構築するJupyter Notebook Serverの周りのスケーラブルで拡張可能なデータインフラストラクチャ。