阿里云首页 云效2020

仓库加密

服务端加密解决什么问题?

代码数据存在云端,如何保障它的安全?

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

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

上传数据时,Codeup对收到的用户数据进行加密,然后将得到的加密数据持久化存储下来。下载数据时,Codeup自动对保存的加密数据进行解密,并把可读的数据返回给用户。

这个加解密过程都需要用户授权密钥,一旦用户主动解除Codeup获取密钥的权限,服务端存储的代码将保持加密状态,任何人包括平台运维人员也无法破解,用户重新授权后可恢复。Codeup通过服务端加密机制,提供静态数据保护,适用于对代码存储有高安全性或者合规性要求的场景。

加密服务介绍

说明

为了保障用户的代码资产更加可靠,Codeup目前仅支持使用阿里云密钥管理服务( KMS )进行数据加解密;

KMS密钥服务每月针对服务密钥提供2万次免费调用额度,超额可能产生少量密钥API调用费用,详情参考KMS计费标准;

当你在Codeup企业设置中授权了密钥管理服务KMS,就可以创建新的加密代码仓库,或将一个已有的代码仓库标记加密。

KMS是阿里云提供的一款安全、易用的管理类服务,用户无需花费大量成本来维护密钥的保密性、完整性和可用性。借助密钥管理服务,用户可以安全、便捷的使用密钥,专注于开发加解密功能场景。KMS负责保管用户主密钥CMK(Customer Master Key:对数据密钥进行加密的密钥),以及生成数据加密的密钥。

Codeup使用信封加密,当用户授权KMS后,KMS将代替用户创建服务密钥,并使用该服务密钥加密保护,采用AES-256加密算法对Git仓库进行加密。

目前加密服务仅支持使用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服务

使用仓库加密服务前,需要先在企业设置中开通并授权KMS服务。

说明

建议使用企业公共账号授权,避免因授权人频繁变更导致的密钥更换问题

34

授权完成后界面如下:

5
  • 支持前往KMS;

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

  • 允许查看KMS服务状态:如果KMS服务欠费不可用,将无法解密;

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

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

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

开启仓库加密

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

5回到企业设置——仓库加密页面,可以看到①处此时服务密钥已经自动生成,生效了一个仓库,点击②可以查看仓库列表,同时③处可以看到因为有仓库正在使用该服务密钥加密,所以不允许解绑授权

46新建仓库时开启加密

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

7

关闭仓库加密

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

8

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

9

KMS密钥管理

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

0

点击④——密钥详情,可以看到「标签」部分有一个Codeup创建的标签键 acs:rdc:git-encryption

11

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

12

如遇这种情况不要着急,支持手动在该密钥下添加标签:

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

  • 标签值:true

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

13

注意事项

  • 开启代码加密后,加解密过程会产生KMS服务的调用费用,若账户欠费,将导致对应仓库无法访问,此时补缴费用后仓库即可恢复正常使用;

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

常见问题

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

A:可以正常使用。

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

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

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

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

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

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

了解原理

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