服务账号密钥轮替

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

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

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

轮替密钥的频率

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

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

密钥轮替流程

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

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

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

集中式 Secret 管理服务

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

我们不建议使用 Google Cloud 的 Secret Manager 来存储和轮替服务账号密钥。这是因为,如需访问 Secret Manager 密钥,您的应用需要拥有 Google Cloud 可以识别的身份。如果您的应用已具有 Google Cloud 可以识别的身份,则可以使用该身份向 Google Cloud 进行身份验证,而无需使用服务账号密钥。

其他基于云的 Secret 管理服务(例如 Azure KeyVault 和 AWS Secret Manager)也适用相同的概念。如果应用已具有这些云服务提供商可以识别的身份,则可以使用该身份向 Google Cloud 进行身份验证,而无需使用服务账号密钥。

自定义通知系统

另一种服务账号密钥轮替方法是创建一个系统,在需要轮替密钥时发送通知。例如,您可以创建一个系统,在检测到创建时间超过 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. 确认应用能按预期运行后,删除已替换的密钥

服务账号密钥即将过期

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

后续步骤