【51CTO.com快译】秘密管理是容器安全的重要组成部分。我们在本文中介绍管理秘密(即密码、API密钥和令牌等)的几个优秀实践,以便缓解容器安全风险和漏洞。
1. 区别秘密和标识符
在容器环境下,秘密是指一旦暴露在未经授权的个人或实体面前,贵公司、客户或应用程序将面临风险的任何信息。随着系统变得更复杂,涉及的秘密信息量随之增加,涉及的风险也随之加大。系统中的不定因素越多,面临的风险就越大。
值得一提的是,并非所有信息都是秘密信息。一些信息(比如用户名和TLS证书)是标识符,需要有选择地加以共享。标识符并非完全没有风险,但其风险远低于秘密。然而,与标识符有关的密码和密钥应被视为秘密。
2. 建立信任圈
系统的某些部分可以完全信任(比如CPU、RAM、root用户或拥有适当安全策略的秘密管理工具)。系统的一些部分只能选择性地信任(比如被授予明确权限,以访问受保护的某些秘密或S3等云服务的员工)。外部实体默认情况下不可信任。它们包括随机用户或WiFi热点。透露给这些实体的秘密会泄密,因此导致风险。
3. 深入了解信任链
秘密流经系统时,它们触及这些不同的实体。秘密所走的路径是决定秘密是安全还是已泄密的关键。每一步都是“一环”,全部环连起来就组成了“一条链”。全面深入了解整条链很重要。这样一来,你就可以建立信任链,确保只有信任圈内的实体才能访问秘密。
4. 使用KMS加密数据
对机密数据而言,光使用防火墙不够安全;受密码保护的数据库也不够安全。它们离完全泄密只有一步之遥。相反,需要的是可以在多个层面加密数据的密钥管理服务(KMS)。你应该能够使用加密密钥加密整个文件,并使用不同的加密密钥加密该文件中的部分数据。
这样一来,你只能共享数据的特定部分,而不必让其余数据面临风险。这限制了潜在威胁影响范围。然而,在本地环境创建和管理加密密钥很繁琐。如果使用云原生容器应用程序,有必要使用基于云的加密服务,比如AWS KMS或类似的替代方案。它们拥有高级功能,可以自动化并极大地控制加密密钥的创建和管理。
5. 经常轮换秘密
长期保持不变的秘密更有可能泄密。随着更多的用户访问秘密,某人有可能处理不当,泄露给未经授权的实体。秘密可以通过日志和缓存数据泄露出去。它们可以共享用于调试;一旦调试完成,就不可更改或撤销。它们可能被黑客破解。由于所有这些原因,秘密应经常轮换。
6. 自动创建密码
创建密码和访问密钥的方式对其安全性至关重要。人们手动创建密码会带来灾难。据Troy Hunt声称,85%的密码都不安全。消除糟糕密码的方法是,使用机器自动生成的密码,这些密码具有独特性,不易被破解。今天,大多数秘密管理工具都拥有密码自动生成这项默认功能。
7. 负责任地存储秘密
秘密管理工具对容器安全而言已变得不可或缺。它们的首要重心是防止秘密被保存在磁盘上、嵌入代码中,或者嵌入到秘密管理器本身之外的系统的任何部分。这是个文化问题,很难在大团队中实施。然而有必要使用秘密工具来创建密码,并借助到期失效的令牌,使用同样的工具共享密码。
8. 发现未经授权的访问
尽管你努力了,但在某个时候,秘密还是可能会泄密。在这种情况下,你的所有先前计划将经受测试,尽早发现事件(这是你需要部署安全监控工具的原因)。
你还应准备好制定计划,一旦发现泄密就迅速响应。假设你在泄密发生一小时后发现了情况。你能多快地禁止访问恶意用户或实体?在这里,全面控制系统中每个点的密码和经过深思熟虑的架构必不可少。需要更改系统中的所有密码,作为预防措施。这可以轻松实现吗?一旦所有密码更改,能不能通知合法用户、能不能立即为他们授予访问权限?万一系统宕机,密码管理器是否仍正常运行?
确保你能够发现泄密,并已制定了管理上面列出的所有考量因素的计划。
结论
容器为IT管理员和DevSecOps团队带来了新的安全挑战。然而,如果了解潜在风险以及减轻这些风险的方法,你可以建立起更可靠、几乎万无一失的安全机制。
原文标题:8 Best Practices for Container Secrets Management,作者:Twain Taylor
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】