开发人员 运行 如何在无法访问 .gitlab-ci.yml 的情况下管道

how developers run pipeline without access on .gitlab-ci.yml

.gitlab-ci.yml 配置文件不应该暴露给任何具有“开发者”规则的用户,因为它可能会授予对变量和基础设施的不需要的访问权限,或者做出不同类型的利用行为或只是不需要的更改可能。

因此,根据https://gitlab.com/secure-ci-config-poc/ci-configs,我做了项目和流水线;但是如果推送的用户在包含所有配置的 ci-configs 项目上没有记者或开发人员或其他高权限,则管道失败!

Found errors in your .gitlab-ci.yml:

    Project `root/ci-configs` not found or access denied!

现在,我该如何解决这个错误?!所以开发人员可以 运行 管道,但不能访问配置文件和 .gitlab-ci.yml 文件?

谢谢大家

您不能阻止用户读取配置。触发管道的用户必须至少对 CI yaml 文件具有 read 访问权限。但是,绝不能将机密存储在 YAML 文件中,因此读取访问通常不会有问题。

您可以阻止写入 访问,但触发管道的用户必须能够读取所有配置文件。这确实是保护 CI 配置的主要目标——防止对 CI 配置执行恶意更改。

if the user who pushes don't have reporter or developer or other high permissions on ci-configs project which contains all configurations, pipeline fails

配置项目应具有 public 或内部可见性以避免此问题,如 described in the GitLab documentation:

If the configuration file is in a separate project, you can set more granular permissions. For example:

  • Create a public project to host the configuration file.
  • Give write permissions on the project only to users who are allowed to edit the file.

Then other users and projects can access the configuration file without being able to edit it.

(强调)

如果您绝对需要将项目设置为私有可见性,您可以考虑授予开发人员访问权限,但创建需要维护者访问权限或更高权限才能推送更改的受保护分支规则。

其他注意事项

即使您阻止访问对 CI 配置文件的写入更改,如果 CI 配置执行存储库中编写的任何代码(例如 运行 单元测试) 那么你真的没有解决任何问题。考虑一下,例如,恶意代码可以嵌入到测试代码中!

可能会有 CI 配置不执行用户代码,但这是您需要考虑的事情。如果您需要 CI 配置来执行 user-provided 代码(如 运行 测试),那么以这种方式保护您的 CI 配置可能不是很有利environment/variables.