GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So signieren Sie Ihre Docker-Images, um das Vertrauen zu erhöhen

Die meisten Docker-Images werden verteilt, ohne dass überprüft wird, ob sie das sind, was sie vorgeben zu sein. Sie können das Vertrauen in Ihre Bilder erhöhen, indem Sie sie digital signieren. Dies beweist den Benutzern, dass Sie das Bild veröffentlicht haben und kein Betrüger sind.

Das Signatursystem von Docker ist als Content Trust bekannt. Es wird durch docker trust offengelegt CLI-Befehl. Content Trust verwendet Schlüsselsätze, damit Registrierungsstellen die Identität potenzieller Herausgeber überprüfen können. Benutzer von signierten Bildern können sicher sein, dass sie aus der erwarteten Quelle stammen.

Schlüssel generieren

Sie benötigen ein Schlüsselpaar, um mit der Verwendung von Content Trust zu beginnen. Schlüsselpaare können von Zertifizierungsstellen ausgestellt oder von der Docker-CLI generiert werden.

Führen Sie docker trust key generate your-name aus um einen Schlüssel zu erstellen. Sie werden aufgefordert, eine Passphrase einzugeben. Diese muss jedes Mal angegeben werden, wenn Sie den Schlüssel zum Signieren oder Verifizieren von Bildern verwenden. Drücken Sie bei jeder Eingabeaufforderung die Eingabetaste, um fortzufahren.

Sobald Sie fertig sind, werden zwei Dateien in ~/.docker/trust generiert :der private Schlüssel und der entsprechende öffentliche Schlüssel. Ähnlich wie bei SSH-Schlüsseln sollte der private Schlüssel niemals geteilt werden und darf nicht verloren gehen. Wenn Sie zwischen Computern wechseln müssen, können Sie mithilfe von docker trust key load my-key.pem eine private Schlüsseldatei in eine andere Docker-Installation importieren .

Hinzufügen Ihres öffentlichen Schlüssels zu Ihrer Registry

Docker Hub unterstützt alle Funktionen von docker trust . Wenn Sie einen privaten Docker-Registrierungsserver verwenden, ist ein aufwändigerer Einrichtungsprozess erforderlich.

Der Registrierungsserver bietet keine integrierte Signaturunterstützung. Sie benötigen einen separaten Docker-Notardienst, der die Signaturüberprüfung für Image-Pushs und -Pulls übernimmt. Notary besteht aus drei Komponenten, dem Server, einem Signierdienst und einer MySQL-Datenbank. Es sollte unter derselben URL wie Ihr Registrierungsserver bereitgestellt werden.

Sie können Notary mithilfe seiner Docker Compose-Datei zum Laufen bringen:

git clone https://github.com/theupdateframework/notary.git
docker-compose up -d

Diese grundlegende Bereitstellung wird mit einem selbstsignierten TLS-Zertifikat ausgeführt. Es ist nur für Entwicklungszwecke vorgesehen. Sie müssen der Datei der Zertifizierungsstelle fixtures/root-ca.crt vertrauen im Repository, bevor sich Clients erfolgreich verbinden können.

sudo mkdir -p /usr/share/ca-certificates/extra
sudo cp fixtures/root-ca.crt /usr/share/ca-certificates/extra/notary.crt
sudo update-ca-certificates

Die obigen Befehle kopieren die Zertifikatsdatei in die ca-certificates Speicherort. update-ca-certificates lädt alle Zertifikate neu und fügt die Notarbehörde zu Ihrem System hinzu.

Wenn Sie Notary in der Produktion ausführen möchten, müssen Sie die Authentifizierung einrichten, damit nur autorisierte Benutzer neue Schlüssel hinzufügen können. Der NOTARY_AUTH Umgebungsvariable sollte gesetzt werden, wenn der Dienst mit docker-compose gestartet wird . Dies akzeptiert Base64-codierte Anmeldeinformationen in username:password Format. Sie werden aufgefordert, diese anzugeben, wenn Sie mit dem Notar interagieren.

export NOTARY_AUTH=$(echo "username" | base64):$(echo "password" | base64)
docker-compose up -d

Jetzt können Sie Ihren öffentlichen Schlüssel zu Ihrem Notarserver hinzufügen. Schlüssel werden pro Repository hinzugefügt. Auf diese Weise können Sie Bilder voneinander isolieren und die Unterstützung für delegierte Mitwirkende von Drittanbietern aktivieren. Sie können später andere Personen mit Veröffentlichungsrechten hinzufügen, indem Sie sie dazu bringen, den Befehl mit ihrem privaten Schlüssel zu wiederholen.

docker trust signer add your-key-name registry.example.com/my-image

Sie müssen die Passphrase des Schlüssels eingeben. Es ist dann auf Ihrem Registrierungsserver verfügbar.

Bilder signieren

Sobald sich Ihr Schlüssel in der Registrierung befindet, können Sie mit dem Signieren von Images beginnen. Verwenden Sie das docker trust sign Befehl. Stellen Sie sicher, dass jedes Bild mit der richtigen Registrierungs-URL gekennzeichnet ist.

