重要
Azure Cache for Redis宣布其所有 SKU 的停用时间表。 建议尽快将现有Azure Cache for Redis实例移动到Azure托管 Redis。
迁移指南:
有关停用的更多详细信息:
Azure Cache for Redis提供两种方法来身份验证缓存实例:访问密钥和Microsoft Entra。
尽管访问密钥身份验证很简单,但它伴随着一系列关于安全和密码管理的挑战。 与此相反,本文介绍如何使用Microsoft Entra令牌进行缓存身份验证。
Azure Cache for Redis通过与 Microsoft Entra 集成提供无密码身份验证机制。 此集成还包括通过开源 Redis 中支持的访问控制列表 (ACL) 提供的基于角色的访问控制功能。
若要使用 ACL 集成,客户端应用程序必须假定Microsoft Entra实体(例如服务主体或托管标识)的标识,并连接到缓存。 本文介绍如何使用服务主体或托管标识连接到缓存。 你还将学习如何根据用于连接的 Microsoft Entra 组件,授予该连接预定义的权限。
可用范围
| 层 | 基本、标准、高级 |
|---|---|
| 可用性 | 是 |
先决条件和限制
- 支持 SSL 连接和 TLS 1.2 或更高版本的 Microsoft Entra 身份验证。
- 不支持Microsoft Entra组。
- 某些 Redis 命令被阻止。 有关被阻止命令的完整列表,请参阅
在 Azure Cache for Redis 中不支持的 Redis 命令 。
重要
使用Microsoft Entra令牌建立连接后,客户端应用程序必须在过期前定期刷新Microsoft Entra令牌。 然后,应用必须将 AUTH 命令发送到 Redis 服务器,以避免中断连接。 有关详细信息,请参阅 配置 Redis 客户端以使用 Microsoft Entra。
在缓存上启用Microsoft Entra身份验证
在 Azure 门户中,选择要配置 Microsoft Entra 基于令牌身份验证的 Azure Cache for Redis 实例。
从“资源”菜单中选择“身份验证”。
在工作窗格中,选择Microsoft Entra身份验证选项卡。
选择“启用 Microsoft Entra 身份验证”并输入有效用户的名称。 选择“保存”时,系统会自动向你输入的用户默认分配数据所有者访问策略。 还可输入托管标识或服务主体以连接到缓存实例。
一个弹出对话框会询问是否要更新配置,并通知你这需要几分钟时间。 选择是。
重要
启用操作完成后,缓存实例中的节点将重新启动以加载新配置。 建议在维护时段或高峰营业时间之外执行此操作。 此操作最多可能需要 30 分钟。
有关如何使用 Azure CLI 配合 Microsoft Entra 的信息,请参阅 标识的参考页。
在缓存上禁用访问密钥身份验证
使用 Microsoft Entra 是连接缓存的安全方法。 建议使用Microsoft Entra并禁用访问密钥。
为缓存禁用访问密钥身份验证时,将终止所有现有客户端连接,无论是使用访问密钥还是Microsoft Entra身份验证。 遵循建议的 Redis 客户端最佳做法,实现正确的重试机制,以便重新连接基于Microsoft Entra的连接(如果有)。
在禁用访问密钥之前
- 确保已启用Microsoft Entra身份验证,并且至少配置了一个 Redis 用户。
- 确保连接到缓存实例的所有应用程序都切换到使用Microsoft Entra身份验证。
- 确保
连接客户端 和使用 Microsoft Entra Token 的连接客户端 具有相同的值。 如果这两个指标的值不相同,这意味着仍有一些连接是使用访问密钥创建的,而不是Microsoft Entra令牌。 - 考虑在缓存实例的计划性维护时段内禁用访问。
- 禁用访问密钥仅适用于“基本”、“标准”和“高级”层缓存。
对于异地复制的缓存,您必须:
- 解除缓存的链接。
- 禁用访问密钥。
- 重新链接该缓存。
如果你有在其中使用了访问密钥的缓存,并且你想要禁用访问密钥,请按照以下流程操作:
在Azure门户中,选择要禁用访问密钥的Azure Cache for Redis实例。
从“资源”菜单中选择“身份验证”。
在工作窗格中,选择“访问密钥”。
选择“禁用访问密钥身份验证”。 然后选择“保存”。
选择“是”,确认要更新配置。
重要
当缓存的Disable Access Keys Authentication设置发生更改时,所有使用访问密钥或Microsoft Entra的现有客户端连接都将被终止。 遵循最佳做法,实现正确的重试机制以重新连接基于Microsoft Entra的连接。 有关详细信息,请参阅连接复原能力。
在缓存中使用数据访问配置
如果要使用自定义访问策略而不是 Redis 数据所有者,请转到“资源”菜单上的“数据访问配置”。 有关详细信息,请参阅为应用程序配置自定义数据访问策略。
在Azure门户中,选择要添加到数据访问配置的Azure Cache for Redis实例。
在“资源”菜单中选择“数据访问配置”。
选择“添加”,然后选择“新增 Redis 用户”。
在“访问策略”选项卡上,从表中的可用策略中进行选择:“数据所有者”、“数据参与者”或“数据读取者”。 然后,选择“下一步:Redis 用户”。
选择 User 或服务主体或 Managed Identity以确定如何分配对Azure Cache for Redis实例的访问权限。 如果选择 User 或服务主体并且想要添加用户,则必须首先启用Microsoft Entra身份验证。
然后,依次选择“选择成员”和“选择”。 然后,选择“下一步: 查看 + 分配”。
一个弹出式对话框会通知你升级是永久的,并且可能导致短暂的连接故障。 选择是。
重要
启用操作完成后,缓存实例中的节点将重新启动以加载新配置。 建议在维护时段或高峰营业时间之外执行此操作。 此操作最多可能需要 30 分钟。
将 Redis 客户端配置为使用 Microsoft Entra
由于大多数Azure Cache for Redis客户端都假定密码和访问密钥用于身份验证,因此可能需要更新客户端工作流以支持使用Microsoft Entra进行身份验证。 本部分介绍如何将客户端应用程序配置为使用Microsoft Entra令牌连接到Azure Cache for Redis。
Microsoft Entra客户端工作流
使用 Microsoft 身份验证库 (MSAL) 将客户端应用程序配置为获取用于
https://redis.azure.com/.default或acca5fbb-b7e4-4009-81f1-37e38fd66d78/.default范围的 Microsoft Entra 令牌。更新 Redis 连接逻辑以使用以下
User和Password:-
User= 托管标识或服务主体的对象 ID -
Password= 使用 MSAL 获取的 Microsoft Entra 令牌
-
确保您的客户端在您的 Microsoft Entra 令牌过期之前自动执行 Redis AUTH 命令:
-
User= 你的托管标识或服务主体的对象 ID -
Password= 定期刷新 Microsoft Entra 令牌
-
客户端库支持
库 Microsoft.Azure.StackExchangeRedis 是 StackExchange.Redis 的扩展,可用于使用 Microsoft Entra 对从 Redis 客户端应用程序到 Azure Cache for Redis 的连接进行身份验证。 该扩展管理身份验证令牌,包括在令牌过期之前主动刷新令牌,以在多天内保持持久的 Redis 连接。
以下代码示例演示如何使用 Microsoft.Azure.StackExchangeRedis NuGet 包通过Microsoft Entra连接到Azure Cache for Redis实例。
下表包含指向代码示例的链接。 通过演示,他们展示如何使用 Microsoft Entra 令牌连接到 Azure Cache for Redis 实例。 包含了多种语言的各种客户端库。
| 客户端库 | 语言 | 示例代码链接 |
|---|---|---|
| StackExchange.Redis | .NET | StackExchange.Redis 代码示例 |
| redis-py | Python | redis-py 代码示例 |
| Jedis | Java | Jedis 代码示例 |
| 生菜 | Java | Lettuce 代码示例 |
| node-redis | Node.js | node-redis 代码示例 |
| go-redis | Go | go 代码示例 |
Microsoft Entra身份验证的最佳做法
- 配置专用链接或防火墙规则,以保护缓存免受拒绝服务攻击。
- 确保客户端应用程序在令牌过期前至少三分钟发送新的Microsoft Entra令牌,以避免连接中断。
- 如果您定期调用 Redis 服务器上的
AUTH命令,建议添加一个随机延迟,以便交错执行AUTH命令。 这样,Redis 服务器就不会同时接收太多AUTH命令。