限制对gitlab容器注册表的访问

时间:2018-05-05 22:08:32

标签: gitlab gitlab-ci gitlab-ci-runner gitlab-omnibus

我希望能够让用户将docker文件和代码一起推送到gitlab并让gitlab构建映像,然后由经过身份验证的项目用户提取。

问题是,我想确保用户不要将docker镜像直接推送到gitlab容器注册表,以便我们可以查看docker文件和控件,并确保Dockefiles使用Redhat only registry来拉东西从。

我们如何阻止用户将自己构建的图像推送到gitlab? 换句话说,我们如何确保gitlab项目的容器注册表中的docker镜像是由dockerfile的gitlab构建的,而不是项目用户direclty从其他地方推送的那个?

2 个答案:

答案 0 :(得分:2)

我认为目前不可能。如果您选中gitlab's permissions model,则会看到用户访问级别确定了您可以在容器注册表中执行的操作:

  • 阅读权限可作为Reporter +
  • 获得
  • 更新权限可通过Developer +
  • 获得

如果您的用户是开发人员,则他们将能够将图像推送到注册表。如果要将其限制为gitlab-ci构建,则需要使用protected branches并将用户限制为Reporter访问级别(可能不是您想要的级别)。

一个令人费解的替代方案是设置第二个用作图像源的项目,并将其构建设置配置为从第一个受保护的项目分支中提取。在第一个项目中提交到受保护分支的承诺将始终必须进行审查,并且将从第二个项目中提取docker映像。

答案 1 :(得分:1)

我正在做类似的评估,尽管我真的很喜欢Gitlab的整体产品,但这对我来说是一个潜在的阻碍。

另一种可能的解决方法是使用deploy tokens。一个潜在的问题是,它们是按项目授予的,因此,如果您想授予对许多图像的访问权限,则可能会很麻烦。另一方面,您可以指定一个项目来包含所有图像(您可以在一个Gitlab项目注册表中存储多个图像名称),并设置CI脚本以将所有内容推送到那里。

也许更有用的是使用personal access tokens。这些是为用户全局设置的,您可以指定任意数量(例如,每个客户一个),设置到期日期,并限制对read_registry的访问。