项目级安全文件
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
此功能是 Mobile DevOps 的一部分。 该功能仍在开发中,但您可以:
您可以安全存储最多 100 个文件作为安全文件,用于 CI/CD 管道。这些文件安全地存储在项目仓库之外,且不受版本控制。在这些文件中存储敏感信息是安全的。安全文件支持纯文本和二进制文件类型,但文件大小必须小于或等于 5 MB。
您可以在项目设置中管理安全文件,或使用 安全文件 API。
通过使用 download-secure-files 工具,安全文件可以被 CI/CD 作业下载和使用。
向项目添加安全文件
要将安全文件添加到项目中:
- 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
- 选择 设置 > CI/CD。
- 展开 安全文件 部分。
- 选择 上传文件。
- 找到要上传的文件,选择 打开,文件上传将立即开始。 上传完成后,文件将显示在列表中。
在 CI/CD 作业中使用安全文件
使用 download-secure-files 工具
要在 CI/CD 作业中使用您的安全文件,可以使用 download-secure-files 工具在作业中下载文件。下载完成后,您可以将其与其他脚本命令一起使用。
在作业的 script 部分添加命令,以下载并执行 download-secure-files 工具。文件将下载到项目根目录的 .secure_files 目录中。要更改安全文件的下载位置,请在 SECURE_FILES_DOWNLOAD_PATH CI/CD 变量 中设置路径。
例如:
test:
variables:
SECURE_FILES_DOWNLOAD_PATH: './where/files/should/go/'
script:
- curl --silent "https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/download-secure-files/-/raw/main/installer" | bash使用 download-secure-files 工具加载的文件内容在作业日志输出中不会被 屏蔽。请确保避免在作业日志中输出安全文件内容,特别是当记录可能包含敏感信息的输出时。
使用 glab 工具
要使用 glab 下载一个或多个安全文件,您可以在 CI/CD 作业中使用 cli Docker 镜像。例如:
test:
image: registry.gitlab.com/gitlab-org/cli:latest
script:
- export GITLAB_HOST=$CI_SERVER_URL
- glab auth login --job-token $CI_JOB_TOKEN --hostname $CI_SERVER_FQDN --api-protocol $CI_SERVER_PROTOCOL
- glab -R $CI_PROJECT_PATH securefile download $SECURE_FILE_ID --path="where/to/save/file.txt"SECURE_FILE_ID CI/CD 变量需要显式传递给作业,例如在 CI/CD 设置 中或 手动运行管道 时。其他所有变量都是 预定义变量,会自动可用。
或者,您也可以不使用 Docker 镜像,而是 下载二进制文件 并在您的 CI/CD 作业中使用它。
安全详情
项目级安全文件在上传时使用 Lockbox Ruby gem 通过 Ci::SecureFileUploader 接口进行加密。该接口在上传期间生成源文件的 SHA256 校验和,并将其与数据库中的记录一起持久化,以便在下载文件时用于验证文件内容。
为每个文件创建时会生成一个 唯一的加密密钥,并存储在数据库中。加密的上传文件根据 GitLab 实例配置 存储在本地存储或对象存储中。
单个文件可以通过 安全文件下载 API 检索。元数据可以通过 列表 或 显示 API 端点检索。文件也可以通过 download-secure-files 工具检索。该工具在下载文件时会自动验证每个文件的校验和。
任何至少具有 Developer 角色的项目成员都可以访问项目级安全文件。与项目级安全文件的交互不包含在审计事件中,但 问题 117 提议添加此功能。