Heim  >  Artikel  >  System-Tutorial  >  Zehn Aspekte zur Stärkung der Linux-Containersicherheit

Zehn Aspekte zur Stärkung der Linux-Containersicherheit

PHPz
PHPzOriginal
2024-06-04 16:45:38437Durchsuche

Container-Sicherheitslösungen müssen unterschiedliche Technologie-Stacks und verschiedene Phasen des Container-Lebenszyklus berücksichtigen. - 1. Container-Betriebssystem und Mandantenfähigkeit - 2. Container-Inhalt (unter Verwendung vertrauenswürdiger Quellen) - 3. Container-Registrierung (verschlüsselter Zugriff auf Container-Images) - 4. Sicherheit des Build-Prozesses - 5. Steuern, was im Cluster bereitgestellt werden kann - 6. Container-Orchestrierung: Stärkung der Sicherheit der Containerplattform – 7. Netzwerkisolation – 8. Speicher – 9. API-Verwaltung, Endpunktsicherheit und Single Sign-On (SSO) – 10. Rollen- und Zugriffskontrollverwaltung

Container bieten eine einfache Möglichkeit, Anwendungen zu verpacken und sie nahtlos von Entwicklungs- und Testumgebungen bis hin zu Produktionsumgebungen bereitzustellen. Es trägt dazu bei, die Konsistenz in einer Vielzahl von Umgebungen sicherzustellen, einschließlich physischer Server, virtueller Maschinen (VMs) oder privater oder öffentlicher Clouds. Führende Unternehmen setzen aufgrund dieser Vorteile schnell Container ein, um Anwendungen, die einen Mehrwert für das Unternehmen bieten, einfach zu entwickeln und zu verwalten.

加强Linux 容器安全的十大方面

Unternehmensanwendungen erfordern starke Sicherheit. Jeder, der grundlegende Dienste in Containern ausführt, wird sich fragen: „Sind Container sicher?“, „Können unsere Anwendungen Containern vertrauen?“

Das Sichern eines Containers ist dem Sichern eines laufenden Prozesses sehr ähnlich. Bevor Sie Container bereitstellen und ausführen, müssen Sie die Sicherheit Ihres gesamten Lösungstechnologie-Stacks berücksichtigen. Sie müssen auch die Sicherheit während des gesamten Lebenszyklus Ihrer Anwendung und Ihres Containers berücksichtigen.

Bitte versuchen Sie, die Sicherheit von Containern auf verschiedenen Ebenen, verschiedenen Technologie-Stacks und verschiedenen Lebenszyklusphasen in diesen 10 Aspekten zu stärken.

1. Container-Betriebssystem und Mandantenfähigkeit
Für Entwickler erleichtern Container das Erstellen und Aktualisieren von Anwendungen, auf die man sich als Anwendungseinheit verlassen kann, und maximieren die Serverressourcennutzung durch die Bereitstellung mandantenfähiger Anwendungen auf gemeinsam genutzten Hosts. Container erleichtern die Bereitstellung mehrerer Anwendungen auf einem einzigen Host und das Ein- und Ausschalten einzelner Container nach Bedarf. Um die Vorteile dieser Verpackungs- und Bereitstellungstechnologie voll ausschöpfen zu können, benötigen Betriebsteams die richtige laufende Containerumgebung. Betreiber benötigen ein Betriebssystem, das Container am Perimeter sichern kann, indem es den Host-Kernel von den Containern isoliert und die Container voreinander schützt.

Container sind Linux-Prozesse, die Ressourcen isolieren und einschränken und es Ihnen ermöglichen, Sandbox-Anwendungen innerhalb eines gemeinsam genutzten Host-Kernels auszuführen. Sie sollten Ihre Container auf die gleiche Weise sichern, wie Sie jeden laufenden Prozess unter Linux sichern würden. Der Verzicht auf Privilegien ist wichtig und bleibt Best Practice. Ein besserer Ansatz besteht darin, Container mit möglichst wenigen Privilegien zu erstellen. Container sollten als normaler Benutzer und nicht als Root ausgeführt werden. Als nächstes sichern Sie Ihre Container, indem Sie die verschiedenen Ebenen der in Linux verfügbaren Sicherheitsfunktionen nutzen: Linux-Namespaces, Security Enhanced Linux (SELinux), Kontrollgruppen, Funktionen und Secure Compute Mode (seccomp).

