服务账号密钥轮替

服务账号密钥是私钥,可让您以服务账号身份进行身份验证。密钥变换是指将现有密钥替换为新密钥,然后使已替换的密钥失效的过程。我们建议您定期变换您管理的所有密钥,包括服务账号密钥。

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

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

变换密钥的频率

我们建议您至少每 90 天变换一次密钥,以降低密钥泄露所带来的风险。

如果您认为某个服务账号密钥已遭到泄露,我们建议您立即变换该密钥。

密钥变换流程

如需变换服务账号密钥,请执行以下操作:

  1. 确定需要变换的服务账号密钥。
  2. 为同一服务账号创建新密钥。
  3. 将所有应用中的现有密钥替换为新密钥。
  4. 停用已替换的密钥,并监控应用以确认应用按预期运行。
  5. 删除已替换的服务账号密钥。

您可以使用集中式 Secret 管理服务或自定义通知系统来完成这些步骤。

集中式 Secret 管理服务

许多集中式 Secret 管理服务(例如 HashiCorp Vault)都提供自动 Secret 变换功能。您可以使用这些服务来存储和变换服务账号密钥。

我们不建议使用基于云的密文管理服务(例如 Azure KeyVault 和 AWS Secret Manager)来存储和变换服务账号密钥。这是因为,如需访问这些存储的密文,您的应用需要拥有云服务提供商可以识别的身份。如果您的应用已具有云服务提供商可以识别的身份,则可以使用该身份进行身份验证,而无需使用服务账号密钥。

自定义通知系统

另一种服务账号密钥变换方法是创建一个系统,在需要变换密钥时发送通知。例如,您可以创建一个系统,在检测到创建时间超过 90 天的密钥时发送提醒。

首先,您需要确定需要变换的密钥。如需识别这些密钥,我们建议您使用 Cloud Asset Inventory 搜索在特定时间之前创建的所有服务账号密钥。

例如,以下命令会列出在 ID 为 123456789012 的组织中在 2023-03-10 00:00:00 UTC 之前创建的所有服务账号密钥:

gcloud asset search-all-resources \
    --scope="organizations/123456789012" \
    --query="createTime < 2023-03-10" \
    --asset-types="iam.googleapis.com/ServiceAccountKey" \
    --order-by="createTime"

如需详细了解如何在 Cloud Asset Inventory 中搜索资源,请参阅搜索资源。确定需要变换的密钥后,您可以向相应团队发送通知。

当用户收到变换密钥的通知时,应执行以下操作:

  1. 为同一服务账号创建一个新密钥
  2. 将所有应用中的现有密钥替换为新密钥。
  3. 停用已替换的密钥,并监控应用以确认应用能否按预期运行。
  4. 确认应用能按预期运行后,删除已替换的密钥

服务账号密钥即将过期

我们不建议将很快就会过期的服务账号密钥用于密钥变换。这是因为,如果很快就会过期的密钥未正确变换,则可能会导致服务中断。如需详细了解很快就会过期的服务账号密钥的使用场景,请参阅用户管理的密钥的过期时间

后续步骤

  • 创建停用删除服务账号密钥。