Blog
So speichern Sie Ihre Docker-Registry-Zugangsdaten in 1Password mit einem Credential Helper

In diesem Blog erfahren Sie, wie Sie die Anmeldedaten der Docker-Registry in 1Password speichern können. Ich möchte dies tun, weil ich gerade dabei bin, alle Klartext-Anmeldeinformationen aus den Konfigurationsdateien in 1Password zu entfernen.
Anmeldeinformationen für die Docker-Registrierung
Docker speichert normalerweise alle Anmeldeinformationen für Container-Registrierungen in ~/.docker/config.json, wie unten gezeigt:
{
"auths": {
"ghcr.io": {
"auth": "bXlsb25ndXNlcm5hbWU6YXZlcnlsb25ncGFzc3dvcmQ="
}
}
}
Wie Sie sehen können, werden die Anmeldedaten in base64 kodierter Form gespeichert. Dies ist nicht sehr sicher, da jeder, der Zugriff auf die Datei hat, die Anmeldeinformationen stehlen kann.
Docker Desktop Credential Helper
Wenn Sie Docker Desktop verwenden, wird der Desktop Credential Helper normalerweise wie unten gezeigt konfiguriert:
{
"credsStore": "desktop",
"auths": {
"ghcr.io": {}
}
}
Dadurch wird der Berechtigungsnachweis im OS/X-Schlüsselbund gespeichert, was besser ist als die base64-Kodierung in einer Textdatei. Allerdings haben Sie über die Programme docker-credential-desktop und docker-credential-osxkeychain immer noch unauthentifizierten Zugriff auf das Geheimnis.
$ docker-credential-desktop get <<< ghcr.io
{"Username":"mylongusername", "Secret": "averylongpassword", "ServerURL": "ghcr.io"}
Das liegt daran, dass Docker Desktop standardmäßig Zugriff auf die ausführbare Hilfsprozedur docker-credential-osxkeychain gewährt, wie im folgenden Screenshot zu sehen ist.

Wenn diese Berechtigung entfernt wird, werden Sie bei jedem Zugriff auf die Registrierungsdaten nach Ihrem Passwort gefragt. Das ist gut, aber ziemlich mühsam. Leider ist es nicht möglich, den Fingerabdruck zur Authentifizierung zu verwenden.
Verwendung des 1Password Passwort-Managers
Der 1Password Passwortmanager bietet eine Befehlszeilenschnittstelle, über die Sie auf jedes in Ihrem Tresor gespeicherte Geheimnis zugreifen können. Der folgende Befehl zeigt, wie Sie mit der 1Password-Befehlszeilenschnittstelle ein Github Enterprise-Token abrufen und es als Umgebungsvariable an das gh-Kommandozeilentool übergeben können:
GH_ENTERPRISE_TOKEN="$(op read "op://Private/github enterprise token/credential")" gh list
Sie können dieses Dienstprogramm verwenden, um einen Docker Credential Helper für 1Password zu implementieren.
Docker Credential-Helfer für 1Password
Der Docker-Helfer für Anmeldedaten ist ein Programm, das Anmeldedaten liest und in einen sicheren Speicherort schreibt. Um einen Credential Helper für 1Password zu implementieren, müssen Sie ein Programm namens docker-credential-1password erstellen und die Befehle store, list, get und erase implementieren.
Anmeldedaten in 1Password speichern
Der Befehl store liest ein json-Objekt mit den Werten ServerURL, Benutzername und Geheimnis aus stdin und speichert es in 1Password.
$ docker-credential-1password store <<EOF
{
"ServerURL": "https://example.com",
"Username": "myusername",
"Secret": "averylongpassword"
}
EOF
Anmeldeinformationen in 1Password auflisten
Der Befehl list gibt ein json-Objekt mit allen Server-URL- und Benutzernamenpaaren im 1Password-Dockingdepot aus.
$ docker-credential-1password list
{
"https://example.com": "myusername"
}
Anmeldeinformationen von 1Password abrufen
Der Befehl get liest den Registry-Namen von stdin und gibt ein json-Objekt mit den Werten ServerURL, Username und Secret aus.
$ docker-credential-1password get <<< example.com
{"ServerURL": "https://example.com", "Username": "myusername", "Secret": "averylongpassword"}
Anmeldeinformationen aus 1Password löschen
Der Löschbefehl liest den Registrierungsnamen aus stdin und entfernt die Anmeldedaten aus 1Password.
$ docker-credential-1password erase <<< example.com
Der Clou ist, dass der Benutzer jedes Mal, wenn ein neuer Prozess auf die Anmeldedaten zugreifen möchte, zur Autorisierung aufgefordert wird. Sie können Touch ID konfigurieren, um diesen Prozess bequemer zu gestalten.
Installation der 1Password-Anmeldehilfe
Um den 1Password Credential Helper zu verwenden, müssen Sie ihn installieren, die Credentials kopieren und die Docker-Konfiguration aktualisieren, um ihn zu verwenden.
Installieren Sie die 1Password-Anmeldehilfe im Pfad
Der 1Password Credential Helper ist ein einfaches Shell-Skript, das Sie installieren können, indem Sie es in ein Verzeichnis in Ihrem PATH kopieren.
$ cd /usr/local/bin
$ wget https://raw.githubusercontent.com/xebia/docker-credential-1password/refs/heads/main/bash/docker-credential-1password
$ chmod +x docker-credential-1password
Kopieren Sie die Anmeldedaten in 1Password
Jetzt können Sie alle Anmeldedaten aus der Docker-Desktop-App in 1Password kopieren:
docker-credential-desktop list |
jq -r '.|to_entries|map(.key|sub("^https://"; ""))|.[]' |
while read registry; do
docker-credential-desktop get <<< $registry |
docker-credential-1password store
done
Aktualisieren Sie die Docker-Konfiguration
Schließlich konfigurieren Sie die 1Password-Anmeldedatenhilfe, indem Sie die Docker-Konfiguration ~/.docker/config.json aktualisieren. Dazu ändern Sie alle Verweise auf die Anmeldeinformationshilfe "desktop" in "1password", wie unten gezeigt.
{
"auths": {
"ghcr.io": {}
}
"credsStore": "1password",
"credHelpers": {
"ghcr.io": "1password"
}
}
Fazit
In diesem Blog haben Sie gesehen, wie Sie Ihre Anmeldedaten für die Container-Registrierung in 1Password mit Hilfe eines einfachen Hilfsprogramms für Anmeldedaten speichern und so Klartext-Anmeldedaten und unautorisierten Zugriff auf Ihre Container-Registrierung vermeiden können.
Bild von carmen6969 aus Pixabay
Verfasst von

Mark van Holsteijn
Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.
Contact



