最小权限原则 (PoLP) 是一个概念,其中用户的访问权限应限制在他们完成各自角色所需的任务时所需的最低限度。通过实施 PoLP,你可以通过以下方式增强组织的安全态势,补充零信任:
极狐GitLab 提供了各种不同的功能,允许你自定义用户可以执行的操作,以帮助实现 PoLP。这些功能包括:
在这篇博文中,你将了解提到的每个功能、它们如何改善组织的安全状况以及如何实施它们。
极狐GitLab 允许你创建自定义角色,这些角色将附加权限应用于基本角色,以满足组织的安全需求。可用的基本角色如下:
每个基本角色会向用户应用一组特定的权限。基本角色对组成员、项目成员和项目功能应用不同的权限。例如,下表显示了哪些角色可以查看项目依赖列表:
|
|
|
|
|
|
|
|
|
|
|
|
依赖项列表也称为软件物料清单 (SBOM),显示项目的依赖项以及有关这些依赖项的关键详细信息。只有那些积极参与项目的人才能看到存在哪些依赖项,以限制使用其依赖项对应用程序的任何利用,这是有道理的。
但是,在某些情况下,访客可能需要查看 SBOM 以协助组织实现合规性。通过使用自定义角色,可以创建一个具有访客角色的所有有限权限的新角色,此外,还可以添加查看项目依赖项列表的功能。因此,我们有一位访客协助我们遵守其工作所需的最低特权访问权限。
从极狐GitLab 16.8 版本开始,可以将以下细化权限添加到任何基本角色:
我们将继续在每个极狐GitLab 版本中添加更细化的权限。
实现自定义角色的要求如下:
要查看自定义角色的实际效果,需要:
当你为具有访客角色的用户启用自定义角色时,该用户将获得提升后的一些权限,因此:
现在你已经了解了使用精细权限实现自定义角色的好处,让我们在极狐GitLab 实例中实现它们:
创建自定义角色的界面
创建角色后,你应该能够看到新的自定义角色及其 ID、基本角色和权限。请务必保存 ID,因为当我们将自定义角色分配给来宾用户时将使用该 ID。
现在我们必须将自定义角色分配给群组或项目成员。这可以按如下方式完成:
$ export TOKEN=glpat-XXXXXXXXXXXX
$ echo $TOKEN
glpat-XXXXXXXXXXXX
我们将授予自定义角色的用户 ID。你可以通过向 User API 提供用户名来获取用户 ID。有关使用 极狐GitLab API 的更多信息,请参阅REST API 文档。
$ curl "https://gitlab.example.com/api/v4/users?username=fjdiaz"
[{"id":4710074,"username":"fjdiaz","name":"Fern","state":"active","locked":false,"avatar_url":"https://gitlab.com/uploads/-/system/user/avatar/4710074/avatar.png","web_url":"https://gitlab.com/fjdiaz"}]
$ export USER_ID=4710074
$ echo $USER_ID
4710074
$ export CUSTOM_ROLE_ID=1000782
$ echo $CUSTOM_ROLE_ID
1000782
$ export GROUP_ID=10087220
$ echo $GROUP_ID
10087220
$ export PROJECT_ID=45738177
$ echo $PROJECT_ID
45738177
使用适当的群组或项目 API 将访客用户与自定义角色关联。
"Authorization: Bearer $TOKEN" --data '{"member_role_id": $CUSTOM_ROLE_ID, "access_level": 10}' "https://gitlab.example.com/api/v4/projects/$PROJECT_ID/members/$USER_ID"
$ curl --request PUT --header "Content-Type: application/json" --header "Authorization: Bearer $TOKEN" --data '{"member_role_id": $CUSTOM_ROLE_ID, "access_level": 10}' "https://gitlab.example.com/api/v4/groups/$GROUP_ID/members/$USER_ID"
现在,自定义角色已应用于访客用户,当他们登录时,他们可以看到“安全”选项卡中存在的漏洞仪表板。但请注意,他们仍然不允许查看源代码。
这很实用,因为它允许用户在无法更改代码库的情况下审核系统,这将 PoLP 应用于审核系统漏洞的人员。
极狐GitLab 提供安全策略来帮助你实现最小权限访问。 极狐GitLab 提供两种不同类型的安全策略:
以下是如何同时使用这两种策略类型来提供最小权限访问的一些示例:
策略存储在与其应用的项目不同的存储库中,称为安全策略项目 (SPP)。这允许为 SPP 与应用程序存储库设置单独的权限,从而增强你分离职责和应用 PoLP 的能力。
要实施 SPP 中包含的策略,请将其链接到项目、子群组或群组。 SPP 可以包含多个策略,但它们是一起强制执行的。对群组或子群组强制执行的 SPP 适用于嵌套群组以下的所有内容,包括所有子群组及其项目。
安全策略可以通过策略管理 UI 以及 yaml 进行管理。使用策略编辑器,你可以创建、编辑和删除策略。
现在让我们看看如何创建扫描执行策略。在开始之前,请确保你已满足以下条件:
顶级群组具备旗舰版功能
创建/分配 SPP 的所有者角色
开发人员角色或更高级别的角色来创建/编辑/删除个人安全策略
我们将创建一个策略,自动对每个流水线运行 SAST 扫描,无论 .gitlab-ci.yml
中是否定义了 SAST 模板:
条件:必须满足条件(触发流水线或按设定的时间表)才能发生操作。
按“配置合并请求”按钮。
现在策略已经创建,我们需要做的就是运行一个流水线来查看 SAST 是否存在,即使它没有在 .gitlab-ci.yml
中定义。
现在让我们看看如何创建合并请求批准策略。在开始之前,请确保你已满足以下条件:
如果任何安全扫描器与任何分支相比检测到漏洞,我们将创建一项需要项目维护人员批准的策略:
操作:只要满足规则中的条件(已定义的漏洞/检测到的许可证)就要采取的操作。
覆盖项目审批设置:如果选择,以下选项将覆盖项目设置,但仅影响策略中选择的分支。
按“配置合并请求”按钮。
现在策略已经创建,我们需要做的就是运行流水线,如果 SAST 检测到任何漏洞,则需要获得所选批准者的批准才能合并代码更改。合并请求批准策略可与所有极狐GitLab 安全扫描程序一起使用,包括许可证扫描。
分支保护允许你对存储库中的特定分支施加额外的限制。这进一步加强了 PoLP 在一组特定分支上的交互。
例如,受保护的分支可以控制:
极狐GitLab 的所有层级和产品均提供分支保护。分支保护可以应用于单个项目或一组项目。你可以对所需角色应用分支保护以进行推送和合并,如下所示:
你现在应该看到受保护的分支已添加到列表中。
受保护的分支设置
向群组添加分支保护需要所有者角色,向项目添加分支保护需要维护者角色或更高角色。
如果你想进一步限制开发人员可以对哪些文件进行更改,那么要实现的最佳功能之一是代码所有者。代码所有者允许你定义谁可以对代码库的部分做出专业变更。在代码所有者中定义好的文件和目录所有者将:
要设置代码所有者,请执行以下步骤:
现在,在查看文件时,你可以看到特定文件的代码所有者是谁。
如果你实施代码所有者批准,则在创建合并请求时,代码所有者必须批准才能合并代码。
在使用合并请求提交代码之前,可以应用其他批准设置。这些额外的批准设置如下:
此外,每当添加提交时,你都可以:
附加批准设置
要配置其他批准设置,你可以执行以下步骤:
还可以通过执行以下步骤将这些应用到你的顶级组:
通过利用这些批准设置,你可以确保代码始终受到未参与代码创建的人员的监督,从而防止利益冲突。
你可以创建一个合规性框架,该框架是一个标签,用于标识你的项目具有某些合规性要求或需要额外的监督。该标签可以选择对应用它的项目强制执行合规性流水线配置。
请随意利用合规性框架演示组来查看合规性框架及其用法的示例。
要创建合规性流水线,你所需要做的就是创建一个新项目,该项目将存储我们希望在另一个项目中使用的 .gitlab-ci.yml
文件。新的合规性流水线项目可以与你将应用它的项目具有单独的权限。这是有益的,因为它可以防止开发人员对必须运行的流水线进行更改。
你可以看到我创建了以下流水线定义:
既然 SOC2 的合规流水线已经定义,我们必须定义一个合规框架并将其应用到我们的项目中。在这种情况下,我会将其应用到我的账号部门项目中。
要创建合规性框架标签,请执行以下步骤:
名称:你的合规框架的名称
描述:你的合规框架的描述
合规性流水线和配置:要运行的合规性流水线的位置。
背景颜色:合规框架标签的颜色
创建合规框架
现在你应该在活动合规性框架下看到新添加的框架。
积极的合规框架
现在让我们继续将此合规标签分配给我们的会计部门项目:
添加合规框架选择保存更改。
运行合规流水线的项目
这可以实现职责分离并防止合规流水线被未经许可的人更改。
安全策略范围和流水线执行 在过去的几个版本中,极狐GitLab 引入了两个实验性功能:安全策略范围和流水线执行,以使其更容易遵守 PoLP。这些功能与合规性流水线和合规性框架非常相似,可以从极狐GitLab 的安全策略 UI 进行管理。
注意:这些功能目前被认为是实验性的。实验是正在开发的功能。它尚未准备好投入生产。我们鼓励用户尝试实验性功能并提供反馈。
流水线执行策略操作将新的扫描操作类型引入到扫描执行策略中,以便在目标开发项目中创建和实施自定义 CI。你可以与当前流水线一起执行自定义流水线。这使你可以通过始终强制运行特定操作来强制合规性,这些操作不仅仅是安全扫描程序,而且不能被那些没有权限的人覆盖。
流水线执行策略范围选择 - 插入代码块
安全策略范围可应用于合并请求批准或扫描执行策略。范围使你能够管理特定范围的策略,这意味着你可以:
要启用这些实验性功能,请按照下列步骤操作:
现在,每当你创建安全策略时,以下选项都将可用:
要了解有关这些功能的更多信息,请查看以下文档: