使用 Microsoft Entra ID(预览版)进行缓存身份验证

Azure Cache for Redis 提供了两种向缓存实例进行身份验证的方法:

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

Azure Cache for Redis 通过与 Microsoft Entra ID(预览版)集成来提供无密码身份验证机制。 此集成还包括通过开源 Redis 中支持的访问控制列表 (ACL)提供的基于角色的访问控制功能。

若要使用 ACL 集成,客户端应用程序必须采用 Microsoft Entra 实体的标识(例如服务主体或托管标识),并连接到缓存。 在本文中,你将了解如何使用服务主体或托管标识连接到缓存,以及如何根据用于连接的 Microsoft Entra 项目授予连接预定义权限。

可用范围

基本、标准、高级
可用性 是(预览版)

先决条件和限制

重要

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

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

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

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

  3. 在工作窗格中,选择“(预览)启用 Microsoft Entra 身份验证”。

  4. 选择“启用 Microsoft Entra 身份验证”,然后输入有效用户的姓名。 选择“保存”时,系统会自动向你输入的用户默认分配数据所有者访问策略。 还可输入托管标识或服务主体以连接到缓存实例。

    Screenshot showing authentication selected in the resource menu and the enable Microsoft Entra authentication checked.

  5. 这会显示一个弹出对话框,询问是否要更新配置,并通知你这需要几分钟时间。 选择

    重要

    启用操作完成后,缓存实例中的节点将重新启动以加载新配置。 建议在维护时段或高峰营业时间外执行此操作。 此操作最多可能需要 30 分钟。

对缓存使用数据访问配置

如果要使用自定义访问策略而不是 Redis 数据所有者,请转到“资源”菜单上的“数据访问配置”。 有关详细信息,请参阅为应用程序配置自定义数据访问策略

  1. 在 Azure 门户中,选择你想要在其中添加到数据访问配置的 Azure Cache for Redis 实例。

  2. 从“资源”菜单中,选择“(预览)数据访问配置”。

  3. 选择“添加”,然后选择“新建 Redis 用户”。

  4. 在“访问策略”选项卡上,从表中的可用策略中进行选择:“数据所有者”、“数据参与者”或“数据读取者”。 然后选择“下一步:Redis 用户”。

    Screenshot showing the available Access Policies.

  5. 选择“用户或服务主体”或“托管标识”,确定如何分配对 Azure Cache for Redis 实例的访问权限。 如果选择“用户或服务主体”,并且想要添加用户,必须首先启用 Microsoft Entra 身份验证

  6. 然后,选择“选择成员”,然后选择“选择”。 然后,选择“下一步: 查看 + 分配”。 Screenshot showing members to add as New Redis Users.

  7. 然后会弹出一个对话框,通知你升级为永久性并且可能导致短暂的连接故障。 选择“是”。

    重要

    启用操作完成后,缓存实例中的节点将重新启动以加载新配置。 建议在维护时段或高峰营业时间外执行此操作。 此操作最多可能需要 30 分钟。

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

由于大多数 Azure Cache for Redis 客户端假定使用密码加访问密钥进行身份验证,因此你可能需要更新客户端工作流来支持使用 Microsoft Entra ID 进行身份验证。 在本部分中,你将了解如何将客户端应用程序配置为使用 Microsoft Entra 令牌连接到 Azure Cache for 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 ID 对从 Redis 客户端应用程序到 Azure Cache for Redis 的连接进行身份验证。 该扩展管理身份验证令牌,包括在令牌过期之前主动刷新令牌,以在多天内保持持久的 Redis 连接。

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

下表包含代码示例的链接,这些示例演示了如何使用 Microsoft Entra 令牌连接到 Azure Cache for 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 命令。

后续步骤