So automatisieren Sie die Sicherheit von Containern im Stil von Policy as Code mithilfe von CRD



Wir zeigen Ihnen, wie Sie Kubernetes CRD verwenden, um die Sicherheit zu automatisieren und Ihre Anwendungen zu schützen.

Übersetzung aus dem Team des Magazins Tomorrow Cloudy Mail.ru Cloud Solutions . Quelle: Niteen Kole So automatisieren Sie die Containersicherheit mithilfe von CRDs, um Sicherheitsrichtlinien als Code mit Extras abzurufen .

Warum brauchen Sie CRD?


Sicherheit bereitet DevOps-Teams seit langem Kopfschmerzen . Bestehende Softwaretools lösen erfolgreich die Probleme der Automatisierung der Montage und des Rollouts von Anwendungen - das automatische Rollout von Anwendungen auf der Basis von Containern ist zum Standard geworden. Gleichzeitig liegt die Automatisierung der Sicherheitseinstellungen weit zurück.

Sie können das automatische Scannen von Sicherheitslücken implementieren, aber die Notwendigkeit, Richtlinien für die Anwendungssicherheit manuell zu konfigurieren, bereitet Ihnen Kopfschmerzen.

Die Einführung von benutzerdefinierten Ressourcendefinitionen (CRDs) von Kubernetes hilft bei der Behebung von Problemen bei der Definition von Sicherheitsrichtlinien als Code in der Anfangsphase der Anwendungszusammenstellung und des Rollouts und automatisiert deren Verwendung beim Rollout von Anwendungen in der Produktionsumgebung.

Mit CRD können globale Sicherheitsrichtlinien implementiert werden, die das Anwendungsverhalten definieren und die Sicherheit mehrerer verwendeter Kubernetes-Cluster konfigurieren.

Durch die Verwendung von CRD zur Automatisierung und die zentrale Definition von Sicherheitseinstellungen als Code können Sie gleichzeitig die Sicherheitseinstellungen verschärfen und deren Anwendung vereinfachen. Dies führt letztendlich dazu, dass Anwendungen effizienter, fehlerfreier und vor allem sicherer werden.

Wie funktioniert CRD?


Um Sicherheitsrichtlinien zu definieren, verwenden wir NeuVector CRD innerhalb der NeuVector- Containerplattform . Alternativen zu NeuVector für die Containersicherheit: AquaSec, StackRox, Sysdig Secure, Twistlock.

NeuVector CRD enthält Richtlinien, die zunächst ein vollständiges Profil des normalen Anwendungsverhaltens erfassen.

Das erfasste Verhalten wird der weißen Liste hinzugefügt, einschließlich aller Netzwerkregeln, Prozesse, Protokolle und Dateivorgänge. All dies zusammen bildet eine Reihe von Standardanwendungsvorgängen. Anschließend werden Sicherheitseinstellungen angewendet, die nur bestätigte Netzwerkverbindungen innerhalb der Container zulassen, aus denen die Anwendung besteht. Diese Verbindungen werden während der Inspektion der OSI-Modellschicht 7 (Anwendungsprotokollschicht) identifiziert. Somit wird jeder Versuch einer nicht autorisierten externen Verbindung verhindert.

Sicherheitsrichtlinien verhindern, dass Angreifer Kommunikationen außerhalb oder innerhalb von Containern verwenden, um die Anwendung für ihre eigenen Zwecke zu verwenden.

Mit CRD können Sie sowohl globale Regeln als auch Regeln für jeden Dienst separat definieren. CRDs sind auch mit Kubernetes RBAC kompatibel, sodass Sie Dienstkonten und Kubernetes-Rollen verwenden können, um Sicherheitsrichtlinien durchzusetzen.

Darüber hinaus steht die Versionierung zur Verfügung, um eigene Richtlinien für jede Version der Anwendung zu erstellen. Die Integration in Dienstprogramme zur Verwaltung von Sicherheitsrichtlinien wie den Open Policy Agent wird unterstützt .

Bereit - gemacht Kubernetes Cluster mit einem speziell Überwachungssystem angepasst , basierend auf Prometheus und Grafana sowie TLS und RBAC für die Verwaltung von Zugriffsrechten und Entwicklung der Standardisierung in verteilten Teams, können kostenlos in der Mail.ru Cloud - Lösungen Cloud getestet werden.

