Nexus Docker 并通过内容选择器限制访问

问题描述 投票:0回答:1

错误报告或寻求帮助: 我正在尝试在我的组织中实现私有 docker 注册表,并且需要在我的注册表中进行多租户。例如,A 组可以访问其容器,但 B 组则不能。

文档暗示我可以通过内容选择器来执行此操作,内容选择器可用于授予对查询结果的访问权限,有点像视图。我取得了一些成功,但遇到了看起来像错误的问题。

  • 我在
    :5000
    创建了一个注册表。
  • 匿名访问已关闭。
  • 我创建了一个测试用户。
  • 我创建了一个内容选择器,它应该限制对名称中带有“spark”的容器的访问。
    path =~ ".*spark.*"

查询预览输出预期结果。 现在我尝试

docker login
。我收到 403 Forbidden。

如果我向测试用户授予

nx-repository-view-docker-*-read
角色,则测试用户可以
docker login
访问注册表并查看所有容器。 (可能是故意的) 不过,内容选择器并不限制访问。

但是,如果我在成功

nx-repository-view-docker-*-read
后删除
docker login
角色,并保留内容选择器角色,内容视图确实会按预期工作。

这并不是一个真正可行的解决方案,但就可能丢失/出现错误的内容而言非常有趣。

有什么想法吗?我只是做错了吗? 我发现一篇文章表明官方答案是在不同的端口上创建多个注册表并以这种方式允许它们。 可行,但并不理想。

另请参阅: 通过脚本创建内容选择器和权限,将 Docker 注册表分离到项目拥有的命名空间中

nexus
1个回答
10
投票

简短回答:

尝试

format == "docker" && ( path == "/v2/" || path =~ ".*spark.*" )

说明:

正如您所注意到的,问题在于

docker login
。如果内容选择器中未指定
path == "/v2/"
,则此命令不起作用。这不会授予对任何容器的访问权限,而是授予注册表本身的访问权限,因此添加它将允许您登录。除此之外,您的内容选择器应该按预期工作。就是这样!

不幸的是,到目前为止,这还没有包含在文档中。

© www.soinside.com 2019 - 2024. All rights reserved.