本文主要介绍了云效的代码存储加密功能。
使用条件:高级版专属功能,版本说明参见套餐版本。
仓库加密的作用
组织管理者对云端代码托管的担心:代码存在云端服务器,会不会被泄露或偷窥?
云效代码管理平台 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 服务器端加密的逻辑示意图如下:
何时加密
如何加密:目前 Codeup 仅支持AES(Advanced Encryption Standard)。
加密模式:使用CTR模式对数据内容进行加密。
密钥:使用KMS生成的256位密钥。
其他:
Codeup支持短暂缓存以减少KMS调用。
KMS 自动生成的服务密钥不支持删除和禁用,但可通过修改标签禁用Codeup调用。注意,Codeup无法获取密钥也将导致被加密的仓库无法解密,代码库内容不可访问,此时再次恢复KMS的标签,让Codeup获得访问密钥的权限即可恢复功能(操作请参见KMS 密钥管理下)。
云效自管理密钥加密
如果不希望依赖 KMS 进行加密,云效 Codeup 支持使用自管理的密钥进行加密。在仓库中开启加密开关时,云效将自动生成一个密钥,并用此密钥进行加密操作,保障数据以加密形式存储在服务端。
使用方法
步骤一、选择加密方式
组织管理员登录Codeup,单击首页左下角全局设置。
在菜单栏中选择仓库加密。
步骤二、配置加密规则
选择阿里云密钥管理服务(KMS)加密
使用 KMS 加密,需开通并授权 KMS 服务。建议使用组织公共账号授权,避免因授权人频繁变更导致的密钥更换问题。
使用已登录的阿里云主账号单击授权服务:
确认云资源访问授权:
授权完成后界面如下:
页面说明:
前往KMS:支持前往KMS查看密钥。
解除授权:仅在没有密钥被使用的情况下支持解除,如有仓库正在使用该密钥加密,则需要先解密然后再解除KMS授权。
允许查看KMS服务状态:需保证服务正常,如遇KMS服务欠费不可用,将无法解密。
新建库默认加密:勾选后新建库将自动启用加密。
允许仓库管理员修改加密设置:勾选后授权仓库管理员可以自行开关仓库加密设置。
加密密钥:首个仓库开启加密时,Codeup将在授权人的KMS服务下自动创建一个服务密钥,作为主密钥托管,用户不可手动删除和禁用密钥,但可以通过修改KMS服务密钥的标签,禁用Codeup对KMS的调用。
生效仓库:当前使用服务密钥加密的仓库个数和具体列表。
选择云效自管理密钥加密
选择后可见如下界面:
页面说明:
新建库默认加密:勾选后新建库将自动启用加密。
允许仓库管理员修改加密设置:勾选后授权仓库管理员可以自行开关仓库加密设置。
加密密钥:首个仓库开启加密时,Codeup将为组织自动创建一个密钥,作为主密钥托管,用户不可手动删除和禁用密钥。
生效仓库:当前使用服务密钥加密的仓库个数和具体列表。
步骤三、开启仓库加密
已有库开启加密
具有组织管理员权限的用户,进入期望加密的具体仓库的设置页面可以看到仓库加密开关,单击打开:
回到
页面,可以看到加密密钥已经自动生成,并已在一个仓库生效,可查看仓库列表,此时因为有仓库正在使用该密钥加密,所以不允许切换加密类型:新建仓库开启加密
新建仓库时支持勾选启用仓库加密:
后续步骤
关闭仓库加密
管理员在已加密的仓库中,设置页面关闭加密开关:
注意:解密需要时间,期间请勿禁用 KMS 密钥,否则无法解密仓库数据不可读。解密后 KMS 可正常解除授权。
切换加密类型
切换加密类型前,需让所有仓库完成解密,当生效库为零个的时候,可以切换加密方式。
KMS密钥管理
在阿里云KMS服务中,查看并修改 Codeup 创建的服务密钥,该密钥不可删除和禁用,但可以通过修改KMS服务密钥的标签,临时禁用Codeup对KMS的调用:
单击acs:rdc:git-encryption
:
如果从 KMS 侧直接删除该标签键,则 Codeup 无法再获取密钥,已加密的仓库将因为无法解密而无法访问。
如遇这种情况,请手动在该密钥下添加标签:
标签键:acs:rdc:git-encryption。
标签值:true。
如果只是短期内临时禁用 Codeup 访问,可以手动将标签值改为 false,禁用访问后将不再产生密钥调用费用:
注意事项
开启代码加密会产生 KMS 服务费用,账户欠费将导致仓库无法访问,补缴费用后可恢复正常。
代码加密会增加计算开销,页面访问可能变慢,不推荐大于 1GB 的仓库启用。
常见问题
Q:开启代码加密后,常用Git客户端还能正常使用吗?
A:可以正常使用。
Q:开启代码仓库加密后,还能取消加密么?
A:有解密权限的管理者,可以在仓库设置中手动关闭加密开关。
Q:加密后下载下来的代码仓库为什么还是明文的?
A:该服务端加密为透明加密,下载前会自动解密,所以下载后的数据是明文。服务端代码加密主要防止以下问题:
偷取存储设备,直接访问代码库文件的恶意用户,获取的是已加密数据,没有密钥无法解密。
服务端代码内容,对平台运维人员不可读。