Help us learn about your current experience with the documentation. Take the survey.

合规框架

  • Tier: Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

您可以创建一个合规框架,这是一个标签,用于标识您的项目具有特定的合规要求或需要额外监督。

在 Ultimate 版本中,合规框架可以强制执行 合规流水线配置安全策略 到应用它的项目上。

合规框架在顶级组上创建。如果项目被移出其现有的顶级组,其框架将被移除。

您可以为每个项目应用最多 20 个合规框架。

点击演示,请参见 合规框架

前置条件

  • 要创建、编辑和删除合规框架,用户必须拥有以下任一权限:
  • 要向项目添加或移除合规框架,项目所属的组必须有一个合规框架。

创建、编辑或删除合规框架

您可以使用合规框架报告或合规项目报告来创建、编辑或删除合规框架。

有关使用合规框架报告的更多信息,请参见:

有关使用合规项目报告的更多信息,请参见:

子组和项目可以访问在其顶级组上创建的所有合规框架。但是,不能使用子组或项目创建、编辑或删除合规框架。项目所有者可以选择一个框架应用于其项目。

将合规框架应用于项目

您可以为项目应用多个合规框架,但不能为个人命名空间中的项目应用合规框架。

要将合规框架应用于项目,请通过 合规项目报告 应用合规框架。

您可以使用 GraphQL API 将一个或多个合规框架应用于项目。

如果您在子组上使用 GraphQL 创建合规框架,如果用户具有正确的权限,框架将在根祖先上创建。GitLab UI 提供只读视图以劝阻此行为。

要通过合规框架将合规框架应用于项目:

  1. 在左侧边栏,选择 Search or go to 并找到您的组。
  2. 选择 Secure > Compliance center
  3. 在页面上,选择 Projects 选项卡。
  4. 将鼠标悬停在合规框架上,选择 Edit Framework 选项卡。
  5. 选择 Projects 部分。
  6. 从列表中选择项目。
  7. 选择 Update Framework

默认合规框架

组所有者可以设置默认合规框架。默认框架将应用于在该组中创建的所有新项目和导入项目。它不影响应用于现有项目的框架。默认框架不能被删除。

设置为默认的合规框架具有 default 标签。

使用合规中心设置和移除默认值

要从 合规项目报告 设置为默认值(或移除默认值):

  1. 在左侧边栏,选择 Search or go to 并找到您的组。
  2. 选择 Secure > Compliance center
  3. 在页面上,选择 Projects 选项卡。
  4. 将鼠标悬停在合规框架上,选择 Edit Framework 选项卡。
  5. 选择 Set as default
  6. 选择 Save changes

要从 合规框架报告 设置为默认值(或移除默认值):

  1. 在左侧边栏,选择 Search or go to 并找到您的组。
  2. 选择 Secure > Compliance center
  3. 在页面上,选择 Frameworks 选项卡。
  4. 将鼠标悬停在合规框架上,选择 Edit Framework 选项卡。
  5. 选择 Set as default
  6. 选择 Save changes

从项目中移除合规框架

要从组中的一个或多个项目中移除合规框架,请通过 合规项目报告 移除合规框架。

导入和导出合规框架

将现有的合规框架下载为 JSON 文件,并从 JSON 模板上传新框架。

JSON 模板库可从 合规遵循模板 项目中获取。使用这些模板可以快速采用预定义的合规框架。

将合规框架导出为 JSON 文件

使用此功能,您可以共享和备份合规框架。

要从合规中心导出合规框架:

  1. 在左侧边栏,选择 Search or go to 并找到您的组。
  2. 选择 Secure > Compliance center
  3. 在页面上,选择 Frameworks 选项卡。
  4. 找到您要导出的合规框架。
  5. 选择垂直省略号( ellipsis_v )。
  6. 选择 Export as JSON file

JSON 文件将下载到您的本地系统。

从 JSON 文件导入合规框架

使用此功能,您可以使用共享或备份的合规框架。JSON 文件不能与现有的合规框架同名。

要通过 JSON 模板导入合规框架:

  1. 在左侧边栏,选择 Search or go to 并找到您的组。
  2. 选择 Secure > Compliance center
  3. 在页面上,选择 Frameworks 选项卡。
  4. 选择 New framework
  5. 选择 Import framework
  6. 在出现的对话框中,从您的本地系统选择 JSON 文件。

如果导入成功,新的合规框架将出现在列表中。任何错误都会显示以供更正。

要求

  • Tier: Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

在 GitLab Ultimate 中,您可以为合规框架定义特定的 要求。要求由一个或多个 控制 组成,这些控制是对分配了该框架的项目的配置或行为的检查。每个要求最多有 5 个控制。

每个控制包含 GitLab 在计划或触发扫描期间用于评估项目遵循情况的逻辑。有关如何跟踪遵循情况的更多详细信息,请参见 合规状态报告

您可以使用 GitLab 合规控制或外部控制作为框架要求。

GitLab 合规控制

GitLab 合规控制可用于 GitLab 合规框架。控制是对分配给合规框架的项目的配置或行为的检查。

