Sicherheit und Stabilität von Deployments erhöhen Immutable Docker Image Tags unter AWS

Autor / Redakteur: Alexander Melnyk * / Stephan Augsten

Für die Stabilität und Sicherheit von Container-Anwendungen spielen Versionierung und Tagging eine übergeordnete Rolle. Mit Immutable Tags umgeht die Amazon Elastic Container Registry entsprechende Deployment-Probleme.

Firmen zum Thema

Die Funktionsweise der Amazon Elastic Container Registry.
Die Funktionsweise der Amazon Elastic Container Registry.
(Bild: Amazon Web Services)

Die Container-Technologie ist aus der IT-Welt nicht mehr wegzudenken und hat sich als Technologiestandard etabliert. Mit AWS bringen Entwickler ihre Container-Anwendungen schnell in die Produktion. Die richtige Versionierung und das Tagging der Docker-Images ist dabei für die Sicherheit und Stabilität der Deployments unerlässlich.

Werden die Image-Tags überschrieben, beispielsweise durch Code-Änderungen in einer CI/CD-Pipeline, ist unklar, was in die Produktion ausgerollt wurde. Dies wiederum gefährdet die Stabilität und die Sicherheit der Anwendung.

Die Immutable Tags der Amazon Elastic Container Registry (ECR) verhindern derartige Probleme. ECR ist eine vollständig verwaltete Container-Registry, mit der die Entwickler ihre Container-Images speichern, verwalten und nutzen können. Dadurch werden die Best-Practices eines sicheren Rollout-Prozesses automatisiert.

Warum Image-Tags zu Problemen führen

Docker-Images werden in einem Docker-Repository verwaltet und lassen sich taggen. Die Tags werden häufig zur Versionierung (myapp:v3.1.4) eingesetzt. Weitere Anwendungsfälle sind beispielsweise die Zielarchitektur, für die die Images geeignet sind (myapp:3.1.4-amd64) oder auch die Basis-Images (myapp:3.1.4-alpine).

Die Alpine-Images sind mit wenigen Megabytes besonders schlank und die Container können dadurch in einem Cluster schnell skaliert werden. Das bekannteste aller Tags ist sicherlich „latest“: Dieses Tag wird von Docker automatisch verwendet und referenziert immer das zuletzt erstellte Image.

Der Vorteil ist, dass die neueste Version damit problemlos abgerufen wird. Doch da dieses Tag ganz leicht überschrieben werden kann, ist nie klar, welche Version der Anwendung im Image ist.

Das Tag kann mit oder ohne Absicht überschrieben werden, was die Stabilität und Sicherheit der Software gefährden kann. Dieses Problem lässt sich zuverlässig mit einer geeigneten Technologie lösen, in dem die Best-Practice automatisiert wird und die Entwickler die nötigen Leitplanken bekommen.

AWS ECR

In der Amazon Elastic Container Registry können mehrere Repositories konfiguriert werden, beispielsweise ein Repository pro Team oder pro Anwendung. Mit dem „Immutable Tags“-Feature können die Tags der Docker-Images in einem ECR Repository nicht überschrieben werden.

Die Funktion lässt sich sowohl auf neue als auch existierende Repositories anwenden und kann nach Belieben umgestellt werden, zum Beispiel während eines Deployment-Zeitfensters. Hier ein Beispiel, wie ein Repository mit AWS CLI erstellt wird:

aws ecr create-repository --repository-name name --image-tag-mutability IMMUTABLE --region eu-central-1

Folgendermaßen wird ein bestehendes Repository konfiguriert:

aws ecr put-image-tag-mutability --repository-name name --image-tag-mutability IMMUTABLE --region eu-central-1

Haben wir das Repository auf Immutable umgestellt und versuchen danach, ein Image-Tag zu überschreiben, erhalten wir den Fehler „ImageTagAlreadyExistsException“:

The image tag latest already exists in the xxx repository and cannot be overwritten because repository is immutable.

Die Vorteile der Immutable Tags sind erhöhte Sicherheit, Transparenz und Stabilität. Da die Tags nicht überschrieben werden können, kann ein Angreifer ein Docker-Image unter demselben Tag nicht überschreiben. Jede Code-Änderung muss durch ein neues Image-Tag deployed werden.

Gleichzeitig können auch Entwickler nicht unbeabsichtigt Software-Änderungen in die Produktion bringen. Die Praxis ist an sich ist nicht neu, öffentliche Repositories für Software-Pakete wie npm.org, pypi.org und andere besitzen diese Funktion standardmäßig.

Um dieses Feature nutzen zu können, muss der Release-Prozess gegebenenfalls individuell angepasst werden. Jedes Deployment-Artefakt wird mit einem Immutable-Tag eindeutig, beispielsweise durch einen Hash-Wert. Die CI/CD Pipeline muss damit umgehen können und es dürfen keine festen Abhängigkeiten zu den Tags, sowohl für das Deployment als auch für das Rollback, existieren.

Die Immutable-Tags müssen nicht immer verwendet werden. In der Praxis strebt man häufig eine Balance zwischen den beiden Varianten an, mit dem Ziel, hohe Geschwindigkeit und Stabilität der Release-Kette zu erhalten. In einer gewöhnlichen CI/CD-Pipeline mit Entwicklungs-, Test- und Produktionsumgebung werden Immutable-Tags vorerst in Test oder Produktion verwendet, was die Stabilität der Deployments erhöht.

Alexander Melnyk
Alexander Melnyk
(Bild: Amazon Web Services)

Um die Geschwindigkeit bei der Entwicklung zu erhalten und Code-Änderungen möglichst oft und schnell zu integrieren, können latest oder andere veränderbare Image-Tags verwendet werden. Mit zwei dedizierten ECR Repositories kann diese Strategie umgesetzt werden, wobei die CI/CD Pipeline das Verschieben und Taggen der Images zwischen den Umgebungen übernimmt.

* Alexander Melnyk ist Senior Specialist Solutions Architect bei AWS.

(ID:47364518)