目录
指导准则
分层安全,纵深防御
保密 ≠ 安全
减少攻击面
7 步保障私有化部署实例安全
第一步:开启多因素认证
第二步:加强额外的注册检查
第三步:限制群组和项目可见性
第四步:强化 SSH 设置
第五步:审核账户和限制设置
第六步:保障 CI 密钥
第七步:保护所有分支的流水线
作者:Ayoub Fandi
“系统安全程度取决于系统最薄弱的环节” 是一句非常易懂的谚语,好比安全防护的木桶效应。
如果攻击者找到了入侵方法,就会利用安全配置文件中的任何漏洞。「强化」,即关闭未使用功能,并把对安全有影响的设置进行调整的过程,对于限制攻击面并减少潜在攻击向量是非常重要的。
「强化」可以确保应用程序(比如极狐GitLab)尽可能的安全。目标很简单:保留高效工作所需功能的同时,将风险最小化。
指导准则
以下列举的安全活动需要和其中的一项或者多项结合使用。可以尝试组合尽可能多的方法。
分层安全,纵深防御
分层安全背后的逻辑很简单:尽可能尝试将多种安全方法结合起来。例如,有两种方式实现安全,则应该实现两种,而非只实现一种。
举个例子,如果想保障服务访问安全,可将复杂密码、硬件访问令牌及多因素认证结合起来。这种方法也被称为纵深防御。
保密 ≠ 安全
“如果某些东西被隐藏,那么它会变得更安全”的想法,在现如今的信息安全世界里,是行不通的。
当前攻击者的扫描能力足够强大,能够突破严密的安全防控。任何人都很容易对系统的开放端口进行扫描,例如将 SSH 的 22 端口修改为其他端口,诸如 Nmap 之类的网络工具就可以扫描出来。
减少攻击面
极狐GitLab/GitLab 包含众多组件、服务及依赖,提供强大的产品功能。但拥有的组件越多,攻击者的攻击入口就越多。所以牢记一个法则:禁用运行应用程序不需要的服务。如果有未使用功能,禁用相关服务将减少潜在攻击面,更加安全。
7 步保障私有化部署实例安全
让我们通过简单 7 步,快速强化私有化部署实例。这些速效措施是保障安全的重要开端。额外细节及进一步指导,可参考官方文档。
第一步:开启多因素认证
管理员 → 设置 → 通用 → 登陆限制
确保勾选双重认证(Two-Factor authentication,2FA)选项。双因素宽限期的默认值是 48h,将其调整为一个更低的值,比如 8h。
确认勾选管理员模式。具有管理员访问权限的用户,将需要额外的认证操作来执行管理任务。启用 2FA 后,将需要用户进行额外的 2FA 认证操作。
第二步:加强额外的注册检查
管理员 → 设置 → 通用 → 注册限制
确保勾选启用注册功能。
在电子邮件确认设置下,确认开启高级设置。这将要求用户在允许访问其帐户之前,在注册过程中验证其电子邮件地址。
如果强制执行其他身份验证技术,则 12 个字符的最小密码长度(字符数)默认设置是比较合适的。可用的密码复杂度选项包括需包含数字、大小写字母及特殊字符。是否启用密码复杂度功能,取决于你公司内部的密码标准。
如果所有用户邮箱地址都位于单一域名(比如 example.com ) 下面,可在注册限制里,将其添加到允许域名一栏中。这将阻止非此域名下的邮箱进行注册。
第三步:限制群组和项目可见性
管理员 → 设置 → 通用 → 可见性和访问控制
对于新创建的项目和群组,其默认项目可见性和群组可见性都应该设置为私有。只有被赋予特定访问权限的用户,才能访问特定资源。如有必要或在创建新项目或组时,可以对此进行调整。
这能够确保默认模式安全,防止信息意外泄漏。
第四步:强化 SSH 设置
管理员 → 设置 → 通用 → 可见性和访问控制
通常,在启用 Git 访问协议中选择 Both SSH and HTTP(S)。如果用户不用其中某一个 Git 协议,将其设置为 Only SSH 或者 Only HTTP(S)。
这可以通过限制未使用协议来限制危害可能性,减少攻击面。对于 SSH key 的类型,推荐使用的算法有:
- ED25519;
- RSA;
- ECDSA。
当配置默认类型及 SSH key 长度时,请记住上述列表。
第五步:审核账户和限制设置
管理员 → 设置 → 通用 → 账户和限制设置
这部分允许限制附件、推送、导出、导入及仓库的大小。对于特定大小(MB)可以根据公司内部策略来设置并审核。
用户会话时长(分钟)及 SSH key 和所有访问令牌时长(天)也支持配置,以确保时长与公司内部策略相一致并满足安全最佳实践。
第六步:保障 CI 密钥
管理员 → 设置 → CI
密码、令牌、密钥及其他需要任何保护级别保护的敏感信息,都不应该以纯文本形式存储。相反,应该实施加密容器技术(密钥管理器),比如 GCP Secret Manager 及 HashiCorp Vault,许多极狐GitLab 功能都可以利用 Vault 。
对于外部沟通,需确保 CI/CD 流程中任何外部连接都使用加密通道。强烈推荐使用 TLS 1.2 及以上版本,且在可能的情况下使用 mTLS。
第七步:保护所有分支的流水线
管理员 → 设置 → CI
流水线是工作的一部分,它分阶段执行步骤,代表用户自动化执行任务,是 CI/CD 的核心组成部分。默认情况下,只有默认分支会获得受保护的流水线。遵循这些简单步骤,对其他分支配置同等级别的安全措施,将大大强化你的流水线。
一旦流水线运行起来,代码就会被部署到一个环境上。要限制与该环境的交互,保护它免受未经授权的用户的影响,可将关键环境设为“受保护”。
本文从不同维度阐述了如何强化加固私有化部署极狐GitLab/GitLab 实例。如果想要学习更多关于极狐GitLab/GitLab是如何保障安全的,可查阅安全文档 ,希望能够对你有帮助。