Erstellung von NeuVector CRD


Mit NeuVector CRD können Sie native YAML Kubernetes-Dateien verwenden, um Sicherheitsregeln zu erstellen.

Erstellen Sie eine Datei nvsecurityrule.yaml mit einer Beschreibung von NeuVector CRD. Diese Datei steuert NvSecurityRuledie Art namespacedund NvClusterSecurityRuleden Cluster.

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: nvsecurityrules.neuvector.com
spec:
  group: neuvector.com
  names:
    kind: NvSecurityRule
    listKind: NvSecurityRuleList
    plural: nvsecurityrules
    singular: nvsecurityrule
  scope: Namespaced
  version: v1
  versions:
  — name: v1
    served: true
    storage: true

---

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: nvclustersecurityrules.neuvector.com
spec:
  group: neuvector.com
  names:
    kind: NvClusterSecurityRule
    listKind: NvClusterSecurityRuleList
    plural: nvclustersecurityrules
    singular: nvclustersecurityrule
  scope: Cluster
  version: v1
  versions:
  — name: v1
    served: true
    storage: true

Führen Sie Folgendes aus, um eine CRD zu erstellen:

$ kubectl create -f nvsecurityrule.yaml

Sobald die NeuVector-CRD erstellt wurde, werden alle später mit dem Parameter kind: erstellten Ressourcen NvSecurityRulevon dieser CRD verarbeitet. Auf diese Weise können Sie Ihre eigenen Ressourcen mit verbundenen Sicherheitsrichtlinien erstellen. Bevor Sie etwas unternehmen, ist es ratsam, die NeuVector-Dokumentation zu lesen und die erforderlichen clusterrolesund hinzuzufügen clusterrolebindings.

Für die Verwendung dieser CRD zum Anwenden von NeuVector-Sicherheitsrichtlinien in einem Kubernetes-Cluster sind außerdem die richtigen Rechteeinstellungen (RBAC) erforderlich. Von CRD definierte Sicherheitsrichtlinien für einen beliebigen Namespace können nur von einem Benutzer angewendet werden, der das Recht hat, sie für den angegebenen Namespace bereitzustellen. Das Anwenden von Sicherheitsrichtlinien auf einen Cluster erfordert Clusteradministratorrechte.

Unten finden Sie einen Testcode aus demo-security-v1.yaml, der Container nginx-podim Namespace einschränkt, demoindem nur über HTTP auf andere Container desselben Namespace zugegriffen wird .

apiVersion: v1
items:
- apiVersion: neuvector.com/v1
  kind: NvSecurityRule
  metadata:
    name: nv.nginx-pod.demo
  spec:
    egress:
    — Selector:
        criteria:
        — key: service
          op: =
          value: node-pod.demo
        — key: domain
          op: =
          value: demo
        name: nv.node-pod.demo
      action: allow
      applications:
      - HTTP
      name: nv.node-pod.demo-egress-0
      ports: any
    — Selector:
        criteria:
        — key: service
          op: =

Unter dem Snippet sollte eine Beschreibung aller Netzwerkverbindungen zu Containern im Namespace enthalten sein demo, z. B. Verbindungen zum Server redissowie Prozesse und Festplattenaktivitäten, die für jeden Container zulässig sind. Vergessen Sie nicht, zuerst die NeuVector-Sicherheitsrichtlinien und dann die Anwendung bereitzustellen. Daher sind Sicherheitsrichtlinien ab dem Start der Anwendung wirksam.

So wenden Sie eine Sicherheitsrichtlinie an:

$ kubectl create -f demo-security-v1.yaml

NeuVector liest die Sicherheitsrichtlinien in den erstellten Ressourcen und verwendet die REST-API, um den NeuVector-Controller zu kontaktieren, der die Regeln und Konfigurationen gemäß den übertragenen Sicherheitsrichtlinien erstellt.

Optionen zum Anwenden von Sicherheitsrichtlinien als Code


Die Verwendung von Sicherheitsrichtlinien als Code eröffnet sowohl DevOps / DevSecOps-Befehlen als auch Programmierern viele Möglichkeiten. Hier sind einige Beispiele.

