服务账号密钥是私钥,可让您以服务账号身份进行身份验证。密钥轮替是指将现有密钥替换为新密钥,然后使已替换的密钥失效的过程。我们建议您定期轮替您管理的所有密钥,包括服务账号密钥。
轮替服务账号密钥有助于降低因密钥泄露或被盗而造成的风险。如果密钥被泄露,不法分子可能需要数天或数周的时间才能发现密钥。如果您定期轮替您的服务账号密钥,那么当不法分子获得泄露的密钥时,这些密钥很有可能已经失效。
如果您怀疑服务账号密钥已遭到破解,那么制定服务账号密钥轮替流程也有助于您快速采取行动。
轮替密钥的频率
我们建议您至少每 90 天轮替一次密钥,以降低密钥泄露所带来的风险。
如果您认为某个服务账号密钥已遭到泄露,我们建议您立即轮替该密钥。
密钥轮替流程
如需轮替服务账号密钥,请执行以下操作:
- 确定需要轮替的服务账号密钥。
- 为同一服务账号创建新密钥。
- 将所有应用中的现有密钥替换为新密钥。
- 停用已替换的密钥,并监控应用以确认应用按预期运行。
- 删除已替换的服务账号密钥。
您可以使用集中式 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 中搜索资源,请参阅搜索资源。确定需要轮替的密钥后,您可以向相应团队发送通知。
当用户收到轮替密钥的通知时,应执行以下操作:
服务账号密钥即将过期
我们不建议将很快就会过期的服务账号密钥用于密钥轮替。这是因为,如果很快就会过期的密钥未正确轮替,则可能会导致服务中断。如需详细了解很快就会过期的服务账号密钥的使用场景,请参阅用户管理的密钥的过期时间。