本文介绍云效的代码存储加密功能。
背景信息
仓库加密的作用
企业管理者对云端代码托管的担心:我的代码存在云端服务器,会不会被泄露或偷窥?
云效代码管理平台 Codeup不仅依靠阿里云云盾安全产品做了层层加固,并且还支持在服务端上,对上传的数据进行加密(Server-Side Encryption),这个加密过程是透明的,对企业的日常使用没有任何影响。
上传数据时,云效 Codeup 对收到的用户数据进行加密,然后将得到的加密数据持久化存储。下载数据时,自动对保存的加密数据进行解密,并把可读的数据返回给用户。云效 Codeup 通过服务端加密机制,提供静态数据保护,适用于对代码存储有高安全性或者合规性要求的场景。
仓库加密类型
阿里云密钥管理服务(KMS)加密
云效自管理密钥加密
阿里云密钥管理服务(KMS)加密
KMS负责保管用户主密钥CMK(Customer Master Key:对数据密钥进行加密的密钥),以及生成数据加密的密钥。Codeup使用什么是信封加密,当用户授权KMS后,KMS将代替用户创建服务密钥,并使用该服务密钥加密保护,采用 AES-256 加密算法对 Git 仓库进行加密。
加解密过程需要用户授权密钥,一旦用户主动解除云效 Codeup 获取密钥的权限,服务端存储的代码将保持加密状态,任何人包括平台运维人员也无法破解,用户重新授权后可恢复。
目前加密服务仅支持使用云效 Codeup 自动为用户 KMS 创建的服务密钥,不支持用户自行创建或上传的密钥。
SSE-Codeup 服务器端加密的逻辑示意图如下:
何时加密
如何加密
目前 Codeup 仅支持AES(Advanced Encryption Standard)。
加密模式
使用CTR模式对数据内容进行加密。
密钥
使用KMS生成的256位密钥。
其他
为了减少对KMS的调用次数,Codeup支持短暂的缓存;
Codeup 在KMS中自动生成的服务密钥不支持删除和禁用,但你可以通过修改KMS服务密钥的标签,禁用Codeup对KMS的调用,但请注意,Codeup无法获取密钥也将导致被加密的仓库无法解密,代码库内容不可访问,此时再次恢复KMS的标签,让Codeup获得访问密钥的权限即可恢复功能(操作详情参见下文 KMS 密钥管理);
云效自管理密钥加密
如果不希望依赖 KMS 进行加密,云效 Codeup 同时也支持使用自管理的密钥进行加密,保障数据以加密形式存储在服务端。
如选择使用自管理密钥加密,在仓库中开启加密开关时,云效将自动生成一个密钥,并用此密钥进行加密操作。
使用方法
步骤一、选择加密方式
企业管理员登录Codeup,点击首页左下角企业设置。
菜单栏中选择仓库加密。
步骤二、配置加密规则
若选择阿里云密钥管理服务(KMS)加密
使用 KMS 加密,需开通并授权 KMS 服务。建议使用企业公共账号授权,避免因授权人频繁变更导致的密钥更换问题。
使用已登录的阿里云主账号点击授权KMS服务:
确认云资源访问授权:
授权完成后界面如下:
页面说明:
前往KMS:支持前往KMS查看密钥。
解除授权:仅在没有密钥被使用的情况下支持解除,如有仓库正在使用该密钥加密,则需要先解密然后再解除KMS授权。
允许查看KMS服务状态:需保证服务正常,如遇KMS服务欠费不可用,将无法解密。
新建库默认加密:勾选后新建库将自动启用加密。
允许仓库管理员修改加密设置:勾选后授权仓库管理员可以自行开关仓库加密设置。
加密密钥:首个仓库开启加密时,Codeup将在授权人的KMS服务下自动创建一个服务密钥,作为主密钥托管,用户不可手动删除和禁用密钥,但可以通过修改KMS服务密钥的标签,禁用Codeup对KMS的调用。
生效仓库:当前使用服务密钥加密的仓库个数和具体列表。
若选择云效自管理密钥加密
选择后可见如下界面:
页面说明:
新建库默认加密:勾选后新建库将自动启用加密。
允许仓库管理员修改加密设置:勾选后授权仓库管理员可以自行开关仓库加密设置。
加密密钥:首个仓库开启加密时,Codeup将为企业自动创建一个密钥,作为主密钥托管,用户不可手动删除和禁用密钥。
生效仓库:当前使用服务密钥加密的仓库个数和具体列表。
步骤三、开启仓库加密
已有库开启加密
具有企业管理员权限的用户,进入期望加密的具体仓库的设置页面可以看到仓库加密开关,点击打开:
回到企业设置-仓库加密页面,可以看到加密密钥已经自动生成,并已在一个仓库生效,可查看仓库列表,此时因为有仓库正在使用该密钥加密,所以不允许切换加密类型:
新建仓库开启加密
新建仓库时支持勾选启用仓库加密:
后续步骤
关闭仓库加密
同理,管理员进入已加密的仓库中,在库设置页面关闭加密开关:
注意解密需要一定时间。如果使用KMS加密,这个过程中请勿在KMS禁用密钥,否则将导致无法解密,仓库数据不可读。解密之后 KMS 可以正常解除授权:
切换加密类型
切换加密类型前,需要让当前密钥已生效的所有仓库完成解密,当生效库为零个的时候,可以切换加密方式。
KMS密钥管理
前往阿里云KMS服务,可以查看到Codeup自动创建的服务密钥,该密钥不可删除和禁用,但可以通过修改KMS服务密钥的标签,临时禁用Codeup对KMS的调用:
点击更多-密钥详情,可以看到「标签」部分有一个Codeup创建的标签键acs:rdc:git-encryption
:
如果从KMS侧直接删除该标签键,则Codeup无法再获取密钥,已加密的仓库将因为无法解密而无法访问。
如遇这种情况,请手动在该密钥下添加标签:
标签键:acs:rdc:git-encryption
标签值:true
如果只是短期内临时禁用Codeup访问,可以手动将标签值改为 false,禁用访问后将不再产生密钥调用费用:
注意事项
开启代码加密后,加解密过程会产生KMS服务的调用费用,若账户欠费,将导致对应仓库无法访问,此时补缴费用后仓库即可恢复正常使用;
开启代码加密后,会增加一定的计算开销,页面访问可能变慢,不推荐大于 1GB 的仓库启用加密;
常见问题
Q:开启代码加密后,常用Git客户端还能正常使用吗?
A:可以正常使用。
Q:开启代码仓库加密后,还能取消加密么?
A:有解密权限的管理者,可以在仓库设置中手动关闭加密开关,完成对已加密的仓库的解密。
Q:加密后下载下来的代码仓库为什么还是明文的?
A:该服务端加密为透明加密,对用户使用无影响。下载前会调用已授权的密钥解密然后下载,所以下载后的数据是明文显示。服务端代码加密主要解决以下问题:
偷取存储设备,直接访问代码库文件的恶意用户,获取的是已加密数据,没有密钥无法解密;
服务端代码内容,对平台运维人员不可读;