你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Microsoft Entra 向 Azure 托管 Redis(预览版)进行缓存身份验证

Azure 托管 Redis(预览版)提供了两种向缓存实例进行身份验证的方法:访问密钥和 Microsoft Entra。

尽管访问密钥身份验证很简单,但它伴随着一系列关于安全和密码管理的挑战。 相比之下,本文介绍如何使用 Microsoft Entra 令牌进行缓存身份验证。

Azure 托管 Redis 通过与 Microsoft Entra 集成来提供无密码身份验证机制。 配置为使用 Azure 托管 Redis 进行连接的 Entra ID 被分配的权限与使用访问密钥的相同。

本文介绍如何使用服务主体或托管标识连接到 Redis 实例。

先决条件和限制

重要

使用 Microsoft Entra 令牌建立连接后,客户端应用程序必须在 Microsoft Entra 令牌过期前定期刷新该令牌。 然后,应用必须将 AUTH 命令发送到 Redis 服务器,以避免中断连接。 有关详细信息,请参阅“将 Redis 客户端配置为使用 Microsoft Entra ID

在缓存上启用 Microsoft Entra 身份验证

  1. 在 Azure 门户中,选择要在其中配置基于 Microsoft Entra 令牌的身份验证的 Azure 托管 Redis 实例。

  2. 从“资源”菜单中选择“身份验证”。

  3. 在工作窗格中,选择“Microsoft Entra 身份验证”选项卡。

  4. 选择“启用 Microsoft Entra 身份验证”,然后选择“用户或服务主体”或“托管标识”按钮。 你输入的用户将被自动分配与你“选择”时使用访问密钥时相同的权限。 你还可输入托管标识或服务主体以连接到 AMR 实例。

    该屏幕截图显示已在资源菜单中选择身份验证,且已勾选“启用 Microsoft Entra 身份验证”。

要了解如何将 Microsoft Entra 与 Azure CLI 搭配使用,请参阅标识参考页面

在缓存上禁用访问密钥身份验证

使用 Microsoft Entra 是连接缓存的安全方法。 建议使用 Microsoft Entra 并禁用访问密钥。

为 Redis 实例禁用访问密钥身份验证后,所有现有客户端连接都会终止,无论它们是使用访问密钥还是 Microsoft Entra 身份验证。 建议遵循建议的 Redis 客户端最佳做法,以实施正确的重试机制来重新连接基于 Microsoft Entra 的连接(如果有)。

禁用访问密钥之前:

  • 必须启用 Microsoft Entra 身份验证。

  • 对于异地复制的缓存,必须:

    1. 取消链接该缓存。
    2. 禁用访问密钥。
    3. 重新链接该缓存。

如果你有在其中使用了访问密钥的缓存,并且你想要禁用访问密钥,请按照以下流程操作:

  1. 在 Azure 门户中,选择你想要在其中禁用访问密钥的 Azure 托管 Redis 实例。

  2. 从“资源”菜单中选择“身份验证”。

  3. 在工作窗格中,选择“访问密钥”。

  4. 配置要禁用的访问密钥身份验证

    显示工作窗格中的访问密钥的屏幕截图,其中包含“禁用访问密钥身份验证”复选框。

  5. 选择“”,确认要更新配置。

重要

为缓存更改“禁用访问密钥身份验证”设置后,所有现有客户端连接都会终止,无论它们是使用访问密钥还是 Microsoft Entra。 遵循最佳做法以实施正确的重试机制来重新连接基于 Microsoft Entra 的连接。 有关详细信息,请参阅连接复原能力

将 Redis 客户端配置为使用 Microsoft Entra

由于大多数 Azure 托管 Redis 客户端假定使用密码加访问密钥进行身份验证,因此你可能需要更新客户端工作流来支持使用 Microsoft Entra 进行身份验证。 在本部分中,你将了解如何将客户端应用程序配置为使用 Microsoft Entra 令牌连接到 Azure 托管 Redis。

Microsoft Entra 客户端工作流

  1. 将客户端应用程序配置为使用 Microsoft 身份验证库 (MSAL) 获取 https://redis.azure.com/.defaultacca5fbb-b7e4-4009-81f1-37e38fd66d78/.default 范围的 Microsoft Entra 令牌。

  2. 更新 Redis 连接逻辑以使用以下 UserPassword

    • User = 托管标识或服务主体的对象 ID
    • Password = 使用 MSAL 获取的 Microsoft Entra 令牌
  3. 确保客户端在 Microsoft Entra 令牌过期之前使用以下方法自动执行 Redis AUTH 命令

    • User = 托管标识或服务主体的对象 ID
    • Password = 定期刷新 Microsoft Entra 令牌

客户端库支持

Microsoft.Azure.StackExchangeRedis 库是 StackExchange.Redis 的扩展,可用于使用 Microsoft Entra 对从 Redis 客户端应用程序到 Azure 托管 Redis 的连接进行身份验证。 该扩展管理身份验证令牌,包括在令牌过期之前主动刷新令牌,以在多天内保持持久的 Redis 连接。

此示例代码演示如何使用 Microsoft.Azure.StackExchangeRedis NuGet 包通过 Microsoft Entra 连接到 Azure 托管 Redis 实例。

下表包含指向代码示例的链接。 这些示例演示了如何使用 Microsoft Entra 令牌连接到 Azure 托管 Redis 实例。 包含了多种语言的各种客户端库。

客户端库 语言 示例代码链接
StackExchange.Redis .NET StackExchange.Redis 代码示例
redis-py Python redis-py 代码示例
Jedis Java Jedis 代码示例
Lettuce Java Lettuce 代码示例
Redisson Java Redisson 代码示例
ioredis Node.js ioredis 代码示例
node-redis Node.js node-redis 代码示例

Microsoft Entra 身份验证的最佳做法

  • 配置专用链接或防火墙规则,以保护缓存免受拒绝服务攻击。
  • 为避免连接中断,请确保客户端应用程序在令牌到期前至少 3 分钟发送新的 Microsoft Entra 令牌。
  • 如果定期调用 Redis 服务器 AUTH 命令,请考虑添加抖动,以便错开 AUTH 命令。 这样,Redis 服务器就不会同时接收太多 AUTH 命令。