
使用案例:允許拉動已選擇(例如標記為*-public
)匿名 Docker 映像。否則需要憑證。
鑑於:最新的 Nexus 3.52.0,它可以使用docker login
LDAP 憑證,沒有問題。
嘗試過:
- 選擇器 + 權限 + 角色(全部命名為 docker-images-public)> 允許使用“匿名”,啟用“匿名存取”,具有相同的使用者和本地授權領域。
- 結果:來自守護程序的錯誤回應:取得https://HOST/v2/infrastruct/IMAGE/manifests/VERSION-public:沒有基本驗證憑證預期:能夠docker pull 映像,與內容選擇器相符(例如「.* -public”) )
另外嘗試過:
在日誌中啟用 TRACE 日誌級別
結果:輸出很多,但是沒有具體的拒絕理由(至少我沒看到)。字串之一:
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'}}
前面沒有 Nginx(例如 docker pull HOST:5000/IMAGE:VERSION-public,透過 HTTP)
結果:相同。原因:看到 StackOverflow 答案提到 Auth 標頭修改。想要將 Nginx 完全排除在等式之外。
簡單選擇器
選擇器是
format == "docker" && ( path == "/v2/" || path =~ ".*public" || path == "/v2/.*")
經過幾次嘗試修改的選擇器,包括來自的建議https://stackoverflow.com/questions/43354352/nexus-docker-and-restricting-access-via-content-selector(很可能不是)但是,錯誤與選擇器無關,因為即使使用format == "docker" && path =~ ".*"
賦予
anonymous
使用者nx-admin
角色結果:同樣的錯誤,所以原因不在
anonymous
權限中激活
Docker Bearer Token Realm
,按照https://help.sonatype.com/repomanager3/nexus-repository-administration/formats/docker-registry/docker-authentication結果:同樣的錯誤
在儲存庫層級啟用匿名存取(複選框「允許匿名 docker pull(需要 Docker Bearer Token Realm)」)
結果:整個儲存庫可以匿名存取。不行。
我看到的唯一的其他選擇是在不同連接埠上建立一個單獨的 docker 儲存庫,僅用於公共匿名存取。
答案1
缺少的部分是:刪除使用者nx-anonymous
的預設角色anonymous
,使其能夠提取整個儲存庫。
一般來說,配置:
- 建立選擇器
format == "docker" && path =~ ".*-public"
+權限+角色(全部命名docker-images-public
) - #admin/security/realms - 激活
Docker Bearer Token Realm
- #admin/repository/repositories:docker-repository,啟用
Allow anonymous docker pull ( Docker Bearer Token Realm required )
docker 儲存庫的複選框 - #admin/安全/使用者:匿名
- 刪除授予拉取所有鏡像存取權限的
nx-anonymous
使用者的角色anonymous
- 授予新
docker-images-public
角色