如何仅授予对Sonatype Nexus3中特定标签和指定名称空间的访问权限?
答案 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路径的组合。
答案 1 :(得分: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/"