GitLab Dedicated 加密
- 版本:Ultimate
- 产品:GitLab Dedicated
GitLab Dedicated 通过 AWS 提供的强大安全基础设施,提供安全的加密功能来保护您的数据。数据在静态和传输中均会被加密。
静态数据加密
GitLab Dedicated 使用 AWS AES-256(采用 256 位密钥的高级加密标准)对所有存储的数据进行加密。此加密适用于 GitLab Dedicated 使用的所有 AWS 存储服务。
| 服务 | 加密方式 |
|---|---|
| Amazon S3 (SSE-S3) | 使用按对象加密,每个对象都使用其唯一密钥进行加密,该密钥随后由 AWS 托管的主密钥进行加密。 |
| Amazon EBS | 使用由 AWS Key Management Service (KMS) 生成的数据加密密钥 (DEK) 进行卷级加密。 |
| Amazon RDS (PostgreSQL) | 使用由 AWS KMS 生成的 DEK 进行存储级加密。 |
| AWS KMS | 在 AWS 托管的密钥层次结构中管理加密密钥,并使用硬件安全模块 (HSM) 对其进行保护。 |
所有服务均使用 AES-256 加密标准。在此信封加密系统中:
- 您的数据使用数据加密密钥 (DEK) 进行加密。
- DEK 本身则使用 AWS KMS 密钥进行加密。
- 加密后的 DEK 与您的加密数据一同存储。
- AWS KMS 密钥保留在 AWS Key Management Service 中,永远不会以未加密形式暴露。
- 所有加密密钥均受硬件安全模块 (HSM) 保护。
此信封加密过程的工作原理是,让 AWS KMS 为每次加密操作专门派生 DEK。DEK 直接加密您的数据,而 DEK 本身则由 AWS KMS 密钥加密,从而在您的数据周围创建一个安全的信封。
加密密钥来源
您的 AWS KMS 加密密钥可以来自以下来源之一:
- AWS 托管密钥(默认):GitLab 和 AWS 负责处理密钥生成和管理的所有方面。
- 自带密钥 (BYOK):您提供并控制自己的 AWS KMS 密钥。
所有密钥生成均在 AWS KMS 中使用专用硬件完成,确保所有存储服务的加密都符合高标准的安全要求。
下表总结了这些选项之间的功能差异:
| 加密密钥来源 | AWS 托管密钥 | 自带密钥 (BYOK) |
|---|---|---|
| 密钥生成 | 如果未提供 BYOK,则自动生成。 | 您创建自己的 AWS KMS 密钥。 |
| 所有权 | AWS 代表您进行管理。 | 您拥有并管理您的密钥。 |
| 访问控制 | 只有使用这些密钥的 AWS 服务才能解密和访问它们。您没有直接访问权限。 | 您通过 AWS 账户中的 IAM 策略控制访问权限。 |
| 设置 | 无需设置。 | 必须在上线前设置。之后无法启用。 |
AWS 托管密钥
当您不自带密钥时,AWS 默认使用 AWS 托管的 KMS 密钥进行加密。这些密钥由 AWS 为每项服务自动创建和维护。
AWS KMS 使用 AWS Identity and Access Management (IAM) 管理对 AWS 托管密钥的访问。此架构确保即使是 AWS 人员也无法直接访问您的加密密钥或解密您的数据,因为所有密钥操作都通过基于 HSM 的安全控制进行管理。
您无法直接访问 AWS 托管的 KMS 密钥。只有与您的实例一同使用的特定 AWS 服务才能代表您请求对其管理的资源进行加密或解密操作。
只有需要访问密钥的 AWS 服务(S3、EBS、RDS)才能使用它们。AWS 人员无法直接访问密钥材料,因为 AWS KMS 密钥受到内部基于 HSM 的机制保护。
要了解更多信息,请参阅 Amazon 关于 AWS 托管密钥 的文档。
自带密钥 (BYOK)
使用 BYOK,您可以使用自己的 AWS KMS 密钥对 GitLab Dedicated 的静态数据进行加密。这样,您可以保留对自己 AWS KMS 加密密钥的控制权。您通过自己的 AWS 账户管理访问策略。
BYOK 必须在实例上线期间启用。一旦启用,便无法禁用。
如果您在上线期间未启用 BYOK,您的数据仍会使用 AWS 托管密钥进行静态加密,但您将无法使用自己的密钥。
由于密钥轮换的要求,GitLab Dedicated 仅支持具有 AWS 托管密钥材料的密钥(即 AWS_KMS 源类型)。
在 GitLab Dedicated 中,您可以通过多种方式使用 KMS 密钥:
- 所有区域的所有服务使用一个 KMS 密钥:在您拥有 Geo 实例的每个区域中使用带有副本的单个多区域密钥。
- 每个区域内的所有服务使用一个 KMS 密钥:为您拥有 Geo 实例的每个区域使用单独的密钥。
- 每个区域按服务使用 KMS 密钥:在每个区域内为不同的服务(备份、EBS、RDS、S3、高级搜索)使用不同的密钥。
- 密钥不必对每个服务都是唯一的。
- 不支持选择性启用。
为 BYOK 创建 AWS KMS 密钥
使用 AWS 控制台创建您的 KMS 密钥。
前提条件:
- 您必须已从 GitLab Dedicated 账户团队收到您的 GitLab AWS 账户 ID。
- 您的 GitLab Dedicated 租户实例必须尚未创建。
为 BYOK 创建 AWS KMS 密钥的步骤:
- 登录 AWS 控制台并转到 KMS 服务。
- 选择您要为其创建密钥的 Geo 实例所在的区域。
- 选择 创建密钥。
- 在 配置密钥 部分:
- 对于 密钥类型,选择 对称。
- 对于 密钥用法,选择 加密和解密。
- 在 高级选项 下:
- 对于 密钥材料来源,选择 KMS。
- 对于 区域性,选择 多区域密钥。
- 输入密钥别名、描述和标签的值。
- 选择密钥管理员。
- 可选。允许或阻止密钥管理员删除密钥。
- 在 定义密钥使用权限 页面上,在 其他 AWS 账户 下,添加 GitLab AWS 账户。
- 查看 KMS 密钥策略。它应类似于下面的示例,其中填充了您的账户 ID 和用户名。
{
"Version": "2012-10-17",
"Id": "byok-key-policy",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<CUSTOMER-ACCOUNT-ID>:root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "Allow access for Key Administrators",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::<CUSTOMER-ACCOUNT-ID>:user/<CUSTOMER-USER>"
]
},
"Action": [
"kms:Create*",
"kms:Describe*",
"kms:Enable*",
"kms:List*",
"kms:Put*",
"kms:Update*",
"kms:Revoke*",
"kms:Disable*",
"kms:Get*",
"kms:Delete*",
"kms:TagResource",
"kms:UntagResource",
"kms:ScheduleKeyDeletion",
"kms:CancelKeyDeletion",
"kms:ReplicateKey",
"kms:UpdatePrimaryRegion"
],
"Resource": "*"
},
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::<GITLAB-ACCOUNT-ID>:root"
]
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*"
},
{
"Sid": "Allow attachment of persistent resources",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::<GITLAB-ACCOUNT-ID>:root"
]
},
"Action": [
"kms:CreateGrant",
"kms:ListGrants",
"kms:RevokeGrant"
],
"Resource": "*"
}
]
}为其他 Geo 实例创建副本密钥
当您希望在不同区域的多个 Geo 实例中使用相同的 KMS 密钥时,请创建副本密钥。
创建副本密钥的步骤:
- 在 AWS Key Management Service (AWS KMS) 控制台中,转到您之前创建的密钥。
- 选择 区域性 标签页。
- 在 相关的多区域密钥 部分,选择 创建新的副本密钥。
- 选择一个或多个您拥有其他 Geo 实例的 AWS 区域。
- 保留原始别名或为副本密钥输入不同的别名。
- 可选。输入描述并添加标签。
- 选择可以管理副本密钥的 IAM 用户和角色。
- 可选。选中或清除 允许密钥管理员删除此密钥 复选框。
- 选择 下一步。
- 在 定义密钥使用权限 页面上,验证 GitLab AWS 账户是否已列在 其他 AWS 账户 下。
- 选择 下一步 并查看策略。
- 选择 下一步,检查您的设置,然后选择 完成。
有关创建和管理 KMS 密钥的更多信息,请参阅 AWS KMS 文档。
为您的实例启用 BYOK
启用 BYOK 的步骤:
- 收集您创建的所有密钥的 ARN,包括它们各自区域中的任何副本密钥。
- 在您的 GitLab Dedicated 租户被配置之前,请确保这些 ARN 已在上线期间输入到 Switchboard 中。
- 确保 AWS KMS 密钥已复制到您在上线期间于 Switchboard 中指定的主区域、辅助区域和备份区域。
传输中数据加密
GitLab Dedicated 使用 TLS(传输层安全)及强密码套件对所有在网络中移动的数据进行加密。此加密适用于 GitLab Dedicated 使用的所有网络通信。
| 服务 | 加密方式 |
|---|---|
| Web 应用程序 | 使用 TLS 1.2/1.3 加密客户端-服务器通信。 |
| Amazon S3 | 使用 TLS 1.2/1.3 加密 HTTPS 访问。 |
| Amazon EBS | 使用 TLS 加密 AWS 数据中心之间的数据复制。 |
| Amazon RDS (PostgreSQL) | 使用 SSL/TLS(最低 TLS 1.2)加密数据库连接。 |
| AWS KMS | 使用 TLS 加密 API 请求。 |
传输中数据的加密是通过 TLS 进行的,其密钥由 GitLab Dedicated 组件生成和管理,因此不在 BYOK 的覆盖范围内。
自定义 TLS 证书
您可以配置自定义 TLS 证书,以便使用您组织的证书进行加密通信。
有关配置自定义证书的更多信息,请参阅自定义证书。