如何在 Sonatype Nexus3 中通过 docker 标签限制内容选择器?
How to limit content selector by docker tag in Sonatype Nexus3?
如何在 Sonatype Nexus3 中只授予对特定标签和指定命名空间的访问权限?
例如,我们将使用名称为: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 运算符
||
或运算符
==
EQUAL 运算符
=~
正则表达式运算符
format == 'docker'
设置应该选择的格式类型
path == '/v2/'
按照说明授予登录和清单权限 docker v2 API specification
path=~'.*/blobs/.*'
授予对图像层的拉取权限
path=~'.*[0-9]+\.[0-9]+\.[0-9]+'
Semver-regex
最重要的部分是命名空间和Semver-regex、命名空间和blob路径的结合。
编辑:
请参阅 rseddons answer 以获得更深入的解释。
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/"
如何在 Sonatype Nexus3 中只授予对特定标签和指定命名空间的访问权限?
例如,我们将使用名称为: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 运算符||
或运算符==
EQUAL 运算符=~
正则表达式运算符format == 'docker'
设置应该选择的格式类型path == '/v2/'
按照说明授予登录和清单权限 docker v2 API specificationpath=~'.*/blobs/.*'
授予对图像层的拉取权限path=~'.*[0-9]+\.[0-9]+\.[0-9]+'
Semver-regex
最重要的部分是命名空间和Semver-regex、命名空间和blob路径的结合。
编辑:
请参阅 rseddons answer
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/"