【问题标题】:How to limit content selector by docker tag in Sonatype Nexus3?如何在 Sonatype Nexus3 中通过 docker 标签限制内容选择器?
【发布时间】:2019-08-24 02:44:32
【问题描述】:

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

【问题讨论】:

    标签: docker docker-registry sonatype nexus3


    【解决方案1】:

    Docker 镜像在 Nexus 中是这样存储的:

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

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

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

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

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

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

    【讨论】:

      【解决方案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 运算符
      • == EQUAL 运算符
      • =~正则表达式运算符
      • format == 'docker' 设置应该选择的格式类型
      • path == '/v2/' 授予登录和清单特权,如 docker v2 API specification 所述
      • path=~'.*/blobs/.*' 授予对图像层的拉取访问权限
      • path=~'.*[0-9]+\.[0-9]+\.[0-9]+' Semver-正则表达式

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

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

      【讨论】:

      • 你刚刚在一篇文章中解决了这个问题,这个问题在我可怜的脑海里已经好几个星期了。你会接受一个拥抱吗? :) 谢谢。
      猜你喜欢
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 2015-10-20
      • 2020-07-31
      • 1970-01-01
      • 2022-11-02
      • 2017-02-12
      相关资源
      最近更新 更多