合规框架
- Tier: Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
您可以创建一个合规框架,这是一个标签,用于标识您的项目具有特定的合规要求或需要额外监督。
在 Ultimate 版本中,合规框架可以强制执行 合规流水线配置 和 安全策略 到应用它的项目上。
合规框架在顶级组上创建。如果项目被移出其现有的顶级组,其框架将被移除。
您可以为每个项目应用最多 20 个合规框架。
点击演示,请参见 合规框架。
前置条件
- 要创建、编辑和删除合规框架,用户必须拥有以下任一权限:
- 要向项目添加或移除合规框架,项目所属的组必须有一个合规框架。
创建、编辑或删除合规框架
您可以使用合规框架报告或合规项目报告来创建、编辑或删除合规框架。
有关使用合规框架报告的更多信息,请参见:
有关使用合规项目报告的更多信息,请参见:
子组和项目可以访问在其顶级组上创建的所有合规框架。但是,不能使用子组或项目创建、编辑或删除合规框架。项目所有者可以选择一个框架应用于其项目。
将合规框架应用于项目
您可以为项目应用多个合规框架,但不能为个人命名空间中的项目应用合规框架。
要将合规框架应用于项目,请通过 合规项目报告 应用合规框架。
您可以使用 GraphQL API 将一个或多个合规框架应用于项目。
如果您在子组上使用 GraphQL 创建合规框架,如果用户具有正确的权限,框架将在根祖先上创建。GitLab UI 提供只读视图以劝阻此行为。
要通过合规框架将合规框架应用于项目:
- 在左侧边栏,选择 Search or go to 并找到您的组。
- 选择 Secure > Compliance center。
- 在页面上,选择 Projects 选项卡。
- 将鼠标悬停在合规框架上,选择 Edit Framework 选项卡。
- 选择 Projects 部分。
- 从列表中选择项目。
- 选择 Update Framework。
默认合规框架
组所有者可以设置默认合规框架。默认框架将应用于在该组中创建的所有新项目和导入项目。它不影响应用于现有项目的框架。默认框架不能被删除。
设置为默认的合规框架具有 default 标签。
使用合规中心设置和移除默认值
要从 合规项目报告 设置为默认值(或移除默认值):
- 在左侧边栏,选择 Search or go to 并找到您的组。
- 选择 Secure > Compliance center。
- 在页面上,选择 Projects 选项卡。
- 将鼠标悬停在合规框架上,选择 Edit Framework 选项卡。
- 选择 Set as default。
- 选择 Save changes。
要从 合规框架报告 设置为默认值(或移除默认值):
- 在左侧边栏,选择 Search or go to 并找到您的组。
- 选择 Secure > Compliance center。
- 在页面上,选择 Frameworks 选项卡。
- 将鼠标悬停在合规框架上,选择 Edit Framework 选项卡。
- 选择 Set as default。
- 选择 Save changes。
从项目中移除合规框架
要从组中的一个或多个项目中移除合规框架,请通过 合规项目报告 移除合规框架。
导入和导出合规框架
将现有的合规框架下载为 JSON 文件,并从 JSON 模板上传新框架。
JSON 模板库可从 合规遵循模板 项目中获取。使用这些模板可以快速采用预定义的合规框架。
将合规框架导出为 JSON 文件
使用此功能,您可以共享和备份合规框架。
要从合规中心导出合规框架:
- 在左侧边栏,选择 Search or go to 并找到您的组。
- 选择 Secure > Compliance center。
- 在页面上,选择 Frameworks 选项卡。
- 找到您要导出的合规框架。
- 选择垂直省略号( )。
- 选择 Export as JSON file。
JSON 文件将下载到您的本地系统。
从 JSON 文件导入合规框架
使用此功能,您可以使用共享或备份的合规框架。JSON 文件不能与现有的合规框架同名。
要通过 JSON 模板导入合规框架:
- 在左侧边栏,选择 Search or go to 并找到您的组。
- 选择 Secure > Compliance center。
- 在页面上,选择 Frameworks 选项卡。
- 选择 New framework。
- 选择 Import framework。
- 在出现的对话框中,从您的本地系统选择 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)或您选择的自定义工具集成。第三方工具会返回相应的状态。此状态随后会显示在 合规状态报告 中。
您可以为每个单独的项目配置外部控制。外部控制不共享。如果外部控制保持待定状态超过六小时,状态检查将失败。
添加外部控制
要在创建或编辑框架时添加外部控制:
- 在左侧边栏,选择 Search or go to 并找到您的组。
- 选择 Secure > Compliance center。
- 在页面上,选择 Frameworks 选项卡。
- 选择 New framework 或编辑现有的框架。
- 在 Requirements 部分,选择 New requirement。
- 选择 Add an external control。
- 在字段中编辑 External Control Name、External URL 和
HMACshared secret。 - 选择 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 设置外部控制的状态。您不需要等待有效负载首先发送。
添加要求
要在创建或编辑框架时添加要求:
- 在左侧边栏,选择 Search or go to 并找到您的组。
- 选择 Secure > Compliance center。
- 在页面上,选择 Frameworks 选项卡。
- 选择 New framework 或编辑现有的框架。
- 在 Requirements 部分,选择 New requirement。
- 在对话框中添加 Name 和 Description。
- 选择 Add a GitLab control 添加更多控制。
- 在控制下拉列表中搜索并选择一个控制。
- 选择 Save changes to the framework 保存要求。
编辑要求
要在创建或编辑框架时编辑要求:
- 在左侧边栏,选择 Search or go to 并找到您的组。
- 选择 Secure > Compliance center。
- 在页面上,选择 Frameworks 选项卡。
- 选择 New framework 或编辑现有的框架。
- 在 Requirements 部分,选择 Action > Edit。
- 在对话框中编辑 Name 和 Description。
- 选择 Add a GitLab control 添加更多控制。
- 在控制下拉列表中搜索并选择一个控制。
- 选择 移除控制。
- 选择 Save changes to the framework 保存要求。
故障排除
在使用合规框架时,您可能会遇到以下问题。
错误:无法确定正确的上传 URL
如果在 导入合规框架 时,已经存在与 JSON 模板同名的合规框架,您将遇到此错误。