Vier Schritte zur Härtung der Sicherheit von Amazon EKS
Kamil Potrec
21. Juli 2021
0 Min. LesezeitIm ersten Teil dieser Blog-Serie haben wir uns mit der Bereitstellung von Amazon EKS mit Terraform beschäftigt und betrachtet, wie sich die anfängliche RBAC-Implementierung und der Instance Metadata Service absichern lassen. In diesem zweiten Beitrag stellen wir weitere Best Practices zur Härtung der Sicherheit von Amazon EKS vor. Dazu gehören die Bedeutung von dedizierten IAM-Rollen für Continuous Delivery, einer Multi-Account-Architektur zur Isolierung von Amazon-EKS-Clustern und die Frage, wie Sie Ihre Secrets in der Control Plane verschlüsseln. Zum Schluss zeigen wir, wie Sie statische Analysetools in Ihre CD-Pipelines integrieren, um diese Probleme zu erkennen, bevor sie Produktionsumgebungen erreichen.
Behalten Sie den Überblick darüber, wer den Cluster bereitgestellt hat
Der Amazon-EKS-Service ist in den Identity and Access Management-Service integriert, um Benutzer beim Cluster zu authentifizieren. Die Autorisierungsentscheidungen werden vom nativen Kubernetes-RBAC-Modell getroffen. Die RBAC-Konfiguration wird über die aws-auth ConfigMap den IAM-Identitäten zugeordnet. Es gibt jedoch eine spezielle Zuordnung, die in keiner Konfigurationsdatei und keiner Einstellung sichtbar ist. Die IAM-Entität, mit der der Cluster erstellt wird, wird automatisch der system:masters integrierten Kubernetes-Gruppe zugeordnet. Dies ist in der Benutzerdokumentation ausführlich beschrieben. Dennoch hat diese Zuordnung erhebliche Auswirkungen auf die Überprüfbarkeit der Cluster-Berechtigungen.
Um die Auswirkungen dieser Konfiguration zu veranschaulichen, löschen wir alle Roles und ClusterRoles aus unserem Demo-Cluster.
Amazon EKS verwendet Webhook-Token-Authentifizierung, um die Integration mit IAM zu ermöglichen. Die Konfiguration finden Sie in den Argumenten des API-Servers.
AWS IAM kennt eindeutige Bezeichner, die in bestimmten Services verwendet werden können, um Fehlkonfigurationen durch die Wiederverwendung von Namen zu vermeiden. Aus der Amazon-EKS-Dokumentation geht nicht eindeutig hervor, ob die Berechtigung system:masters an den eindeutigen Bezeichner der Entität oder an ihren Anzeigenamen gebunden ist. Um zu überprüfen, ob durch das Entfernen der ursprünglichen Entität alle Berechtigungen für den Cluster entzogen werden, haben wir die temporäre Rolle gelöscht und neu erstellt.
Wie Sie sehen, haben wir nun eine völlig neue Rolle mit einer anderen RoleId. Der Amazon-EKS-Authentifizierungsservice verwendet jedoch den Anzeigenamen der Rolle, um uns dieselben system:masters-Berechtigungen zu gewähren.
Am wirksamsten lässt sich dieses Problem vermeiden, indem Sie ein zentrales Bereitstellungssystem und eine dedizierte Rolle für Bereitstellungen verwenden und unbedingt auf persönliche Anmeldedaten verzichten. Tools wie aws-vault können Ihnen helfen, den Wechsel zwischen verschiedenen Rollen sicher zu verwalten.
Sehen wir uns als Nächstes an, wie sich Nodes bei der Control Plane authentifizieren.
Trennen Sie Cluster mithilfe mehrerer Konten voneinander
Amazon EKS verlangt, dass an alle Nodes ein Instance-Profil mit den folgenden beiden Richtlinien angehängt ist: AmazonEKSWorkerNodePolicy und AmazonEC2ContainerRegistryReadOnly.
Standardmäßig gewähren die Richtlinien Berechtigungen für alle Ressourcen innerhalb des AWS-Kontos. Das bedeutet, dass ein kompromittierter Pod in diesem Cluster Informationen zu allen Ressourcen, VPCs, Subnetzen und Images im Konto abrufen kann.
Der Amazon-EKS-Node benötigt tatsächlich Zugriff auf eine weitere verwaltete Richtlinie namens AmazonEKS_CNI_Policy. Diese Richtlinie ermöglicht es dem Node, IP-Adressen zuzuweisen und netzwerkbezogene Funktionen auszuführen.
Diese Richtlinie erlaubt es dem Aufrufer, die Netzwerkkonfiguration jeder Instanz im Konto zu ändern. Amazon empfiehlt sogar, diese Richtlinie direkt an das Kubernetes-Servicekonto aws-node anzuhängen. Standardmäßig hängt das Terraform-Modul diese Richtlinie an das IAM-Profil an. Sie können dieses Verhalten ändern, indem Sie das Attribut attach_worker_cni_policy auf false setzen.
Verschlüsseln Sie Ihre Secrets
Eine der von Amazon EKS verwalteten Komponenten der Control Plane ist der etcd-Schlüssel-Wert-Speicher. Der Kubernetes-API-Server verwendet ihn zum Speichern aller Objekte und Konfigurationen. Standardmäßig verschlüsselt Kubernetes keine Daten, die in diesem Schlüssel-Wert-Speicher abgelegt werden. AWS ist für die Sicherheit der Komponenten der Control Plane verantwortlich. Dennoch können wir zusätzlich eine Defense-in-Depth-Strategie anwenden, um den Schutz unserer Daten weiter zu verbessern.
Der AWS-KMS-Service ist einer der Verschlüsselungsanbieter, der Envelope-Verschlüsselung für in unserem Cluster gespeicherte Secrets-Objekte bereitstellen kann. Mit der Option `cluster_encryption_config` können wir einen KMS-Schlüssel angeben, der zum Verschlüsseln zwischengeschalteter Datenverschlüsselungsschlüssel verwendet wird. Diese wiederum dienen zur Verschlüsselung bestimmter Objekte. Dieser Amazon-EKS-Blogbeitrag von AWS bietet einen guten Überblick über den zugrunde liegenden Prozess. Ab diesem Zeitpunkt kann niemand mit Zugriff auf einen etcd-Cluster unsere Secrets lesen, ohne auch Zugriff auf unseren KMS-Schlüssel zu haben. Der gesamte Vorgang läuft für Endbenutzer vollständig transparent ab.
Erkennen Sie Probleme in der Deployment-Pipeline
Infrastructure as Code ermöglicht es uns, den gewünschten Zustand des Amazon-EKS-Clusters deklarativ zu beschreiben. Dadurch können wir einige dieser Probleme statisch erkennen, bevor etwas bereitgestellt wird.
In Terraform können wir einen Plan der bereitzustellenden Konfiguration erstellen.
Dieser Plan lässt sich in das JSON-Format konvertieren. So können wir eine statische Analyse aller Attribute durchführen.
Sobald wir die Struktur des Terraform-Plans verstanden haben, können wir mit Open Policy Agent und seiner deklarativen Sprache einfache Tests schreiben.
Sie können dieses einfache Beispiel in einer Online-Umgebung ausprobieren: Rego Playground.
Das Schreiben dieser Regeln kann aufwendig sein. Es erfordert die Analyse der Terraform-Ausgabestrukturen, das Parsen der Dateien, die Pflege der Bibliotheken und eine aussagekräftige Darstellung der Ergebnisse. Hier können Produkte wie Snyk IaC helfen. Hier sehen Sie ein Beispiel für den Sicherheitsscan unserer Standardbereitstellung.
Mit dem IaC-Scanning von Snyk können Sie Probleme in Ihrer Terraform-Konfiguration erkennen, bevor Sie sie in der Produktion bereitstellen, und so die Sicherheit Ihrer Produktionsumgebungen gewährleisten. Registrieren Sie sich unter https://app.snyk.io kostenlos! Außerdem können Sie das kostenlose Code-Prüftool von Snyk ausprobieren, um sich einen schnellen Eindruck von der Sicherheit Ihres Codes zu verschaffen.
Sichern Sie Ihre Infrastruktur an der Quelle
Snyk automatisiert die IaC-Sicherheit und Compliance in Workflows und erkennt abweichende sowie fehlende Ressourcen.



