不修改GitLab变量设置 如何获取被屏蔽的CI/CD变量明文值
解决方案
GitLab的日志屏蔽机制仅会扫描作业输出的文本内容,匹配到和秘密变量完全一致的字符串时才会替换为[MASKED],不会修改运行环境中变量的实际值,不需要更改变量配置也可以拿到原始值,常用方法如下:
- 拆分输出
把变量内容拆分成多个片段输出,避免完整的变量值出现在日志中即可绕过匹配,示例命令:# 逐字符打印变量值 for (( i=0; i<${#Secret_variable}; i++ )); do echo -n "${Secret_variable:$i:1}"; done; echo # 给每个字符后加空格输出 echo "${Secret_variable//?/& }" - 编码后输出
对变量做一次编码再打印,本地解码即可得到原始值,最常用的是base64编码,示例命令:
本地拿到编码结果后执行# 输出变量的base64编码结果 echo -n "$Secret_variable" | base64echo "编码后的字符串" | base64 -d即可还原原始值。 - 写入制品文件下载
直接把变量值写入作业的制品文件,不经过日志输出,作业跑完后下载制品即可拿到原始值,修改后的.gitlab-ci.yml示例:
作业执行完成后在对应作业页面的「制品」 tab 下载image: python:3 stages: - deploy deploy: stage: deploy script: - echo "$Secret_variable" > secret.txt artifacts: paths: - secret.txt expire_in: 1 hoursecret.txt即可,建议设置较短的制品过期时间,避免敏感信息泄露。
注意:以上方法仅可用于你具备该变量访问权限的合法场景,违规获取敏感信息可能违反企业安全规范。
内容的提问来源于stack exchange,提问作者Nassim Gadhi
相关产品推荐
相关产品推荐

