Gitlab CI/CD 中的秘密检测
Posted
技术标签:
【中文标题】Gitlab CI/CD 中的秘密检测【英文标题】:Secrets Detection in Gitlab CI/CD 【发布时间】:2021-05-03 10:51:45 【问题描述】:我在理解如何在 Gitlab CI/CD 中激活秘密检测时遇到了一些麻烦。 我从模板创建了一个新的 NodeJS Express,然后我从 Settings > CI/CD 激活了 auto-devops,并选中了 Auto Devops 菜单下的复选框 Default to Auto Devops pipeline。之后,我在项目文件夹中打开了 app.js 文件并插入了一个看起来像键值的变量。这是我插入该行的代码:
...
var app = express();
var key = "api-12321321321321321";
// view engine setup
app.set('views', path.join(__dirname, 'views'));
...
在提交更改后,我预计管道会因为秘密泄露而失败。这是一张显示秘密检测通过的图像。
谁能告诉我如何使管道报告错误?
【问题讨论】:
【参考方案1】:当我第一次尝试时,这种行为也让我感到困惑。
但是,GitLab 似乎是故意这样做的。这是official documentation 所说的:
因此,对于免费或高级帐户,您可以只使用此报告器,但您不会看到任何结果,除非您下载 JSON 报告。
此外,没有提到作业会失败。这只是我们的期望。
换句话说,如果您使用免费/高级帐户,此功能几乎没有用,因为没有人会去工作并手动检查它。
唯一的解决方法是覆盖 secret_detection
作业,解析 gl-secret-detection-report.json,检查它是通过还是失败,然后决定通过或失败作业。
【讨论】:
有没有人写过一个会失败的扩展作业?我的意思是,如果它无论如何都成功了,本地工作是毫无用处的。 @halloei - 我正在努力寻找解决方案。我会在这里通知你。 我想出了以下解决方案:gist.github.com/halloei/8ea4f1763f16a426f86a56bcf6a97333 期待你的解决方案! @halloei 我在看类似的东西。但是,避免如此多的配置重复会很棒。【参考方案2】:GitLab 13.12(2021 年 5 月)应该会更容易:
秘密检测配置工具
跟随GitLab SAST configuration tool 的脚步,我们正在安全配置页面上添加对秘密检测的支持。 我们相信security is a team effort 和这种配置经验让非 CI 专家更容易上手 GitLab Secret Detection。
该工具可帮助用户创建合并请求以启用秘密检测扫描,同时利用最佳配置实践,例如使用 GitLab 管理的
SAST.gitlab-ci.yml
template。 配置工具可以创建一个新的.gitlab-ci.yml
文件(如果不存在)或更新现有的简单 GitLab CI 文件,从而允许该工具用于已设置 GitLab CI 的项目。参见Documentation 和Epic。
见GitLab 14.5(2021 年 11 月)
额外的秘密检测模式支持
我们更新了 GitLab 秘密检测扫描器,为广泛使用的应用程序检测 47 种新的“易于识别”的秘密模式。这使得 GitLab 秘密检测检测多达 90 多种可检测模式。
如果您是 SaaS 应用程序供应商,并且您的应用程序生成具有可识别模式的秘密令牌,并且您希望 GitLab 能够检测到它们,请添加您的正则表达式模式和一些无效的示例令牌 in a comment on this issue 和我们会将它们添加到 GitLab 秘密检测中。
请参阅 Documentation 和 Issue。
【讨论】:
【参考方案3】:GitLab 有一篇关于在管道中进行设置的完整帖子:https://docs.gitlab.com/ee/user/application_security/secret_detection/
编辑:
给出的说明有点不清楚:
您需要在配置的“根级别”添加include
标签。
示例
stages:
- build
- test
image: node:latest
build:
stage: build
script:
- echo "Building"
- npm install typescript
- yarn run build
test:
stage: test
script:
- echo "Testing"
include:
- template: Security/Secret-Detection.gitlab-ci.yml
秘密检测将在测试阶段运行: Pipeline
【讨论】:
以上是关于Gitlab CI/CD 中的秘密检测的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Kubernetes 集群中执行 GitLab Runner:无法在命名空间“gitlab”中的 API 组“”中创建资源“秘密”
由于禁止的秘密访问规则,无法在 gitlab-runner 中使用 helm upgrade