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

在 GitLab 中安全地存储秘密和凭据

如何使用 Jenkins job dsl 为 gitlab 插件设置秘密令牌?

触发 Gitlab CI/CD 管道以部署存储库的特定部分

工具Git与GitLab /GitHub/Coding/...不得不说的秘密。