【发布时间】:2019-08-24 02:44:32
【问题描述】:
如何只授予对 Sonatype Nexus3 中特定标签和指定命名空间的访问权限?
【问题讨论】:
标签: docker docker-registry sonatype nexus3
如何只授予对 Sonatype Nexus3 中特定标签和指定命名空间的访问权限?
【问题讨论】:
标签: docker docker-registry sonatype nexus3
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/"
【讨论】:
作为示例,我们将使用名称为: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路径的组合。
【讨论】: