仓库加密

本文主要介绍了云效的代码存储加密功能。

说明

使用条件:高级版专属功能,版本说明参见套餐版本

仓库加密的作用

组织管理者对云端代码托管的担心:代码存在云端服务器,会不会被泄露或偷窥?

云效代码管理平台 Codeup 依靠阿里云云盾安全产品做了层层加固,并支持服务端对上传的数据进行加密(Server-Side Encryption),加密过程透明,对组织的日常使用无影响。

上传数据时,云效 Codeup 对用户数据进行加密,然后将得到的加密数据持久化存储。下载数据时,自动解密并返回可读数据。云效 Codeup 提供静态数据保护,适用于对代码存储有高安全性或者合规性要求的场景。

仓库加密类型

  • 阿里云密钥管理服务(KMS)加密。

  • 云效自管理密钥加密。

阿里云密钥管理服务(KMS)加密

说明

支持使用密钥管理服务(KMS)进行数据加解密,每月提供2万次免费调用,超额部分可能产生费用,请参考KMS计费说明

KMS 负责保管用户主密钥 CMK(Customer Master Key:对数据密钥进行加密的密钥)并生成数据加密密钥。Codeup 使用KMS信封加密在本地加密和解密数据,授权后 KMS 创建服务密钥并使用 AES-256 算法加密 Git 仓库。

加解密过程需要用户授权密钥,一旦用户主动解除云效 Codeup 获取密钥的权限,服务端存储的代码将保持加密状态,任何人包括平台运维人员也无法破解,用户重新授权后可恢复。

目前加密服务仅支持使用云效 Codeup 自动为用户 KMS 创建的服务密钥,不支持用户自行创建或上传的密钥。

SSE-Codeup 服务器端加密的逻辑示意图如下:

1

  • 何时加密

    2

  • 如何加密:目前 Codeup 仅支持AES(Advanced Encryption Standard)。

  • 加密模式:使用CTR模式对数据内容进行加密。

  • 密钥:使用KMS生成的256位密钥。

  • 其他:

    • Codeup支持短暂缓存以减少KMS调用。

    • KMS 自动生成的服务密钥不支持删除和禁用,但可通过修改标签禁用Codeup调用。注意,Codeup无法获取密钥也将导致被加密的仓库无法解密,代码库内容不可访问,此时再次恢复KMS的标签,让Codeup获得访问密钥的权限即可恢复功能(操作请参见KMS 密钥管理下)。

云效自管理密钥加密

如果不希望依赖 KMS 进行加密,云效 Codeup 支持使用自管理的密钥进行加密。在仓库中开启加密开关时,云效将自动生成一个密钥,并用此密钥进行加密操作,保障数据以加密形式存储在服务端。

使用方法

步骤一、选择加密方式

  1. 组织管理员登录Codeup,单击首页左下角全局设置

    高的 - 2024-12-06T094745

  2. 在菜单栏中选择仓库加密。

    高的 - 2024-12-06T094926

步骤二、配置加密规则

选择阿里云密钥管理服务(KMS)加密

说明

使用 KMS 加密,需开通并授权 KMS 服务。建议使用组织公共账号授权,避免因授权人频繁变更导致的密钥更换问题。

  1. 使用已登录的阿里云主账号单击授权服务

    高的 - 2024-12-06T095337

  2. 确认云资源访问授权:

    3-16

  3. 授权完成后界面如下:

    高的 - 2024-12-06T100336

页面说明:

  • 前往KMS:支持前往KMS查看密钥。

  • 解除授权:仅在没有密钥被使用的情况下支持解除,如有仓库正在使用该密钥加密,则需要先解密然后再解除KMS授权。

  • 允许查看KMS服务状态:需保证服务正常,如遇KMS服务欠费不可用,将无法解密。

  • 新建库默认加密:勾选后新建库将自动启用加密。

  • 允许仓库管理员修改加密设置:勾选后授权仓库管理员可以自行开关仓库加密设置。

  • 加密密钥:首个仓库开启加密时,Codeup将在授权人的KMS服务下自动创建一个服务密钥,作为主密钥托管,用户不可手动删除和禁用密钥,但可以通过修改KMS服务密钥的标签,禁用CodeupKMS的调用。

  • 生效仓库:当前使用服务密钥加密的仓库个数和具体列表。

选择云效自管理密钥加密

选择后可见如下界面:

高的 - 2024-12-06T100543

页面说明:

  • 新建库默认加密:勾选后新建库将自动启用加密。

  • 允许仓库管理员修改加密设置:勾选后授权仓库管理员可以自行开关仓库加密设置。

  • 加密密钥:首个仓库开启加密时,Codeup将为组织自动创建一个密钥,作为主密钥托管,用户不可手动删除和禁用密钥。

  • 生效仓库:当前使用服务密钥加密的仓库个数和具体列表。

步骤三、开启仓库加密

已有库开启加密

具有组织管理员权限的用户,进入期望加密的具体仓库的设置页面可以看到仓库加密开关,单击打开:

3-16

回到全局设置 > 仓库加密页面,可以看到加密密钥已经自动生成,并已在一个仓库生效,可查看仓库列表,此时因为有仓库正在使用该密钥加密,所以不允许切换加密类型

高的 - 2024-12-06T101005

新建仓库开启加密

新建仓库时支持勾选启用仓库加密:

3-16

后续步骤

关闭仓库加密

管理员在已加密的仓库中,设置页面关闭加密开关:

3-16

注意:解密需要时间,期间请勿禁用 KMS 密钥,否则无法解密仓库数据不可读。解密后 KMS 可正常解除授权。

高的 - 2024-12-06T101309

切换加密类型

切换加密类型前,需让所有仓库完成解密,当生效库为零个的时候,可以切换加密方式。

高的 - 2024-12-06T101418

KMS密钥管理

在阿里云KMS服务中,查看并修改 Codeup 创建的服务密钥,该密钥不可删除和禁用,但可以通过修改KMS服务密钥的标签,临时禁用CodeupKMS的调用:

3-16

单击更多 > 密钥详情,可以看到标签部分有一个Codeup创建的标签键acs:rdc:git-encryption

3-16 2

如果从 KMS 侧直接删除该标签键,则 Codeup 无法再获取密钥,已加密的仓库将因为无法解密而无法访问。

12

如遇这种情况,请手动在该密钥下添加标签:

  • 标签键:acs:rdc:git-encryption。

  • 标签值:true。

如果只是短期内临时禁用 Codeup 访问,可以手动将标签值改为 false,禁用访问后将不再产生密钥调用费用:

3-16

注意事项

  • 开启代码加密会产生 KMS 服务费用,账户欠费将导致仓库无法访问,补缴费用后可恢复正常。

  • 代码加密会增加计算开销,页面访问可能变慢,不推荐大于 1GB 的仓库启用。

常见问题

Q:开启代码加密后,常用Git客户端还能正常使用吗?

A:可以正常使用。

Q:开启代码仓库加密后,还能取消加密么?

A:有解密权限的管理者,可以在仓库设置中手动关闭加密开关。

Q:加密后下载下来的代码仓库为什么还是明文的?

A:该服务端加密为透明加密,下载前会自动解密,所以下载后的数据是明文。服务端代码加密主要防止以下问题:

  • 偷取存储设备,直接访问代码库文件的恶意用户,获取的是已加密数据,没有密钥无法解密。

  • 服务端代码内容,对平台运维人员不可读。

了解原理

参见代码仓库加密是如何实现的?