保护服务账号密钥

与普通用户不同,服务账号没有密码。服务账号改为使用 ECDSA 密钥对进行身份验证。由于 RSA 密钥对的私钥允许您以服务账号身份进行身份验证,因此有权访问私钥类似于知道用户的密码。私钥称为“服务账号密钥”。如果未谨慎管理,服务账号密钥可能会带来安全风险。

与服务账号密钥相关的主要威胁包括:

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

  • 权限提升:如果不法分子获取了保护程度较低的服务账号密钥的访问权限,他们或许可以使用该密钥来提升其权限。

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

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

本页面介绍了管理、使用和保护服务账号密钥的最佳实践。

防范凭据泄露

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

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

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

  • 开源项目的源代码库。
  • 遭破解服务的公共数据转储。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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