---
url: /zh/security/sca-plugins.md
description: >
  CNB 安全扫描插件总览，包含开源组件漏洞扫描、License 扫描和 SBOM 生成三个流水线插件， 用于在 Pull Request
  阶段增量检查依赖组件的风险与变化。
---
CNB 提供三个 SCA 流水线插件，在 Pull Request 阶段比较 Base 与 Head 的依赖变更，
在依赖风险合入主干前将其拦截：依赖漏洞、依赖 License 和组件清单（SBOM）。

:::: tip 与配置文件扫描的区别
[代码安全扫描](./intro.md)是平台内置的仓库级扫描，通过 `.scanignore`
和 `.cnb/security/code_scan_config.yml` 调整扫描范围；
SCA 插件是在 `.cnb.yml` 的 `pull_request` 阶段显式声明、按 PR 增量运行的扫描任务，可单独配置质量门禁。
::::

## 插件列表

| 插件 | 镜像 | 说明 |
|---|---|---|
| [开源组件漏洞扫描](./sca-vulnerability.md) | `cnbcool/sca-vulnerability:latest` | 检查 PR 新增依赖漏洞，可配置质量门禁 |
| [License 扫描](./sca-license.md) | `cnbcool/sca-license:latest` | 检查 PR 新增 License 风险，可配置质量门禁 |
| [SBOM 生成（Delta）](./sca-sbom.md) | `cnbcool/sca-sbom:latest` | 输出 PR Base/Head 组件变化 |

## 功能特性

* **增量扫描**：分别扫描 PR Base 和 Head，只处理当前 PR 新增的风险；
* **质量门禁**：依赖漏洞和 License 插件支持按严重等级阻断；
* **标准 SBOM**：SBOM 插件支持 JSON Delta、SPDX、CycloneDX 和 SWID。

## 在 CNB 中使用

将以下配置加入业务仓库根目录的 `.cnb.yml`：

```yaml title=".cnb.yml"
main:
  pull_request:
    - stages:
        - name: 开源组件漏洞扫描
          image: cnbcool/sca-vulnerability:latest
          settings:
            failOnSeverity: high

        - name: License 扫描
          image: cnbcool/sca-license:latest
          settings:
            failOnSeverity: high

        - name: 生成 SBOM Delta
          image: cnbcool/sca-sbom:latest
          settings:
            output: ${CNB_BUILD_WORKSPACE}/.cnb-sca/sbom-delta.json
```

## 门禁说明

漏洞扫描和 License 扫描插件通过 `failOnSeverity` 设置触发门禁的最低风险等级：

```yaml
failOnSeverity: high
```

设置为 `high` 后，PR 新增的 High、Critical 漏洞以及 High License 风险会导致检查失败。
省略该参数时，插件仍会输出扫描结果，但不启用风险门禁。

## 退出码

| 退出码 | 说明 |
|---:|---|
| `0` | 扫描完成，且新增风险未命中门禁 |
| `1` | 新增风险命中门禁 |
| `2` | 配置错误或扫描失败 |

## 下一步

* [开源组件漏洞扫描](./sca-vulnerability.md) —— 漏洞门禁与增量规则
* [License 扫描](./sca-license.md) —— License 风险门禁
* [SBOM 生成](./sca-sbom.md) —— 组件变化清单与标准格式
