服务账号密钥轮替

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

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

如果您怀疑服务账号密钥遭到破解,则建立轮替服务账号密钥的流程也有助于您快速采取行动。

轮替密钥的频率

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

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

密钥轮替流程

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

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

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

集中式 Secret 管理服务

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

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

相同的概念也适用于其他基于云的密钥管理服务,例如 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. 确认应用按预期工作后,请删除替换的密钥

服务账号密钥过期

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

后续步骤