Anstatt sich auf den Technologiebegriff zu konzentrieren, wird eine allgemeine Antwort gegeben und der Begriff „Container“ verwendet.
Container führen nur das aus, was sie ausführen sollen, vorausgesetzt, etwas Unbekanntes ist nicht vertrauenswürdig. Was sich also nur für die Lebensdauer des Containers im Container befindet, ist die gleiche Änderung in einem zu testenden Code in der Datenbank in VMs (Sandboxing) oder Containern (Docker). Der größte Unterschied besteht im Ressourcenverbrauch und in der Zeit für die Bereitstellung von VMs gegenüber dem Hochfahren von Containern / Pods in wenigen Sekunden für die Anwendung.
Mehr Details:
Teil1_ Aus Sicht der Anwendung
Container sind sehr wichtig, wenn es aus folgenden Gründen in die Welt der Datenwissenschaft geht:
- Minimierung widersprüchlicher Bibliotheksversionen für verschiedene Entwicklungsprojekte (jedes Projekt verfügt über einen eigenen Container / Pod zum Ausführen).
- Konsistenz zwischen Umgebungen und Entwicklern anhand bestimmter Entwurfskriterien.
Rapid Prototyping mit Edge Node On Demand.
Vermeiden Sie die Notwendigkeit, nach einer Aktualisierung oder einem Fehler alles auf neuer Hardware neu zu installieren.
- Portabilität Ihrer Computerumgebung, Entwicklung auf Ihrem Computer. Wenn Sie mehr Ressourcen wie CPU, RAM oder GPU benötigen, können Sie Ihre Umgebung auf Cloud, leistungsstarke Cluster, leistungsstarke Computer und Containergruppen portieren, die mit Kubernetes oder Dockerized-Clustern namens Swarm orchestriert werden können .
- Maximieren Sie die Klarheit der Zusammenarbeit zwischen Gruppen. Konsistente Bibliotheken, Ergebnismengen usw.
- Erweiterung der lokalen Autonomie / Agilität auf Cloud-Skalierung und Reichweite.
- Projektarbeitsbereiche mit Docker-Containern zur Steuerung der Umgebungskonfiguration. Sie können neue Pakete installieren oder Befehlszeilenskripte direkt vom integrierten Terminal ausführen.
- Die von Containern verwendeten Ressourcen sind im Vergleich zu VM oder Bare Metal sehr gering. Sie können mehrere Container in VM oder Bare Metal ausführen, wodurch die Lizenzkosten für das Betriebssystem erheblich gesenkt werden und Projekte / Apps basierend auf den benötigten Ressourcen und nicht den vollständigen Ressourcen skaliert werden des Hosts (hier zu beachten: Sie werden mehrere Apps / Modelle auf einem Computer ausführen, wenn Sie Container verwenden, die ohne Container verglichen werden. Sie verwenden die vollständigen Maschinenressourcen für eine einzelne App / ein einzelnes Modell. Dies ist eine Verschwendung von Ressourcen. In einer Clusterumgebung können Sie dies tun Starten Sie mehrere Pods / Container (Apps / Modelle im gesamten Cluster und ohne Pod-Kosten im Vergleich zu VMs, die Sie für das Betriebssystem jedes Hosts bezahlen, und führen Sie alle Ressourcen für diese Aufgabe aus).
- Es ist einfach, ein neues Image mit neuen Paketen zu installieren und mit allen zu teilen, um mit virtuellen Umgebungen in VMs umzugehen und Konflikte zwischen Paketen und vielem mehr zu haben (ich würde gerne sehen, dass virtuelle Umgebungen vom herkömmlichen Ansatz auf Container umgestellt werden, das ist gut Verbesserung und wird Datenwissenschaftlern sehr helfen, die Konfiguration jedes Projekts bei allen Konflikten einzeln zu umgehen und zu aktivieren / deaktivieren und dann bei der Produktion nach Anforderungen zu suchen, wenn Sie mit Containern nur eine Konfigurationsdatei benötigen. Dies ist meine Sichtweise was ich täglich in der Data Science-Welt sehe).
- Mit der infrastrukturunabhängigen Plattform können Datenwissenschaftler die Analyseanwendungen auf der für die Anwendungen am besten optimierten Infrastruktur ausführen
- Ermöglichen Sie Datenwissenschaftlern, Modelle mit den Tools und Paketen zu erstellen, die für die Forschung am besten geeignet sind, ohne sich um Anwendungs- und Umgebungskonflikte sorgen zu müssen.
- Wichtigste Reproduzierbarkeit der Forschung: Die von Containern bereitgestellte Skalierung lässt sich problemlos mit Containern skalieren und ist in allen Umgebungen identisch. Das Host-Betriebssystem ist Ihnen egal, wodurch die Wiederholbarkeit von Analyse und Forschung mit unveränderlichen Containern sichergestellt und Probleme mit verschiedenen Umgebungen beseitigt werden
- Sichere Zusammenarbeit: Die integrierte Sicherheit in der Plattform und im Lebenszyklus ermöglicht die Zusammenarbeit ohne das Risiko von Manipulationen und Datenintegrität (weitere Einzelheiten in Teil 2 und 3).
Hier kommt Cloudera mit Cloudera Data Science Workbench und Anaconda mit Anaconda Enterprise ins Spiel. Beide verwenden Container, um schnelle Ergebnisse für das Unternehmen zu erzielen und die Modelle von Entwickler über Qualitätssicherung bis hin zur Produktion einfach bereitzustellen.
Warum ist wichtige letzte Aussage wichtig? ist die Portabilität von dev zu prod ohne Änderungen an den Umgebungen und ohne Kosten für die Operationalisierung von DevOps.
Teil2_ Aus Sicherheitsgründen
Ein berüchtigter Sicherheitsvorteil besteht darin, dass die Sicherheit des Host-Betriebssystems vom Container getrennt ist. Dies bedeutet, dass das Patchen getrennt erfolgt. Das Patchen des Host-Betriebssystems hat keine Auswirkungen auf Ihre containerisierte Anwendung (wie oft haben wir das Problem, wenn wir das Betriebssystem patchen und das App und Dienst in diesem Betriebssystem (Pfade, Ports, Dienste usw.)?
- Beispiel: Wenn
library
Ihre App / Ihr Code bösartig ist , befindet sich diese Malware nur für die Zeit, in der der Container aktiv ist, in diesem Container. Container werden die ganze Zeit als Endpunkt ausgeführt und es wurde kein Fall festgestellt, der die Malware verbreitet ins Netzwerk.
- Das Überwachen eines Containerknotens ist robust und Sie können Add-Ons oder Dienste hinzufügen, um das Verhalten von Anwendungen oder Knoten zu überwachen. Sie replizieren nur neue Knoten / Container und basieren nur auf der Konfigurationsdatei.
Vergleichen von VMs mit Containern: Bei Containern ist das Betriebssystem von Containern getrennt (Container sind eine separate Aufgabe, wenn Sicherheit vorhanden ist).
Die Docker-Sicherheit bietet detaillierte Informationen zu wichtigen Sicherheitspunkten.
Docker-Standards und -Konformitäten bieten eine vollständige Liste der für Container verfügbaren Sicherheitskonformitäten und -standards.
"Docker-Container mit einem gut gestalteten Seccomp-Profil (das unerwartete Systemaufrufe blockiert) bieten in etwa die gleiche Sicherheit wie ein Hypervisor."
Ordnerfreigabe . Mit Containern können Sie einen Ordner freigeben, indem Sie einen freigegebenen Mount einrichten. Da der Docker / Kernel Dateiberechtigungen erzwingt, die von Containern verwendet werden, kann das Gastsystem diese Einschränkungen nicht umgehen. Dies ist für Data Science-Anwendungen und -Benutzer sehr wichtig, da in Unternehmen die meiste Zeit sensible / eingeschränkte Daten verwendet werden und mehrere Sicherheitsebenen oder Einschränkungen vorhanden sind. Ein Ansatz zur Lösung dieses Sicherheitsproblems ist die Verwendung von VDI oder VMs mit AD-Gruppe vorhanden, um den Datenzugriff einzuschränken / gemeinsam zu nutzen, und es wird problematisch und kostspielig, Ressourcen zu warten und zuzuweisen.
Wann kommt es zum Debuggen von Anwendungen oder Betriebssystemen mit allen generierten Diensten und Protokollen? Ich denke, Container gewinnen und entwickeln sich jetzt zum NLP-Ansatz: Ein experimentelles NLP-Dienstprogramm (Natural Language Processing) zum Korrekturlesen von Sicherheitserzählungen ist ebenfalls enthalten.
Hier zitiere ich Jianing Guo von Google: Eine ordnungsgemäß gesicherte und aktualisierte VM bietet eine Isolation auf Prozessebene, die sowohl für reguläre Anwendungen als auch für Container-Workloads gilt. Kunden können Linux-Sicherheitsmodule verwenden, um die Angriffsfläche eines Containers weiter einzuschränken. Beispielsweise unterstützt Kubernetes, ein Open-Source-Container-Orchestrierungssystem für die Produktion, die native Integration mit AppArmor, Seccomp und SELinux, um Syscalls, die Containern ausgesetzt sind, Einschränkungen aufzuerlegen. Kubernetes bietet außerdem zusätzliche Tools zur weiteren Unterstützung der Containerisolierung. Mit PodSecurityPolicy können Kunden die Arbeitslast oder den Zugriff auf Knotenebene einschränken. Für besonders sensible Workloads, die eine Isolierung auf VM-Ebene erfordern,
Darüber hinaus verfügt der kubernetes- Cluster über folgende zusätzliche Sicherheitsfunktionen:
- Verwenden Sie TLS (Transport Layer Security) für den gesamten API-Verkehr
- API-Authentifizierung
- API-Autorisierung
- Einfache Behebung von Sicherheitslücken und minimale Auswirkungen auf Anwendung / Umgebung im Vergleich zu VMs oder dediziertem Bare-Metal.
Teil3_ CIS-Benchmarks zum Härten von Behältern : Docker & Kubernetes
.
Der erste Schritt, um die Sicherheit von Containern zu erhöhen, besteht darin, den Hostcomputer vorzubereiten, der für die Ausführung von Workloads mit Containweized vorgesehen ist. Durch die Sicherung des Container-Hosts und die Befolgung der Best Practices für die Infrastruktursicherheit wird eine solide und sichere Grundlage für die Ausführung von Container-Workloads geschaffen.
Bleiben Sie über Docker-Updates und Schwachstellen in der Software auf dem Laufenden.
Verfügen Sie über ein bestimmtes dediziertes Verzeichnis für Docker-bezogene Dateien und weisen Sie gerade genug Speicherplatz zu, damit Container ausgeführt werden können (Standardpfad ist /var/lib/docker
jedoch, zu einem anderen Einhängepunkt zu wechseln und auf Betriebssystemebene zu überwachen, indem auditd
oder aide services
für Änderungen oder Größe / unerwünschte Workload-Ausführung die Protokolle aufbewahrt werden und entsprechend den Anforderungen konfigurieren.
Hinweis: Das Beste daran step 2
ist, dass Sie mit VMs viel mehr Speicherorte für Ihr Data Science-Projekt überwachen müssen (Bibliotheken an unterschiedlichen Speicherorten, mehrere Versionen von Paketen, Speicherorte / Pfade für sogar Python, ausführen, cron jobs or systemd
um sicherzustellen, dass einige Prozesse ausgeführt werden, alle protokollieren Protokolle usw., aber mit Containern ist ein einziger Punkt, an dem alle diese Jobs ausgeführt und nur ein Pfad anstelle mehrerer Pfade überwacht werden können.
Überprüfen Sie die Zeit, in der sich die Benutzer in einer docker
Gruppe befinden, damit Sie nicht unauthorized elevated access
in das System gelangen (Docker ermöglicht die Freigabe von Verzeichnissen zwischen dem Docker-Host und einem Gastcontainer, ohne die Zugriffsrechte des Containers einzuschränken). Entfernen Sie daher nicht vertrauenswürdige Benutzer aus der docker
Gruppe und erstellen Sie keine Eine Zuordnung von vertraulichen Verzeichnissen vom Host zu Containervolumes. Hier würde ich sagen, dass Sie einen separaten Benutzer für die Installation und bestimmte Containeraufgaben verwenden sollen. "NIEMALS root
für Container verwenden, die ausgeführt werden, widmen Sie PID
nur diese Aufgabe (haben erhöhten Zugriff, sind jedoch aufgabenbasiert, ich verwende Gravitation für den Cluster und bei der Installation NIEMALS benutze root).
Überprüfen Sie alle Docker-Daemon-Aktivitäten (beachten Sie, dass die Protokolle in der containerisierten "Welt" Speicherplatz beanspruchen. Bereiten Sie daher eine separate Partition mit ausreichend Speicherplatz für die Protokolle und die erforderliche Konfiguration vor (Rotation und Zeitraum zum Speichern der Protokolle).
Überprüfen Sie alle Docker-Dateien und docker.service in etc, var und was sonst noch anwendbar ist.
Beschränken Sie die gesamte Kommunikation zwischen Containern. Verknüpfen Sie bestimmte Container, für die Kommunikation erforderlich ist (am besten erstellen Sie ein benutzerdefiniertes Netzwerk und verbinden Sie nur Container, die mit diesem benutzerdefinierten Netzwerk kommunizieren müssen). Dieser Härtungsansatz verhindert die unbeabsichtigte und unerwünschte Weitergabe von Informationen an andere Behälter.
Alle Anwendungen in containerisierter Infrastruktur sollten so konfiguriert sein oder zumindest die Option dazu haben Encryp All Sensitive Information
(dies ist für Data Scientist sehr wichtig, da wir uns die meiste Zeit auf Plattformen anmelden, um Daten abzurufen , auch sensitive data
für das Unternehmen.
Sie haben die Möglichkeit, alle sensiblen Informationen während des Transports zu verschlüsseln.
Verwendet nur bestimmte genehmigte Ports, Protocols and Services
VMs, die eine offenere Oberfläche haben, wenn eine App / ein Projekt ausgeführt wird. Bei Containern geben Sie nur an, was verwendet werden soll, und wundern sich nicht, dass alle anderen Ports, Betriebssysteme und Dienste, die auf Betriebssystemebene ausgeführt werden, zum Schutz von oder ausgeführt werden Monitor, dies minimiert die "attack surface"
.
Auf Systemen gespeicherte vertrauliche Informationen werden im Ruhezustand verschlüsselt und erfordern einen sekundären Authentifizierungsmechanismus, der nicht in das Betriebssystem integriert ist, um auf die Informationen zugreifen zu können.
Ermöglicht die Aktivierung Operating System Anti-Exploitation Features/Deploy Anti-Exploit Technologies
: wie Data Execution Prevention(DEP)
oder Address Space Layout Randomization (ASLR)
.
Der beste einfache Sicherheitsunterschied zwischen VMs und Containern besteht darin, dass Sie beim Aktualisieren oder Ausführen eines Projekts keinen erhöhten Zugriff benötigen, um dies über die gesamte VM oder das gesamte Netzwerk zu tun. Sie werden nur als definierter Benutzer ausgeführt. Wenn es sich um erhöhten Zugriff handelt, ist dieser nur für vorhanden Die Zeit des Containers und nicht für den gesamten Host freigegeben (hier werden Data Science-Bibliotheken installiert, aktualisiert, Projektcode ausgeführt usw.).
Teil 4_ Weitere Ressourcen (zusätzlich zu den in Teil 1-3 enthaltenen Links) in Bezug auf Container für Data Science:
- Data Science auf Docker
- Conda, Docker und Kubernetes: Die Cloud-native Zukunft der Datenwissenschaft (gesponsert von Anaconda)
- https://devblogs.nvidia.com/making-data-science-teams-productive-kubernetes-rapids/
- Warum Datenwissenschaftler Kubernetes lieben
- Ein sehr gutes Buch zum Verständnis der Docker-Verwendung für Data Science: Docker für Data Science: Aufbau einer skalierbaren und erweiterbaren Dateninfrastruktur rund um den Jupyter Notebook Server .