2017-04-11 49 views
1

Bug报告或请求帮助: 我试图在我的组织中实现私人码头注册表,并且需要在我的注册表中使用多租户。 A组可以访问他们的容器,但不能访问B组。Nexus Docker和通过内容选择器限制访问

该文档暗示我可以通过内容来做到这一点选择器可以用来授予对查询结果的访问权限,就像一个视图。我已经取得了一些成功,但遇到了bug。

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

查询的预览输出预期结果。 现在我试试docker login。我得到一个403禁止。

如果我授予我的测试用户nx-repository-view-docker-*-read角色,测试用户可以将docker login注册到注册表并查看所有容器。 (可能是故意的) 虽然内容选择器不限制访问。然而,如果我在成功删除docker login后删除nx-repository-view-docker-*-read角色,并保留内容选择器角色,则内容视图将按预期工作。

不是一个真正可行的解决方案,但非常有趣的是什么可能会丢失/错误。

任何想法?我只是做错了吗? 我发现一篇文章指出官方的答案是在不同的端口上创建多个注册表并允许他们这样做。 可行,但不理想。

参见: Create Content Selector and Privileges via script for separating a docker registry into project owned namespaces

回答

5

欢迎SO!

简短的回答:

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

说明:

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

不幸的是,到目前为止,这并未包含在文档中。

+0

你好@jonas,也许你想为我们写一篇博客文章? – DarthHater

+0

Hi @DarthHater,抱歉,我没有博客 – Jonas

+0

但是我们做到了! :)这是我的查询,如果你想为我们写一篇文章@Jonas – DarthHater