加强Linux 容器安全的十大方面

2. Containerinhalte (vertrauenswürdige Quellen verwenden)
Was bedeutet Sicherheit für den Containerinhalt? . Anwendungen und Infrastruktur bestehen seit einiger Zeit aus Standardkomponenten. Viele stammen aus Open-Source-Software, wie dem Linux-Betriebssystem, dem Apache-Webserver, der Red Hat JBoss Enterprise Application Platform, PostgreSQL und Node.js. Versionen verschiedener Container-basierter Pakete sind jetzt sofort verfügbar, sodass Sie keine eigenen erstellen müssen. Wie bei jedem Code, der von einer externen Quelle heruntergeladen wird, müssen Sie jedoch den Ursprung der Pakete kennen, wer sie erstellt hat und ob sie bösartigen Code enthalten.

3. Containerregistrierung (Container-Image-verschlüsselter Zugriff)
Ihr Team erstellt Container auf der Grundlage heruntergeladener öffentlicher Container-Images, daher sind Zugriffsverwaltung und Update-Downloads der Schlüssel zur Verwaltung. Container-Images, integrierte Images und andere Arten von Binärdateien müssen auf die gleiche Weise verwaltet werden. Viele private Repository-Register unterstützen das Speichern von Container-Images. Wählen Sie einen privaten Registrierungsserver aus, der die verwendete Container-Image-Automatisierungsrichtlinie speichert.

4. Der Bauprozess ist sicher

In einer Containerumgebung ist die Softwarekonstruktion eine Phase des gesamten Lebenszyklus und der Anwendungscode muss in die Laufzeit integriert werden. Die Verwaltung dieses Build-Prozesses ist der Schlüssel zur Gewährleistung der Sicherheit Ihres Software-Stacks. Halten Sie sich an das Konzept „Einmal erstellen, überall bereitstellen“, um sicherzustellen, dass die Produkte im Build-Prozess genau die Produkte sind, die in der Produktion bereitgestellt werden. Dies ist auch sehr wichtig, um die kontinuierliche Stabilität von Containern aufrechtzuerhalten. Mit anderen Worten: Patchen Sie laufende Container nicht, sondern erstellen Sie sie neu. Unabhängig davon, ob Sie in einer stark regulierten Branche arbeiten oder einfach nur die Arbeit Ihres Teams optimieren möchten, müssen Sie Ihr Container-Image-Management so gestalten und Prozesse erstellen, dass die Containerschicht genutzt wird, um eine Trennung der Kontrolle zu erreichen, sodass:

Das Betriebs- und Wartungsteam verwaltet grundlegende Bilder

Das Architekturteam verwaltet Middleware, Laufzeit, Datenbank und andere Lösungen

Das Entwicklungsteam konzentriert sich nur auf die Anwendungsschicht und den Code

Signieren Sie abschließend Ihre benutzerdefinierten Container, um sicherzustellen, dass sie zwischen Build und Bereitstellung nicht manipuliert werden.

加强Linux 容器安全的十大方面

5. Steuern Sie, was im Cluster bereitgestellt werden kann

Falls während des Erstellungsprozesses Probleme auftreten oder nach der Bereitstellung eines Images Schwachstellen entdeckt werden, fügen Sie mit der automatisierten, richtlinienbasierten Bereitstellung eine weitere Sicherheitsebene hinzu.

Werfen wir einen Blick auf die drei Container-Image-Ebenen, die zum Erstellen von Anwendungen verwendet werden: Kern, Middleware und Anwendung. Wenn im Kernbild ein Problem festgestellt wird, wird das Bild neu erstellt. Sobald der Build abgeschlossen ist, wird das Image an den Registrierungsserver der Containerplattform übertragen. Die Plattform kann Änderungen am Bild erkennen. Bei Builds, die von diesem Image abhängen und über definierte Trigger verfügen, erstellt die Plattform die Anwendung automatisch neu und integriert die festen Bibliotheken.

