Azure 托管 Redis 通过与 Microsoft Entra ID 集成提供无密码身份验证机制。 默认情况下,Azure 托管 Redis 缓存使用 Microsoft Entra ID。 创建新缓存时,将启用托管标识。
尽管访问密钥身份验证仍然可用,但它在安全和密码管理方面提出了一系列挑战。 相比之下,本文介绍如何使用 Microsoft Entra 令牌进行缓存身份验证。
本文介绍如何使用服务主体或托管标识连接到 Redis 实例。
先决条件和限制
- 仅 SSL 连接支持 Microsoft Entra 身份验证。
- 不支持Microsoft Entra 组群。
- 某些 Redis 命令被阻止。 如需受阻止的命令的完整列表,请参阅 Azure 托管 Redis 中不支持的 Redis 命令。
重要
使用 Microsoft Entra 令牌建立连接后,客户端应用程序必须在 Microsoft Entra 令牌过期前定期刷新该令牌。 然后,应用必须将 AUTH 命令发送到 Redis 服务器,以避免中断连接。 有关详细信息,请参阅“将 Redis 客户端配置为使用 Microsoft Entra”。
将 Redis 客户端配置为使用 Microsoft Entra
如果过去曾使用访问密钥进行身份验证,则需要更新客户端工作流以支持使用 Microsoft Entra ID 进行身份验证。 本部分介绍如何使用 Microsoft Entra ID 连接到 Azure 托管 Redis。
将用户或系统主体添加到缓存
在 Azure 门户中连接到缓存。
在“资源”菜单上,选择“ 身份验证”。
在 “Microsoft Entra 身份验证 ”选项卡上,选择“ 用户或服务主体 ”,然后选择 “+ 选择成员”。
键入要运行程序的用户的名称。 选择要在列表中 添加的用户,然后选择。 用户将添加到 Redis 用户列表中。
Microsoft Entra 客户端工作流
将客户端应用程序配置为使用
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 Entra 身份验证的最佳做法
- 配置专用链接或防火墙规则,以保护缓存免受拒绝服务攻击。
- 为避免连接中断,请确保客户端应用程序在令牌到期前至少 3 分钟发送新的 Microsoft Entra 令牌。
- 如果定期调用 Redis 服务器
AUTH命令,请考虑添加抖动,以便错开AUTH命令。 这样,Redis 服务器就不会同时接收太多AUTH命令。
排除 Microsoft Entra ID 和缓存的问题
如果应用程序无法通过 Microsoft Entra ID 访问 Azure 托管 Redis 实例,请使用以下 PowerShell 脚本:
使用此 PowerShell 脚本验证 Azure 托管 Redis 缓存资源的 Microsoft Entra ID 令牌。 该脚本验证令牌并验证访问策略,以帮助诊断身份验证问题。
如果在使用 Microsoft Entra ID 对 Redis 连接进行身份验证时遇到问题,请运行此脚本来分析 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 代码示例 |
| 生菜 | Java | Lettuce 代码示例 |
| node-redis | Node.js | node-redis 代码示例 |
| go-redis | Go | go 代码示例 |
在缓存上禁用访问密钥身份验证
如果使用访问密钥的缓存,建议切换到 Microsoft Entra ID 作为连接缓存和禁用访问密钥的安全方式。
禁用访问密钥时,系统将终止所有现有客户端连接,无论它们是使用访问密钥还是Microsoft Entra ID 身份验证。
在异地复制缓存上禁用访问密钥之前,必须:
- 断开缓存链接。
- 禁用访问密钥。
- 重新链接该缓存。
若要禁用访问密钥,请执行以下步骤:
在 Azure 门户中,选择你想要在其中禁用访问密钥的 Azure 托管 Redis 实例。
从“资源”菜单中选择“身份验证”。
在工作窗格中,选择“访问密钥”。
选择 访问密钥身份验证 控件以禁用访问密钥。
选择“是”,确认要更新配置。
重要
当缓存的 访问密钥身份验证 设置被更改时,所有使用访问密钥或 Microsoft Entra 的现有客户端连接都会被终止。 遵循最佳做法以实施正确的重试机制来重新连接基于 Microsoft Entra 的连接。 有关详细信息,请参阅连接复原能力。