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

时间:2019-04-02 17:25:57

标签: docker docker-registry sonatype nexus3

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

2 个答案:

答案 0 :(得分:2)

作为示例,我们将使用名称为docker.domain.com/namespace/image:1.1.1

的图像

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

内容选择器

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

说明

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

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

编辑: 有关更深入的说明,请参见rseddon的答案here

答案 1 :(得分: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/"