如何仅授予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运营商||
OR运营商==
EQUAL运算符=~
REGEX运营商format == 'docker'
设置应选择的格式类型path == '/v2/'
授予docker v2 API specification解释的登录和清单权限path=~'.*/blobs/.*'
授予对图像层的拉取访问权限path=~'.*[0-9]+\.[0-9]+\.[0-9]+'
Semver-regex最重要的部分是命名空间和Semver-regex,命名空间和blob路径的组合。
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/"