教程:使用推送保护保护您的项目
如果您的应用程序使用外部资源,通常需要使用 secret(如 token 或 key)来验证应用程序身份。如果 secret 被推送到远程仓库,任何有权访问该仓库的人都可以冒充您或您的应用程序。
通过推送保护,如果 GitLab 在提交历史中检测到 secret,它可以阻止推送以防止泄露。启用推送保护是减少您审查提交中的敏感数据和修复泄露问题所花费时间的好方法。
在本教程中,您将配置推送保护,并尝试提交伪造的 secret 时会发生什么。您还将学习如何跳过推送保护,以防需要绕过误报。
本教程改编自以下 GitLab Unfiltered 视频:
开始之前
在开始本教程之前,请确保您具备以下条件:
- GitLab Ultimate 订阅。
- 一个测试项目。您可以使用任何喜欢的项目,但建议为此教程专门创建一个测试项目。
- 对命令行 Git 有一定了解。
此外,仅适用于 GitLab 自托管版,请确保已在实例上启用推送保护。
启用推送保护
要使用推送保护,您需要为每个要保护的项目启用它。让我们先在测试项目中启用它。
- 在左侧边栏,选择 搜索或跳转 并找到您的项目。
- 在左侧边栏,选择 安全 > 安全配置。
- 打开 推送保护 开关。
接下来,您将测试推送保护功能。
尝试向您的项目推送 secret
GitLab 通过匹配特定的字母、数字和符号模式来识别 secret。这些模式也用于识别 secret 的类型。
让我们通过向项目中添加伪造的 secret glpat-12345678901234567890 来测试此功能:
-
在项目中,检出新的分支:
git checkout -b push-protection-tutorial -
创建一个包含以下内容的新文件。 请确保删除
-前后的空格, 以匹配个人访问 token 的确切格式:hello, world! # 为了使示例生效,请删除 # 破折号前后的空格: glpat - 12345678901234567890 -
将文件提交到您的分支:
git add . git commit -m "添加伪造的 secret"secret 现在已进入提交历史。推送保护不会阻止您提交 secret;它只会在您推送时提醒您。
-
将更改推送到 GitLab。您应该会看到类似以下内容:
$ git push remote: GitLab: remote: PUSH BLOCKED: 代码变更中检测到 Secrets remote: remote: 推送保护在提交中发现以下 secrets: 123abc remote: -- myFile.txt:2 | GitLab Personal Access Token remote: remote: 要推送您的更改,必须删除已识别的 secrets。 To gitlab.com: ! [remote rejected] push-protection-tutorial -> main (pre-receive hook declined)GitLab 检测到 secret 并阻止了推送。从错误报告中,我们可以看到:
- 包含 secret 的提交(
123abc) - 包含 secret 的文件和行号(
myFile.txt:2) - secret 的类型(
GitLab Personal Access Token)
如果我们成功推送了更改,我们将需要花费大量时间和精力来撤销和替换该 secret。 相反,我们可以从提交历史中删除 secret,并安心地知道我们阻止了 secret 的泄露。
- 包含 secret 的提交(
跳过推送保护
有时即使推送保护已识别出 secret,您也需要推送提交。这种情况可能在 GitLab 检测到误报时发生。 为了演示,我们将最后一个提交推送到 GitLab。
使用推送选项
您可以使用推送选项来跳过 secret 检测:
-
使用
secret_detection.skip_all选项推送您的提交:git push -o secret_detection.skip_allsecret 检测被跳过,更改被推送到远程仓库。
使用提交消息
如果您无法访问命令行,或者不想使用推送选项:
-
将字符串
[skip secret push protection]添加到提交消息中。例如:git commit --amend -m "添加伪造的 secret [skip secret push protection]"
您只需要在一个提交消息中添加 [skip secret push protection] 即可推送您的更改,即使有多个提交也是如此。
下一步
考虑启用流水线 secret 检测来进一步提高项目的安全性。