Entwicklung und Test von Sicherheitsmanifesten in der Anfangsphase der Erstellung von Anwendungen


Entwickler können CRD verwenden, um die Anwendung in frühen Entwicklungsstadien sicherer zu machen. Sie können gleichzeitig Manifeste für die Bereitstellung und Anwendung von Sicherheitsrichtlinien erstellen.

Nach dem Erstellen des Images, der automatischen Überprüfung auf Schwachstellen und der Genehmigung durch das DevOps-Team kann DevOps beide Manifeste überprüfen und dem Entwicklungsteam unter Sicherheitsgesichtspunkten Empfehlungen geben. Neue Anwendungen werden zusammen mit wirksamen Sicherheitsrichtlinien von der ersten Bereitstellung bis zur Produktion bereitgestellt.



Verwenden der Verhaltensanalyse zum Erstellen von Sicherheitsrichtlinien


DevOps-Teams können mithilfe von NeuVector-Verhaltensanalysefunktionen in Testumgebungen Sicherheitsrichtlinien entwickeln und Yaml-Dateien erstellen, die für die Verwendung in NeuVector CRD geeignet sind.

Die folgende Abbildung zeigt in der unteren rechten Ecke des Diagramms, wie Ihr DevOps-Team die Anwendung in einer Testumgebung bereitstellt, in der eine vollständige Analyse des Anwendungsverhaltens durchgeführt und Sicherheitsprofile für das Netzwerk, die Dateiaktivität und die Prozesse erstellt werden.

Diese Regeln werden exportiert und an Entwickler weitergegeben, die die erforderlichen Anpassungen vornehmen, sowie an DevOps, die sie testen, bevor sie in der Produktion verwendet werden.



Globale Sicherheitsrichtlinien


Mit NeuVector CRD können Sie globale Sicherheitsrichtlinien definieren, die weder an eine bestimmte Anwendung noch an eine Gruppe von Anwendungen in einem Cluster gebunden sind. Beispielsweise kann Ihr Sicherheits- oder Implementierungsteam globale Netzwerkregeln definieren, um Verbindungen in allen Containern zu blockieren oder den Überwachungszugriff auf alle Prozesse im Cluster zu konfigurieren.



Mithilfe gemeinsamer Sicherheitsrichtlinien und Anwendungssicherheitsrichtlinien können Sie komplexe und präzise Sicherheitseinstellungen erstellen, die Ihr Unternehmen benötigt.

Das folgende Beispiel zeigt das Verbot von SSH-Verbindungen von Containern nach außen:

- apiVersion: neuvector.com/v1
  kind: NvClusterSecurityRule
  metadata:
    name: containers
    namespace: default
  spec:
    egress: []
    file: []
    ingress:
    — Selector:
        criteria: []
        name: external
      action: deny
      applications:
      - SSH
      name: containers-ingress-0
      ports: tcp/22
    process:
    — action: deny
      name: ssh
      path: /bin/ssh
    target:    
      Selector:
        criteria:
        — key: container
          op: =
          value: '*'
        name: containers
      policymode: null
    version: v1  
 

Migrieren von Sicherheitsrichtlinien vom Testen zur Produktion


Mit NeuVector CRD können Sie die automatische Migration von Sicherheitsrichtlinien - alle oder nur die von Ihnen benötigten - von der Testumgebung in die Produktionsumgebung steuern. In der NeuVector-Konsole können Sie den Modus neuer Dienste für die Erkennung, Überwachung oder den Schutz konfigurieren.

Wenn Sie einen Überwachungs- oder Schutzmodus auswählen, müssen für jede Bereitstellung oder Dienstaktualisierung unbedingt die von Ihnen definierten Sicherheitsrichtlinien festgelegt werden. Daher wird der Dienst erst nach Anwendung der Sicherheitsrichtlinien in den aktiven Status versetzt.

Mithilfe der Funktionen von Kubernetes CRD und Sicherheitsrichtlinien als Code können Ihre Entwickler und DevOps die Automatisierung von Anwendungssicherheitsrichtlinien anwenden und sicherstellen, dass Anwendungen in allen Phasen viel besser geschützt sind: vom Beginn der Entwicklung bis zur Arbeit in der Produktion.


All Articles