结合使用 GitLab 合规控制以帮助您满足 合规标准

控制名称 控制ID 描述
API security running scanner_api_security_running 确保 API 安全扫描 在项目的默认分支流水线中配置并运行。需要成功的流水线运行。
At least one approval minimum_approvals_required_1 确保 合并请求需要至少一个批准 才能合并。
At least two approvals minimum_approvals_required_2 确保 合并请求需要至少两个批准 才能合并。
Auth SSO enabled auth_sso_enabled 确保 单点登录 (SSO) 身份验证 已为项目启用。
Author approved merge request is forbidden merge_request_prevent_author_approval 确保 合并请求的作者不能批准自己的更改
Branch deletion disabled branch_deletion_disabled 确保 分支不能被删除
CI/CD job token scope enabled cicd_job_token_scope_enabled 确保 CI/CD 作业令牌 范围限制已启用。
Code changes requires code owners code_changes_requires_code_owners 确保代码更改需要 代码所有者 的批准。
Code owner approval required code_owner_approval_required 确保 代码所有者文件 已配置。
Code quality running scanner_code_quality_running 确保 代码质量扫描 在项目的默认分支流水线中配置并运行。需要成功的流水线运行。
Committers approved merge request is forbidden merge_request_prevent_committers_approval 确保 已提交到合并请求的用户不能批准它
Container scanning running scanner_container_scanning_running 确保 容器扫描 在项目的默认分支流水线中配置并运行。需要成功的流水线运行。
DAST running scanner_dast_running 确保 动态应用程序安全测试 (DAST) 在项目的默认分支流水线中配置并运行。需要成功的流水线运行。
Default branch protected default_branch_protected 确保默认分支启用了 保护规则
Default branch protected from direct push default_branch_protected_from_direct_push 防止直接推送到默认分支
Default branch users can merge default_branch_users_can_merge 控制 用户是否可以合并对默认分支的更改
Default branch users can push default_branch_users_can_push 控制 用户是否可以直接推送到默认分支
Dependency scanning running scanner_dep_scanning_running 确保 依赖扫描 在项目的默认分支流水线中配置并运行。需要成功的流水线运行。
Ensure two administrators per repository ensure_2_admins_per_repo 确保每个 仓库至少有两个管理员
Error tracking enabled error_tracking_enabled 确保 错误跟踪 已为项目启用。
Force push disabled force_push_disabled 防止 强制推送 到仓库。
Forks exist for the project has_forks 确保项目已被 分叉
Fuzz testing running scanner_fuzz_testing_running 确保 模糊测试 在项目的默认分支流水线中配置并运行。需要成功的流水线运行。
GitLab license level Ultimate gitlab_license_level_ultimate 确保 GitLab 实例使用 Ultimate 许可证
Has valid CI/CD configuration has_valid_ci_config 确保项目有 有效的 CI/CD 配置
IaC scanning running scanner_iac_running 确保 基础设施即代码 (IaC) 扫描 在项目的默认分支流水线中配置并运行。需要成功的流水线运行。
Internal visibility is forbidden project_visibility_not_internal 确保项目未设置为 内部可见性
Issue tracking enabled issue_tracking_enabled 确保 问题跟踪 已为项目启用。
License compliance running scanner_license_compliance_running 确保 许可证合规扫描 在项目的默认分支流水线中配置并运行。需要成功的流水线运行。
Merge request commit reset approvals merge_request_commit_reset_approvals 确保 对合并请求的新提交会重置批准
Merge requests approval rules prevent editing merge_requests_approval_rules_prevent_editing 确保 合并请求批准规则 不能被编辑。
Merge requests require code owner approval merge_requests_require_code_owner_approval 确保合并请求需要 代码所有者 的批准。
More members than admins more_members_than_admins 确保分配给项目的 管理员 少于总成员数。
Package Hunter no findings untriaged package_hunter_no_findings_untriaged 确保 Package Hunter 的所有问题都已分类。
Project not archived project_archived 检查 项目是否已归档。通常 false 是合规的。
Project not marked for deletion project_marked_for_deletion 检查 项目是否被标记为删除false 是合规的。
Project pipelines not public project_pipelines_not_public 确保 项目流水线不是公开可见的
Project repository exists project_repo_exists 确保 Git 仓库 为项目存在。
Project visibility not public project_visibility_not_public 确保项目未设置为 公开可见性
Protected branches exist protected_branches_set 确保项目包含 受保护的分支
Push protection enabled push_protection_enabled 确保对敏感文件启用了 推送保护
Require branch up to date require_branch_up_to_date 确保在合并前 源分支与目标分支保持最新
Require linear history require_linear_history 通过禁止合并提交来确保 线性提交历史
Require MFA at organization level require_mfa_at_org_level 确保在组织级别要求 多因素身份验证
Require MFA for contributors require_mfa_for_contributors 确保 贡献者启用了多因素身份验证
Requires signed commits require_signed_commits 确保 需要签名提交
Reset approvals on push reset_approvals_on_push 确保当新提交被推送到合并请求时 批准会被重置
Resolve discussions required resolve_discussions_required 确保所有 讨论必须在允许合并前解决
Restrict push/merge access restrict_push_merge_access 限制谁可以推送到或合并到 受保护的分支
Restricted build access restricted_build_access 确保 对构建工件和流水线输出的访问受限
Review and archive stale repositories review_and_archive_stale_repos 确保审查并 归档 过时的仓库。
Review and remove inactive users review_and_remove_inactive_users 确保 审查并移除不活跃用户
SAST running scanner_sast_running 确保 静态应用程序安全测试 (SAST) 在项目的默认分支流水线中配置并运行。需要成功的流水线运行。
Secret detection running scanner_secret_detection_running 确保 秘密检测扫描 在项目的默认分支流水线中配置并运行。需要成功的流水线运行。
Secure webhooks secure_webhooks 确保 webhooks 安全配置。
Stale branch cleanup enabled stale_branch_cleanup_enabled 确保 自动清理过时分支 已启用。
Status checks required status_checks_required 确保 状态检查 必须通过才能允许合并。
Status page configured status_page_configured 确保为项目配置了 状态页面
Strict Permission for Repository strict_permissions_for_repo 确保为仓库访问设置了 严格权限
Terraform enabled terraform_enabled 确保 Terraform 集成 已为项目启用。
User-defined CI/CD variables restricted to maintainers project_user_defined_variables_restricted_to_maintainers 确保只有具有维护者角色或更高的用户才能在触发流水线时传递 用户定义的变量
Vulnerabilities SLO days over threshold vulnerabilities_slo_days_over_threshold 确保 漏洞在 SLO 阈值内得到解决(180 天)。