docker trust sign registry.example.com/my-image:latest

Dieser Befehl signiert das Image mit Ihrem Schlüssel und schiebt es dann direkt in die Registrierung. docker push muss nicht manuell ausgeführt werden nachher. Sie müssen einen Repository-Schlüssel und eine Passphrase einrichten, um die Vertrauensdaten des einzelnen Images zu schützen. Folgen Sie jeder Eingabeaufforderung, um Ihre Signaturschlüssel einzurichten.

Wenn Sie bestehende Workflows mit docker push haben , können Sie sich für diesen Befehl anstelle von docker trust entscheiden . Führen Sie die vorherigen Schritte aus, um einen Schlüssel zu erstellen und ihn zu Notary hinzuzufügen. Legen Sie DOCKER_CONTENT_TRUST fest Umgebungsvariable, damit Docker CLI-Befehle Content Trust erkennen und automatisch anwenden.

export DOCKER_CONTENT_TRUST=1
docker push registry.example.com/my-image:latest

Sie werden sehen, dass die Shell-Ausgabe mit dem docker trust sign übereinstimmt produziert. Docker führt dieselben Aktionen aus wie der explizitere Befehl.

Verifizieren vertrauenswürdiger Bilder

Der DOCKER_CONTENT_TRUST Die Variable taucht mit größerer Bedeutung wieder auf, wenn es darum geht, von Ihnen abgerufene Bilder zu überprüfen. Docker versucht standardmäßig nicht, Images zu überprüfen, selbst wenn sie Vertrauensdaten enthalten. Sie müssen die Umgebungsvariable in Ihrer Shell festlegen, um die Inhaltsvertrauensvalidierung zu aktivieren.

export DOCKER_CONTENT_TRUST=1
docker pull registry.example.com/my-image:latest

Wenn die Variable gesetzt ist, werden alle Image-Pulls mit dem Notary-Server ihrer Registrierung verglichen. Wenn der Notar keine Vertrauensdaten bereitstellen kann, wird das Bild als nicht signiert behandelt und der Pull wird abgebrochen. Dies schützt Sie vor Bildern, die von böswilligen Akteuren veröffentlicht werden, die sich als echter Herausgeber ausgeben.

Docker Enterprise-Benutzer können eine optionale Daemon-Einstellung konfigurieren, um zu verhindern, dass Docker Engine mit nicht vertrauenswürdigen Images arbeitet, die sich bereits auf dem Host befinden. Diese sind möglicherweise in tar angekommen Archive aus einer unsicheren Quelle.

Bearbeiten Sie /etc/docker/daemon.json und fügen Sie den folgenden Schlüssel hinzu:

{
    "content-trust": {
        "mode": "enforced"
    }
}

Laden Sie die Docker-Daemon-Konfiguration mit systemctl reload docker neu um die Änderung zu übernehmen.

Sie können den Vertrauensstatus eines Images mit docker trust inspect überprüfen . Dadurch werden die mit dem Bild verknüpften Signaturen angezeigt, sodass Sie überprüfen können, ob es signiert wurde.

docker trust inspect registry.example.com/my-image:latest

Wenn Sie ein Bild veröffentlicht haben, das Sie nicht mehr signieren möchten, verwenden Sie den docker trust revoke Befehl. Dadurch werden die Vertrauensdaten des Images gelöscht, wodurch alle nachfolgenden Docker-Client-Verifizierungen fehlschlagen.

docker trust revoke registry.example.com/my-image:latest

Zusammenfassung

Docker Content Trust erweitert das Docker-Ökosystem um digitale Signaturen und erhöht so die Sicherheit bei der Verwendung von Bildern. Wenn Sie Bilder an Docker Hub übertragen, haben Sie bereits alles, was Sie zur Verwendung der Funktion benötigen. Legen Sie DOCKER_CONTENT_TRUST fest Umgebungsvariable und verwenden Sie Docker-Befehle wie gewohnt.

Für selbst gehostete Registrierungsbenutzer ist die Einrichtung komplizierter, aber in einer vertrauenskritischen Umgebung immer noch den Aufwand wert. Zum Zeitpunkt des Verfassens dieses Artikels hat Notary noch keine offizielle stabile Version und die Dokumentation befindet sich in seinem GitHub-Repository.


Docker
  1. So verschieben Sie Docker-Images zwischen Hosts

  2. So suchen, ziehen, listen und löschen Sie Docker-Images unter Linux

  3. So verwenden Sie Docker-Images, Container und Dockerfiles im Detail

  4. So teilen Sie Docker-Images mit anderen

  5. So ändern Sie Docker-Images

So erstellen Sie Docker-Images in einer GitLab-CI-Pipeline

So aktualisieren Sie Docker-Images auf die neueste Version

So kopieren Sie Dateien mit Docker cp in Ihren Docker-Container

Halten Sie Ihre Docker-Images mit Docker Image Prune überschaubar

So verwenden Sie Docker Commit zum Ändern von Container-Images

So listen / suchen / ziehen Sie Docker-Images unter Linux