Nexus docker 儲存庫 - 匿名存取選取的工件

Nexus docker 儲存庫 - 匿名存取選取的工件

使用案例:允許拉動已選擇(例如標記為*-public)匿名 Docker 映像。否則需要憑證。

鑑於:最新的 Nexus 3.52.0,它可以使用docker loginLDAP 憑證,沒有問題。

嘗試過:

  • 選擇器 + 權限 + 角色(全部命名為 docker-images-public)> 允許使用“匿名”,啟用“匿名存取”,具有相同的使用者和本地授權領域。
  • 結果:來自守護程序的錯誤回應:取得https://HOST/v2/infrastruct/IMAGE/manifests/VERSION-public:沒有基本驗證憑證預期:能夠docker pull 映像,與內容選擇器相符(例如「.* -public”) )

另外嘗試過:

  1. 在日誌中啟用 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'}}

  2. 前面沒有 Nginx(例如 docker pull HOST:5000/IMAGE:VERSION-public,透過 HTTP)

    結果:相同。原因:看到 StackOverflow 答案提到 Auth 標頭修改。想要將 Nginx 完全排除在等式之外。

  3. 簡單選擇器

    選擇器是format == "docker" && ( path == "/v2/" || path =~ ".*public" || path == "/v2/.*") 經過幾次嘗試修改的選擇器,包括來自的建議https://stackoverflow.com/questions/43354352/nexus-docker-and-restricting-access-via-content-selector(很可能不是)但是,錯誤與選擇器無關,因為即使使用format == "docker" && path =~ ".*"

  4. 賦予anonymous使用者nx-admin角色

    結果:同樣的錯誤,所以原因不在anonymous權限中

  5. 激活 Docker Bearer Token Realm,按照https://help.sonatype.com/repomanager3/nexus-repository-administration/formats/docker-registry/docker-authentication

    結果:同樣的錯誤

  6. 在儲存庫層級啟用匿名存取(複選框「允許匿名 docker pull(需要 Docker Bearer Token Realm)」)

    結果:整個儲存庫可以匿名存取。不行。

我看到的唯一的其他選擇是在不同連接埠上建立一個單獨的 docker 儲存庫,僅用於公共匿名存取。

答案1

缺少的部分是:刪除使用者nx-anonymous的預設角色anonymous,使其能夠提取整個儲存庫。

一般來說,配置:

  1. 建立選擇器 format == "docker" && path =~ ".*-public"+權限+角色(全部命名docker-images-public
  2. #admin/security/realms - 激活Docker Bearer Token Realm
  3. #admin/repository/repositories:docker-repository,啟用Allow anonymous docker pull ( Docker Bearer Token Realm required )docker 儲存庫的複選框
  4. #admin/安全/使用者:匿名
  • 刪除授予拉取所有鏡像存取權限的nx-anonymous使用者的角色anonymous
  • 授予新docker-images-public角色

相關內容