外部控制

外部控制是对外部系统的 API 调用,用于请求外部控制或要求的状态。

您可以创建一个将数据发送到第三方工具的外部控制。

合规扫描 运行时,GitLab 会发送通知。然后用户或自动化工作流可以从 GitLab 外部更新控制的状态。

通过此集成,您可以与第三方工作流工具(如 ServiceNow)或您选择的自定义工具集成。第三方工具会返回相应的状态。此状态随后会显示在 合规状态报告 中。

您可以为每个单独的项目配置外部控制。外部控制不共享。如果外部控制保持待定状态超过六小时,状态检查将失败。

添加外部控制

要在创建或编辑框架时添加外部控制:

  1. 在左侧边栏,选择 Search or go to 并找到您的组。
  2. 选择 Secure > Compliance center
  3. 在页面上,选择 Frameworks 选项卡。
  4. 选择 New framework 或编辑现有的框架。
  5. Requirements 部分,选择 New requirement
  6. 选择 Add an external control
  7. 在字段中编辑 External Control NameExternal URLHMAC shared secret
  8. 选择 Save changes to the framework 保存要求。

外部控制生命周期

外部控制具有 异步 工作流。合规扫描 每次都会向外部服务发出有效负载。

sequenceDiagram
    GitLab->>+External service: Requirement payload
    External service-->>-GitLab: Control response
    Note over External service,GitLab: Response includes SHA at HEAD

接收有效负载后,外部服务可以运行任何所需的进程。然后,外部服务可以通过 REST API 将其响应发回合并请求。

外部控制可以有三种状态之一。

状态 描述
pending 默认状态。未收到来自外部服务的响应。
pass 收到来自外部服务的响应,并且外部服务批准了外部控制。
fail 收到来自外部服务的响应,并且外部服务拒绝了外部控制。

如果 GitLab 外部发生变化,您可以通过 API 设置外部控制的状态。您不需要等待有效负载首先发送。

添加要求

要在创建或编辑框架时添加要求:

  1. 在左侧边栏,选择 Search or go to 并找到您的组。
  2. 选择 Secure > Compliance center
  3. 在页面上,选择 Frameworks 选项卡。
  4. 选择 New framework 或编辑现有的框架。
  5. Requirements 部分,选择 New requirement
  6. 在对话框中添加 NameDescription
  7. 选择 Add a GitLab control 添加更多控制。
  8. 在控制下拉列表中搜索并选择一个控制。
  9. 选择 Save changes to the framework 保存要求。

编辑要求

要在创建或编辑框架时编辑要求:

  1. 在左侧边栏,选择 Search or go to 并找到您的组。
  2. 选择 Secure > Compliance center
  3. 在页面上,选择 Frameworks 选项卡。
  4. 选择 New framework 或编辑现有的框架。
  5. Requirements 部分,选择 Action > Edit
  6. 在对话框中编辑 NameDescription
  7. 选择 Add a GitLab control 添加更多控制。
  8. 在控制下拉列表中搜索并选择一个控制。
  9. 选择 remove 移除控制。
  10. 选择 Save changes to the framework 保存要求。

故障排除

在使用合规框架时,您可能会遇到以下问题。

错误:无法确定正确的上传 URL

如果在 导入合规框架 时,已经存在与 JSON 模板同名的合规框架,您将遇到此错误。