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

时间:2017-04-11 19:09:35

标签: nexus

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

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

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

查询预览输出预期结果。 现在我尝试docker login。我得到了一个403 Forbidden。

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

但是,如果在成功nx-repository-view-docker-*-read后删除docker login角色,并保留内容选择器角色,则内容视图将按预期工作。

不是一个可行的解决方案,但在可能缺失/错误的方面非常有趣。

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

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

1 个答案:

答案 0 :(得分:6)

欢迎来到SO!

简答:

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

<强>解释

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

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