如何在Sonatype Nexus3中通过docker标记限制内容选择器?

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

如何仅授予Sonatype Nexus3中特定标签和指定命名空间的访问权限?

docker docker-registry sonatype nexus3
2个回答
2
投票

例如,我们将使用名称为docker.domain.com/namespace/image:1.1.1的图像

我们只希望允许用户提取具有与我们的Semver正则表达式匹配的标记的图像。 (您可以根据自己的需要调整正则表达式)

Content Selector

format == 'docker'  
&& (
    path == '/v2/' 
    || (
        path =~ '.*/namespace/.*' 
        && (
            path =~ '.*[0-9]+\.[0-9]+\.[0-9]+'
            || path =~ '.*/blobs/.*'
            )
        )
    )

Explanation

  • && AND运营商
  • || OR运营商
  • == EQUAL运算符
  • =~ REGEX运营商
  • format == 'docker'设置应选择的格式类型
  • path == '/v2/'授予docker v2 API specification解释的登录和清单权限
  • path=~'.*/blobs/.*'授予对图像层的拉取访问权限
  • path=~'.*[0-9]+\.[0-9]+\.[0-9]+' Semver-regex

最重要的部分是命名空间和Semver-regex,命名空间和blob路径的组合。

编辑:请参阅rseddons回答here以获得更深入的解释。


1
投票

Docker镜像在Nexus中存储如下:

enter image description here

blob是docker层,它们可以(通常是)在多个docker镜像之间共享。这种层的共享是docker是存储VM的有效格式的原因。但这也意味着您无法限制对图层的访问,您只能限制对清单和标记的访问。因此,您需要创建一个允许访问所有图层的内容选择器权限。

此外,您需要允许访问/v2/以进行docker登录,并使用/v1/search进行搜索。

所以你需要一个像这样的内容选择器权限,允许访问每个人都需要的东西:

path =~ "/v2/|/v2/blobs/.*|/v2/search/.*"

在此之后,您可以使用以下内容选择器选择性地允许访问清单和标记:

path =^ "/v2/some-docker-image/"

path =^ "/v2/library/ubuntu/"
© www.soinside.com 2019 - 2024. All rights reserved.