轮换 Azure Cosmos DB for NoSQL 的密钥

警告

不建议将资源所有者密码凭据(ROPC)流用于 NoSQL 工作负荷的生产 Azure Cosmos DB,因为它需要直接处理凭据,这会带来安全风险。 若要获得更安全的身份验证,请使用具有 Microsoft Entra ID 的基于角色的访问控制。 有关详细信息,请参阅 Azure Cosmos DB for NoSQL 中基于角色的访问控制和Microsoft Entra ID 身份验证。

使用 Azure Cosmos DB for NoSQL 可以轮换主密钥和辅助密钥来维护安全性。 本文介绍如何在确保持续应用程序访问数据库的同时重新生成密钥。

注释

密钥重新生成可能需要一分钟到多个小时,具体取决于 Azure Cosmos DB for NoSQL 帐户的大小。 在启动轮换过程之前,请确保应用程序始终使用主密钥或辅助密钥。

先决条件

  • 一个现有的 Azure Cosmos DB for NoSQL 帐户

  • 应用程序当前始终使用主密钥或辅助密钥

使用安全密钥轮换轮换密钥

Azure Cosmos DB 现在提供了一项功能,可利用帐户密钥使用情况元数据确保安全地轮换密钥或禁用本地身份验证。 此功能提供上次使用帐户密钥时的额外可见性,因此团队可以在轮换密钥或迁移到Microsoft Entra ID之前做出明智的决策。

显示Azure Cosmos DB帐户中安全密钥轮换的屏幕截图。

它为什么重要?

  • 帮助禁用本地身份验证:帮助确认在关闭本地身份验证之前,密钥已不再使用。
  • 防止应用程序停机或中断:避免意外轮换正在使用的密钥。
  • 提高安全卫生:鼓励安全和有意的密钥轮换。

此功能尤其适用于:

  • 客户当前使用密钥,但计划完全迁移到Microsoft Entra ID
  • 不常使用的键:仍依赖于键的每月或每年作业
  • 跨团队共享密钥:可见性通常受到限制

工作原理

安全密钥轮换检查在重新生成任何密钥或禁用本地身份验证 之前 运行。 在检查通过之前,此过程不会更改任何密钥。 如果检查失败,则会阻止该操作,并且现有密钥仍然有效且保持不变。 应用程序仍像以前一样工作。

启用安全密钥轮换

az cosmosdb update \
     --resource-group <resource-group-name> \
     --name <account-name> \
     --capabilities EnableAccountKeysLastUsageCheckInDisableLocalAuth EnableKeyCheckBeforeRegenerationPreview

确认已启用安全密钥轮换功能。

az cosmosdb show \
     --resource-group <resource-group-name> \
     --name <account-name> \
     --query capabilities

如果输出显示 EnableAccountKeysLastUsageCheckInDisableLocalAuth 和 EnableKeyCheckBeforeRegenerationPreview,则表示该功能已启用。

使用主键时轮换密钥

如果应用程序当前正在使用主密钥,请按照以下步骤轮换到辅助密钥并重新生成主密钥。

  1. 登录到 Azure 门户 (https://portal.azure.cn)。

  2. 导航到 Azure Cosmos DB for NoSQL 帐户。

  3. 从导航菜单中选择键。

  4. 从辅助密钥旁边的省略号菜单中选择 “重新生成辅助密钥 ”。

  5. 验证新的辅助密钥是否一致地适用于 Azure Cosmos DB for NoSQL 帐户。

  6. 更新应用程序以使用辅助密钥而不是主密钥。

  7. 返回到 “密钥 ”部分,然后从主键旁边的省略号菜单中选择“ 重新生成主密钥 ”。

在使用辅助密钥时进行密钥轮换

如果应用程序当前正在使用辅助密钥,请按照以下步骤轮换到主密钥并重新生成辅助密钥。

  1. 在 Azure Cosmos DB for NoSQL 帐户的 “密钥 ”部分中,从主密钥旁边的省略号菜单中选择 “重新生成主密钥 ”。

  2. 验证新的主密钥是否一致地适用于 Azure Cosmos DB for NoSQL 帐户。

  3. 更新应用程序以使用主密钥而不是辅助密钥。

  4. 返回到 “密钥 ”部分,然后从辅助密钥旁边的省略号菜单中选择“ 重新生成辅助密钥 ”。

常见问题解答

如果启用安全密钥轮换后密钥轮换失败,会发生什么情况?

按键保持其当前状态。 安全密钥轮换检查在重新生成任何密钥 之前 运行。 如果检查发现过去 12 小时内使用了密钥,则会阻止重新生成请求。 返回错误以指示密钥仍在使用中。 没有密钥更改,因此应用程序仍可使用现有密钥正常运行。

如果仍然需要轮换该密钥,有两个选项:

  • 等待,直到该密钥已有 12 小时未被使用。 将应用程序迁移到另一个密钥(或 Microsoft Entra ID),然后在 12 小时窗口结束后重试重新生成。
  • 通过跳过检查来强制旋转。 在请求正文中将 SkipAccountKeysLastUsageCheck 设置为 true,即可绕过使用情况检查并立即重新生成密钥。 仅当确定可以安全轮换密钥时,才使用此选项。

是否启用安全密钥轮换会更改现有密钥?

No. Azure Cosmos DB已跟踪所有帐户的密钥使用情况。 启用安全密钥轮换会激活强制实施,以便服务在允许重新生成密钥或禁用本地身份验证之前验证该使用数据。 它不会修改、轮换或使任何现有密钥失效。

是否可以在没有此功能的情况下手动轮换密钥?

Yes. 本文中所述的标准密钥轮换过程独立于安全密钥轮换功能工作。 此功能增加了额外的安全层,但密钥轮换并不需要此功能。