Sobald der Build abgeschlossen ist, wird das Image an den internen Registrierungsserver der Containerplattform übertragen. Änderungen am Image im internen Registrierungsserver werden sofort erkannt und aktualisierte Images werden automatisch über in der Anwendung definierte Trigger bereitgestellt, um sicherzustellen, dass der in der Produktion ausgeführte Code immer mit dem zuletzt aktualisierten Image übereinstimmt. Alle diese Funktionen arbeiten zusammen, um Sicherheitsfunktionen in Ihren kontinuierlichen Integrations- und kontinuierlichen Bereitstellungsprozess (CI/CD) zu integrieren.

6. Container-Orchestrierung: Stärkung der Sicherheit der Containerplattform

Natürlich werden Bewerbungen selten in einem einzigen Container geliefert. Selbst einfache Anwendungen verfügen in der Regel über ein Frontend, ein Backend und eine Datenbank. Die Bereitstellung moderner Microservice-Anwendungen in Containern bedeutet häufig die Bereitstellung mehrerer Container, manchmal auf demselben Host und manchmal über mehrere Hosts oder Knoten verteilt, wie in der Abbildung dargestellt.

Bei der Verwaltung von Containerbereitstellungen im großen Maßstab müssen Sie Folgendes berücksichtigen:

Welche Container sollen auf welchem ​​Host bereitgestellt werden?

Welcher Host hat eine größere Kapazität?

Welche Container müssen aufeinander zugreifen? Wie werden sie einander entdecken?

Wie kontrolliere ich den Zugriff und die Verwaltung gemeinsam genutzter Ressourcen wie Netzwerk und Speicher?

Wie überwacht man den Zustand des Containers?

Wie können Anwendungsfunktionen automatisch erweitert werden, um der Nachfrage gerecht zu werden?

Wie ermöglicht man es Entwicklern, Sicherheitsanforderungen im Self-Service zu erfüllen?

Angesichts der breiten Palette an Funktionen, über die Entwickler und Betreiber verfügen, ist eine starke rollenbasierte Zugriffskontrolle ein Schlüsselelement einer Containerplattform. Beispielsweise ist der Orchestrierungsverwaltungsserver der zentrale Zugriffspunkt und sollte die höchste Stufe an Sicherheitsprüfungen erhalten. APIs sind der Schlüssel zur automatisierten Containerverwaltung in großem Maßstab. Sie werden zur Validierung und Konfiguration von Daten für Container, Dienste und Replikationscontroller verwendet. Sie führen eine Projektvalidierung für eingehende Anforderungen durch und rufen Trigger für andere wichtige Systemkomponenten auf.

加强Linux 容器安全的十大方面

7. Netzwerkisolation

Die Bereitstellung moderner Microservice-Anwendungen in Containern erfordert häufig die Bereitstellung mehrerer Container, die auf mehrere Knoten verteilt sind. Im Hinblick auf die Netzwerkverteidigung benötigen Sie eine Möglichkeit, Anwendungen innerhalb eines Clusters zu isolieren.

Ein typischer öffentlicher Cloud-Dienst wie Google Container Engine (GKE), Azure Container Services oder Amazon Web Services (AWS) Container Service ist ein Single-Tenant-Dienst. Sie ermöglichen die Ausführung von Containern auf einem Cluster von VMs, die Sie starten. Um mehrinstanzenfähige Containersicherheit zu erreichen, benötigen Sie eine Containerplattform, die es Ihnen ermöglicht, einen einzelnen Cluster auszuwählen und den Datenverkehr zu segmentieren, um verschiedene Benutzer, Teams, Anwendungen und Umgebungen innerhalb dieses Clusters zu isolieren.

Bei Netzwerk-Namespaces erhält jede Sammlung von Containern (als „POD“ bezeichnet) ihre eigene IP und ihren eigenen Portbindungsbereich, wodurch das POD-Netzwerk auf dem Knoten isoliert wird.

Standardmäßig können PODs aus verschiedenen Namespaces (Projekten) keine Pakete von PODs oder Diensten in verschiedenen Projekten senden oder empfangen, außer mit den unten beschriebenen Optionen. Sie können diese Funktionen verwenden, um Entwickler-, Test- und Produktionsumgebungen in einem Cluster zu isolieren. Diese Erweiterung der IP-Adressen und Ports macht die Vernetzung jedoch komplexer. Investieren Sie in Tools, um diese Komplexität zu bewältigen. Das bevorzugte Tool ist die Verwendung einer SDN-Containerplattform (Software Defined Network), die ein einheitliches Clusternetzwerk bereitstellt, um die Kommunikation zwischen Containern im gesamten Cluster sicherzustellen.

