如何保证安全性?Unity开源证书管理方案为你支招

今天与各位分享Unity安全软件开发生命周期(SSDLC)中较为重要的一个部分:证书管理。令牌(token)、密钥和证书又可称为机密内容,要在代码中保证机密内容的安全性有时是件难度颇高的事。我们希望本次分享的知识,可以让大家从前车之鉴中学到一些有用的东西。

在几年前,Unity安全团队和基础架构团队的合作伙伴将目光放在了证书管理的安全问题上。像Unity这样的平台环境复杂,编程语言的选择极多,开发环境多变,部署用的工具链也可能是由多种工具整合而成。所以,证书管理的难度并不算小。在本博文中,我们将分享自己过去的经验,同时开源证书管理方案,为大家提供一个参考。

到底什么是证书?

既然是管理证书,那什么是证书呢?证书也可称作机密内容,是用户在平台上请求特殊服务所需的信息凭证。机密内容可以是API中的令牌,登入网络服务所需的密码,链接外部服务器所需的SSH私人密钥,读写数据库的证书,或者登入二进制程序所需的RSA密钥。不论是何种机密内容,我们都需要小心保管它们,只能让服务交易的参与者知晓。理想状态下,即使是开发服务的开发者也不能知道机密内容,至少不能经常性地访问。

好的证书管理策略通常要有两个特点:确保证书不会落入居心叵测者手中,证书管理的方式需要便于开发者管理。不过,说的总比做的容易。

证书管理中的主要问题

在构思证书管理策略之前,我们首先需要考虑几个常见的问题:

  • 代码保存证书的问题:存储、处理证书最直接、常见的方法是将它作为一个变量直接写在代码中的相应位置。好的证书管理方案应该有“写入代码”以外的证书管理方式。
  • 证书轮换问题:证书可能会失效,被意外禁用,或者出于种种原因需要轮换。好的证书管理方案应该有简单的证书轮换流程。
  • 多样化开发环境的问题:由于涉及的编程语言种类较多,证书管理方案不能绑定在一个编程语言或开发环境中,需要支持尽可能多的开发者和项目。
  • 访问权限控制问题:随着人员流动,项目更迭,证书数量也会不断增加。方案应该有紧密的证书访问权限控制,同时能适应流动的开发环境。
  • 人为失误:方案应该最小化使用方和管理方人为失误带来的损失。比如,配置句法应具备达意和明晰的特点,且毁坏性命令(删除、禁用之类的命令)应有较小的连带效果,最小化不经意改动的可能。
  • 俄罗斯套娃问题:这个问题比较关键。为了确保证书的安全,我们需要将其安全地锁起来,只让需要证书的服务有解锁的钥匙。问题就来了:如何保证这把钥匙的安全?可以把它像证书一样安全的锁起来。那么,如何保护这把钥匙呢?可以看到这里出现了一个套娃问题,用证书来保护证书。

Vault

在经过精挑细选后,我们选择了HashiCorp的Vault方案。该证书管理方案可以解决目前我们所致的大部分问题。此外,Vault的一个版本还是个开源方案。

Vault可以安全地存储证书,紧密控制访问权限,允许用户取得证书。但是,开发者们仍需要手动将Vault库整合到项目中,才能取得、使用证书。请注意,Vault并不能解决套娃问题。虽然Vault可以安全地存储证书,但访问证书仍旧要用到令牌(token)。Vault带来了一定的好处,也带来了其他需要考虑的问题。

使用Vault Secret Fetcher

为了解决余下的问题,我们搜寻了其他少数几个现有工具,但它们并不能达到所有的要求,对用户并不友好。于是,我们编写了Vault Secret Fetcher (VSF)。VSF通过使用GKE/Kubernetes、Google Compute Engine进行认证,进一步回避代码中的俄罗斯套娃问题, 将初始身份验证留给业务流程或基础架构平台。Vault支持绝大部分认证方法,开发者可以轻易修改认证行为,以支持其他基础设施。

开发者们只需要将机密内容写入Vault即可。

vault write secret/<YOUR PATH>  token="..."

再将路径占位符的内容添加到Vault的服务环境中。

TOKEN = ‘VAULTSECRET::{"path":"secret/sre/dev/TEST", "key":"token"}’

获取证书的流程如下:

① VSF首次调用时会启动服务。

② 通过认证服务供应方(如Kubernetes)完成认证。

③ VSF读取设置好的路径,从Vault取得证书,将证书的数据写入自己的环境中。

④ VSF调用服务的入口点,将自身内存空间替换为Vault服务,让Vault能访问证书。

想了解更多详细信息,请查看项目的README文件。

https://github.com/Unity-Technologies/vault-secret-fetcher/blob/master/R...

下一步

Vault Secret Fetcher是一个开源项目,请大家尝试使用VSF来协助项目制作,同时也欢迎各位来为项目添砖加瓦。

在未来,我们会让Vault Secret Fetcher更加轻量,支持的平台和适用情景更多。

本文转自:Unity官方平台 ,转载此文目的在于传递更多信息,版权归原作者所有。

推荐阅读