Nexus docker 存储库-匿名访问选定的工件

Nexus docker 存储库-匿名访问选定的工件

用例:允许拉动已选择(例如标记为*-public)Docker 镜像匿名。否则需要凭证。

鉴于:最新的 Nexus 3.52.0,它可以与docker loginLDAP 凭据一起使用而不会出现问题。

尝试过:

  • 选择器 + 特权 + 角色(全部命名为 docker-images-public)> 指定使用“匿名”,启用“匿名访问”,使用相同的用户和本地授权领域。
  • 结果:守护进程的错误响应:获取 https://HOST/v2/infrastructure/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. #管理员/安全/用户:匿名
  • 删除授予拉取所有图像权限的nx-anonymous用户角色anonymous
  • 授予新docker-images-public角色

相关内容