
Anwendungsfall: Ziehen zulassenausgewählt(z. B. markiert als *-public
) Docker-Images anonym. Andernfalls sind Anmeldeinformationen erforderlich.
Gegeben: neuestes Nexus 3.52.0, es funktioniert docker login
ohne Probleme mit LDAP-Anmeldeinformationen.
Versucht:
- Selektor + Berechtigung + Rolle (alle mit dem Namen „docker-images-public“) > zur Verwendung „anonym“, „Anonymer Zugriff“ aktiviert, mit demselben Benutzer und lokalem Autorisierungsbereich.
- Ergebnis: Fehlerantwort vom Daemon: Get https://HOST/v2/infrastructure/IMAGE/manifests/VERSION-public: keine grundlegenden Authentifizierungsdaten. Erwartet: Möglichkeit zum Docker-Pull von Images, die dem Inhaltsselektor entsprechen (z. B. „.*-public“).
Zusätzlich versucht:
Aktivieren der TRACE-Protokollebene im Protokoll
Ergebnis: eine Menge Ausgabe, aber ohne konkreten Grund für die Ablehnung (zumindest habe ich keinen gesehen). Einer der Strings:
DEBUG [qtp194038341-106] *UNKNOWN org.sonatype.nexus.repository.view.Router - Response: Response{status=Status{successful=false, code=401, message='null'}, payload=StringPayload{size=113, charset=UTF-8, contentType='application/json'}}
ohne Nginx davor (zB docker pull HOST:5000/IMAGE:VERSION-public, über HTTP)
Ergebnis: dasselbe. Grund: Habe Antworten von StackOverflow gesehen, in denen die Änderung des Auth-Headers erwähnt wird. Wollte Nginx vollständig aus der Gleichung ausschließen.
Vereinfachender Selektor
Selector ist
format == "docker" && ( path == "/v2/" || path =~ ".*public" || path == "/v2/.*")
Selector wurde in mehreren Versuchen geändert, einschließlich Ratschlägen vonhttps://stackoverflow.com/questions/43354352/nexus-docker-and-restricting-access-via-content-selector(höchstwahrscheinlich nicht) Der Fehler liegt jedoch nicht am Selektor, da der Fehler auch beiformat == "docker" && path =~ ".*"
anonymous
Benutzerrolle zuweisennx-admin
Ergebnis: derselbe Fehler, der Grund liegt also nicht in
anonymous
den BerechtigungenAktivieren
Docker Bearer Token Realm
gemäßhttps://help.sonatype.com/repomanager3/nexus-repository-administration/formats/docker-registry/docker-authenticationErgebnis: gleicher Fehler
Anonymen Zugriff auf Repository-Ebene aktivieren (Kontrollkästchen „Anonymen Docker Pull zulassen (Docker Bearer Token Realm erforderlich)“)
Ergebnis: Auf das gesamte Repository kann anonym zugegriffen werden. Wird NICHT gemacht.
Die einzige andere Alternative, die ich hier sehe, ist die Erstellung eines separaten Docker-Repository auf einem anderen Port NUR für den öffentlichen anonymen Zugriff.
Antwort1
Der fehlende Teil war: Die Standardrolle nx-anonymous
des anonymous
Benutzers wurde entfernt, wodurch das gesamte Repository abgerufen werden konnte.
Generelle Konfiguration:
- Selector
format == "docker" && path =~ ".*-public"
+ Privileg + Rolle erstellen (alle benanntdocker-images-public
) - #admin/security/realms - aktivieren
Docker Bearer Token Realm
- #admin/repository/repositories:docker-repository, Kontrollkästchen
Allow anonymous docker pull ( Docker Bearer Token Realm required )
für Docker-Repository aktivieren - #admin/Sicherheit/Benutzer:anonymous
- Entfernen Sie
nx-anonymous
die Rolle des Benutzersanonymous
, der den Zugriff zum Abrufen aller Bilder gewährt hat. - neue
docker-images-public
Rolle gewähren