sto*_*lho 5 permissions wildcard nexus sonatype docker-registry
我已经安装了Sonatype Nexus 3 OSS和Docker的托管存储库(Docker的私有注册表).我希望有几个用户,可以根据他们的权限提取/推送泊坞窗图像.
第一种方式,我怎么做 - 是为docker创建几个托管存储库,然后通过Securiy - > Privileges使用存储库视图,这种方法基于确切的存储库配置权限:
username: repository name: permission:
user1 docker-internal-1 nexus:repository-view-:docker:docker-internal-1:read
user2 docker-internal-1 nexus:repository-view-:docker:docker-internal-1:add
user3 docker-internal-2 nexus:repository-view-:docker:docker-internal-2:read
user4 docker-internal-2 nexus:repository-view-:docker:docker-internal-2:add
Run Code Online (Sandbox Code Playgroud)
这种方法有效,但它需要为docker提供多个托管存储库.
我的问题是 - 在某种程度上可能有一个单一的托管存储库,然后根据docker存储库命名空间配置权限吗?
所以假设我有一个名为docker-internal的存储库,然后我有这样的权限:
username: repository name: permission:
user1 docker-internal nexus:repository-view-:docker:docker-internal/namespace1:read
user2 docker-internal nexus:repository-view-:docker:docker-internal/namespace1:add
user3 docker-internal nexus:repository-view-:docker:docker-internal/namespace2:read
user4 docker-internal nexus:repository-view-:docker:docker-internal/namespace2:add
Run Code Online (Sandbox Code Playgroud)
不幸的是,在Nexus 3文档中,我还没有找到一种如何使用存储库视图权限来执行此操作的原因,因为它们只允许您指定存储库名称,但不允许指定存储库名称.然后就是通配符,它在Sonatype docs中描述,如"通配符 - >这些是使用模式对其他权限进行分组的权限".所以我试图像这样创建一些正则表达式模式:
nexus:repository-view:docker:docker-internal/namespace1:read
Run Code Online (Sandbox Code Playgroud)
不幸的是它不起作用.
我们找到了一种将内容选择器和权限结合起来以支持图像级别权限的方法。
首先,您必须创建两个内容选择器:
format=="docker" and path=~"/v2/"。如果您也支持 v1 协议,请确保为其创建另一个选择器。format=="docker" and path=~".*/foo/bar-linux/.*"第一个选择器非常重要,因为没有它,您将无法创建允许用户登录的规则。
然后根据内容选择器创建两个权限:
然后创建一个仅具有这两个权限的角色,并将其与用户关联。它应该有效。
使用某些命令时请注意意外行为:https ://issues.sonatype.org/browse/NEXUS-12220
基于Sonatype Nexus支持的答案,目前无法通过docker注册表中的通配符和命名空间来实现.因此,唯一可行的方法是使用单独的docker存储库和存储库视图权限.