保护服务账号密钥的安全

Google Distributed Cloud (GDC) 网闸隔离设备中的服务账号密钥管理功能可帮助您防止未经授权的工作负载身份验证和提权。与用户账号不同,服务账号使用 ECDSA 密钥对(而非密码)进行身份验证,因此每个私有服务账号密钥都相当于一个永久性凭证。应用存储、轮替和到期最佳实践可让您减少项目和组织中的泄露。

服务账号密钥面临的威胁

未受保护的服务账号密钥会使您的环境面临以下威胁:

  • 凭据泄露:服务账号密钥可能无意中进入不应存储的位置。不法分子可以使用泄露的服务账号密钥进行身份验证并访问您的环境。

  • 提升权限:如果恶意行为者获取了安全性较差的服务账号密钥,则他们可能会使用该密钥来提升其权限。

  • 信息披露:服务账号密钥可能会无意中泄露机密数据。

  • 不可否认:通过使用服务账号密钥进行身份验证,并让服务账号代表不法分子执行操作,不法分子可能会隐藏其身份和操作。

防范凭据泄露

与用户名和密码一样,服务账号密钥也是一种凭证。如果用户可以访问有效的服务账号密钥,则可以使用该密钥对相应服务账号有权访问的资源进行身份验证和访问。

不法分子可能会发现服务账号密钥比泄露的密码更有价值。例如,如果用户账号已配置为使用两步验证和登录验证,则尝试使用泄露的密码登录不太可能成功。相比之下,使用泄露的服务账号密钥进行身份验证很可能会成功,因为服务账号不需要进行任何额外的登录验证。

不法分子可能会通过以下方式查找服务账号密钥:

  • 开源项目的源代码库。
  • 被入侵服务的公开数据转储。

除了公共位置之外,不法分子还可能会在他们入侵的私密位置查找服务账号密钥。例如:

  • 电子邮件收件箱
  • 文件共享
  • 备份存储
  • 临时文件系统目录

降低服务账号密钥泄露风险的一种有效方法是减少流通中的密钥数量,并阻止创建新密钥。以下部分介绍了如何限制流通中的服务账号密钥数量,以及哪些其他措施可以帮助您限制泄露服务账号的风险。

避免将服务账号密钥留在临时位置

创建服务账号密钥后,请立即将密钥移动到您要存储密钥的位置。请确保您没有意外将副本保留在下载文件夹或计算机的回收站中。

不要在用户之间传递服务账号密钥

部署需要服务账号密钥的应用时,您可能无权自行创建服务账号密钥。您可能需要请求其他人为您创建服务账号密钥。

不要将服务账号密钥提交到源代码库

服务账号密钥是凭据,必须免遭未经授权的访问。如果您将服务账号密钥提交到源代码库,则未经授权的用户和不法分子可以访问该密钥的风险会增加:

  • 不法分子可能会扫描公共代码库的源代码,查找泄露的密钥。

  • 将来,您可能会决定将私有源代码库转换为公共代码库,而没有先检查其密钥。

  • 其他团队成员可能会在其工作站中存储源代码的副本。

在处理使用服务账号密钥的代码时,请始终将服务账号密钥与源代码分开存储,以降低将该密钥意外提交到源代码库的风险。在许多情况下,您可以在开发期间完全不使用服务账号密钥,而是使用个人凭据,从而进一步降低此风险。

不要将服务账号密钥嵌入程序二进制文件

服务账号密钥是与特定模式匹配的字符串,即使嵌入在其他文件或二进制文件中也可以识别。如果恶意行为者有权访问该二进制文件,则可以提取嵌入在二进制文件中的任何服务账号密钥。

服务器端应用的程序二进制文件可能托管在工件代码库中,或者可能复制到开发者工作站进行调试。将服务账号密钥与程序二进制文件分开,有助于确保可以访问二进制文件的用户不会隐式获得对服务账号凭据的访问权限。

  • 对于客户端应用(如工具、桌面程序或移动应用),请勿使用服务账号。
  • 对于服务器端应用,请勿将服务账号密钥嵌入二进制文件。而应将密钥与应用二进制文件分开。

轮替服务账号密钥以降低泄露的密钥造成的安全风险

虽然您可以降低意外泄露服务账号密钥的可能性,但可能很难完全消除风险。

密钥轮替是指将现有密钥替换为新密钥,然后使已替换的密钥失效的过程。我们建议您定期轮替您管理的所有密钥,包括服务账号密钥。

轮替服务账号密钥有助于降低因密钥泄露或被盗而造成的风险。如果密钥被泄露,不法分子可能需要数天或数周的时间才能发现密钥。如果您定期轮换服务账号密钥,那么当不法分子获得泄露的密钥时,这些密钥很有可能已经失效。

使用过期时间让密钥自动失效

默认情况下,您创建的服务账号密钥的过期时间为一年,在您删除之前会一直有效。您也可以自行设置过期时间。为服务账号密钥设置过期时间可以缩短永久性凭据的生命周期,从而降低安全风险。但是,设置过期时间会带来其他风险。例如,设置过期时间可能会导致工作负载在其密钥过期时失败。

如果您需要对要求提供服务账号密钥的系统进行临时访问,请使用过期时间。例如,在以下情况下请使用过期时间:

  • 在非生产环境中为只能通过服务账号密钥进行身份验证的应用开发代码。
  • 使用只能通过服务账号密钥进行身份验证的第三方工具。

避免在以下场景中使用过期时间:

  • 生产工作负载。在生产环境中,过期的服务账号密钥可能会导致意外的服务中断。请改为使用不会过期的密钥,并通过密钥轮替管理其生命周期。
  • 需要永久访问权限的非生产工作负载,例如持续集成 (CI) 流水线。
  • 会在指定时间后阻止使用密钥的密钥轮替系统。

为了限制服务账号密钥的有效性,您可以为在项目、文件夹或组织中新创建的密钥配置过期时间。过期时间不适用于现有密钥。

如果您怀疑服务账号密钥已遭到破解,那么制定服务账号密钥轮替流程也有助于您快速采取行动。

为运行应用的每台机器使用专用密钥

为了帮助您缩小可疑活动的潜在来源的范围,请为应用的每个副本创建单独的密钥。这样,您就可以使用许多服务添加到审核日志记录中的 serviceAccountKeyName 字段来区分活动源自的机器。