仓库加密

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

背景信息

仓库加密的作用

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

云效代码管理平台 Codeup不仅依靠阿里云云盾安全产品做了层层加固,并且还支持在服务端上,对上传的数据进行加密(Server-Side Encryption),这个加密过程是透明的,对企业的日常使用没有任何影响。

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

仓库加密类型

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

  • 云效自管理密钥加密

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

说明

支持使用什么是密钥管理服务(KMS)进行数据加解密,KMS密钥服务每月针对服务密钥提供2万次免费调用额度,超额可能产生少量密钥API调用费用,详情参考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位密钥。

其他

  • 为了减少对KMS的调用次数,Codeup支持短暂的缓存;

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

云效自管理密钥加密

如果不希望依赖 KMS 进行加密,云效 Codeup 同时也支持使用自管理的密钥进行加密,保障数据以加密形式存储在服务端。

如选择使用自管理密钥加密,在仓库中开启加密开关时,云效将自动生成一个密钥,并用此密钥进行加密操作。

使用方法

步骤一、选择加密方式

企业管理员登录Codeup,点击首页左下角企业设置。

3-16

菜单栏中选择仓库加密。

3-16

步骤二、配置加密规则

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

说明

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

使用已登录的阿里云主账号点击授权KMS服务:

3-16

确认云资源访问授权:

3-16

授权完成后界面如下:

3-16

页面说明:

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

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

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

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

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

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

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

若选择云效自管理密钥加密

选择后可见如下界面:

3-16

页面说明:

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

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

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

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

步骤三、开启仓库加密

已有库开启加密

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

3-16

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

3-16

新建仓库开启加密

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

3-16

后续步骤

关闭仓库加密

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

3-16

注意解密需要一定时间。如果使用KMS加密,这个过程中请勿在KMS禁用密钥,否则将导致无法解密,仓库数据不可读。解密之后 KMS 可以正常解除授权:

3-16

切换加密类型

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

3-16

KMS密钥管理

前往阿里云KMS服务,可以查看到Codeup自动创建的服务密钥,该密钥不可删除和禁用,但可以通过修改KMS服务密钥的标签,临时禁用Codeup对KMS的调用:

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:该服务端加密为透明加密,对用户使用无影响。下载前会调用已授权的密钥解密然后下载,所以下载后的数据是明文显示。服务端代码加密主要解决以下问题:

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

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

了解原理

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