8. Lagerung

Container sind sowohl für zustandsbehaftete als auch für zustandslose Anwendungen sehr nützlich. Die Sicherung des Speichers ist ein Schlüsselelement bei der Gewährleistung zustandsbehafteter Dienste. Die Containerplattform sollte eine Vielzahl von Speicher-Plug-Ins bereitstellen, darunter Network File System (NFS), AWS Elastic Block Stores (EBS, Elastic Block Storage), GCE Persistent Disk, GlusterFS, iSCSI, RADOS (CEPH), Cinder usw.

Ein Persistent Volume (PV) kann auf jedem vom Ressourcenanbieter unterstützten Host bereitgestellt werden. Anbieter verfügen über unterschiedliche Fähigkeiten und der Zugriffsmodus jedes PV kann auf einen bestimmten Modus eingestellt werden, der von einem bestimmten Volume unterstützt wird. Beispielsweise kann NFS mehrere Lese-/Schreib-Clients unterstützen, ein bestimmtes NFS-PV kann jedoch nur schreibgeschützt auf den Server exportiert werden. Jedes PV verfügt über einen eigenen Satz von Zugriffsmodi, die PV-spezifische Leistungsmetriken definieren, z. B. ReadWriteOnce, ReadOnlyMany und ReadWriteMany.

9. API-Management, Endpoint Security und Single Sign-On (SSO)

Zur Sicherung von Anwendungen gehört die Verwaltung der Anwendungs- und API-Authentifizierung und -Autorisierung. Die Web-SSO-Funktionalität ist ein wichtiger Bestandteil moderner Anwendungen. Wenn Entwickler ihre eigenen Anwendungen erstellen, kann die Containerplattform ihnen verschiedene Containerdienste zur Nutzung bereitstellen.

API ist eine Schlüsselkomponente von Microservice-Anwendungen. Microservice-Anwendungen verfügen über mehrere unabhängige API-Dienste, was zu einer Zunahme von Dienstendpunkten führt und daher mehr Governance-Tools erfordert. Es wird empfohlen, API-Verwaltungstools zu verwenden. Alle API-Plattformen sollten eine Vielzahl von Standardoptionen für die API-Authentifizierung und -Sicherheit bieten, die einzeln oder in Kombination zur Ausstellung von Zertifikaten und zur Zugriffskontrolle verwendet werden können. Zu diesen Optionen gehören Standard-API-Schlüssel, App-IDs, Schlüsselpaare und OAuth 2.0.

10. Rollen- und Zugriffskontrollverwaltung (Cluster Federation)

Im Juli 2016 führte Kubernetes 1.3 den Kubernetes Federated Cluster ein. Dies ist eine aufregende neue Funktion, die sich derzeit in der Betaversion von Kubernetes 1.6 befindet.

In öffentlichen Cloud- oder Unternehmensrechenzentrumsszenarien ist Federation nützlich für die Bereitstellung und den Zugriff auf Anwendungsdienste über Cluster hinweg. Multi-Cluster ermöglicht eine hohe Verfügbarkeit von Anwendungen, z. B. mehrere Regionen, mehrere Cloud-Anbieter (z. B. AWS, Google Cloud und Azure), um eine gemeinsame Verwaltung der Bereitstellung oder Migration zu erreichen.

Bei der Verwaltung der Cluster-Föderation müssen Sie sicherstellen, dass das Orchestrierungstool die erforderliche Sicherheit über verschiedene Instanzen der Bereitstellungsplattform hinweg bietet. Wie immer sind Authentifizierung und Autorisierung der Schlüssel zur Sicherheit – um Daten sicher an Anwendungen weitergeben zu können, unabhängig davon, wo sie ausgeführt werden, und um die Mandantenfähigkeit von Anwendungen in einem Cluster zu verwalten.

Kubernetes erweitert die Cluster-Föderation um Unterstützung für föderierte Verschlüsselung, föderierte Namespaces und Objekteintrag.

Das obige ist der detaillierte Inhalt vonZehn Aspekte zur Stärkung der Linux-Containersicherheit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn