Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何解决使用 IAM 身份验证连接到 ElastiCache 集群时出现的“invalid username-password pair or user is disabled”错误?
当我使用 AWS Identity and Access Management (IAM) 身份验证连接到我的 Amazon ElastiCache Valkey 和 Redis OSS 集群时,我收到“AuthenticationError: invalid username-password pair or user is disabled”错误。
解决方案
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
创建用户
完成以下步骤:
- 打开 ElastiCache 控制台。
- 从 Configurations(配置)中,选择 User management(用户管理)。
- 选择 Create user(创建用户),然后输入以下信息:
对于 User ID(用户 ID),输入用户 ID。
对于 User name(用户名),输入用户名。
注意:对于 IAM 用户,用户 ID 和用户名必须相同且为小写。
从下拉列表中选择您的引擎。
对于 Authentication mode(身份验证模式),选择 IAM authentication(IAM 身份验证)。
在 Access string(访问字符串)字段中,输入 on ~* +@all。
**注意:**要允许活动用户访问所有可用的按键和命令,请使用 on ~*+@all 访问字符串。最佳做法是创建仅提供用户所需权限的限制性访问字符串。有关详细信息,请参阅使用访问字符串指定权限。 - 选择 Create(创建)。
创建用户组
完成以下步骤:
- 打开 ElastiCache 控制台。
- 从 Configurations(配置)中,选择 User group management(用户组管理)。
- 选择 Create user group(创建用户组)。
- 对于 User group ID(用户组 ID),输入用户组 ID。
- 从下拉列表中选择您的引擎。
- 在 Selected users(选定的用户)部分中,选择 Manage(管理)。
- 从用户列表中选择您之前创建的用户。
**重要事项:**如果您对于 Engine(引擎)选择了 Redis,请选择名为 Default 的用户。ElastiCache 会自动创建一个具有完全 Redis 访问权限的默认用户,该用户无需密码即可进行身份验证。要修改默认用户设置,请参阅使用控制台和 CLI 创建用户和用户组。 - 选择 Create(创建)。
允许 IAM 身份验证
在 ElastiCache 集群上启用传输中加密 (TLS)。
为您的集群配置基于角色的访问控制
完成以下步骤:
- 打开 ElastiCache 控制台。
- 从集群列表中选择您的集群。
- 选择 Actions(操作),然后选择 Modify(修改)。
- 从 Access control(访问控制)中,选择 User group access control list(用户组访问控制列表),然后选择您的用户组。
- 选择 Preview changes(预览更改)。
- 选择 Save(保存)。
配置您的 IAM 策略
将 elasticache:Connect 操作添加到用于连接到 ElastiCache 集群的 IAM 身份中。IAM 策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticache:Connect" ], "Resource": [ "AWS_RESOURCE_ARN_1", "AWS_RESOURCE_ARN_2" ] } ] }
**注意:**请将 AWS_RESOURCE_ARN_1 替换为您的 ElastiCache Valkey 或 Redis OSS 集群的 Amazon 资源名称 (ARN),将 AWS_RESOURCE_ARN_2 替换为您用于 ElastiCache 的 IAM 用户的 ARN。
然后,将 IAM 角色附加到连接至 ElastiCache 集群的 Amazon Elastic Compute Cloud (Amazon EC2) 实例或 AWS Lambda 函数。有关详细信息,请参阅使用 IAM 进行身份验证。
**注意:**如果您的 IAM 策略正确但仍收到 AuthenticationError 错误,请检查组织中的其他策略类型是否存在限制。有关详细信息,请参阅使用策略管理访问权限中的其他策略类型。
检查网络连接
验证您的 ElastiCache 集群与客户端资源之间的网络连接。
生成身份验证令牌
如果您使用 IAM 身份验证连接到 ElastiCache 集群,请使用身份验证令牌而不是密码。IAM 身份验证令牌的有效期为 15 分钟。
对于长期存在的连接,最佳做法是使用支持凭证提供程序接口的 Valkey 或 Redis OSS 客户端。要将连接延长 12 小时,请使用新令牌发送 AUTH 或 HELLO。
要生成 IAM 身份验证令牌并连接到 ElastiCache 集群,请完成以下步骤:
-
设置 Amazon EC2 实例以运行演示应用程序。有关说明,请参阅 GitHub 网站上的 Elasticache IAM authentication demo application(Elasticache IAM 身份验证演示应用程序)。
-
要在使用演示应用程序时生成令牌,请运行以下 Java CLI 命令:
java -cp target/ElastiCacheIAMAuthDemoApp-1.0-SNAPSHOT.jar \ com.amazon.elasticache.IAMAuthTokenGeneratorApp --region REGION --replication-group-id REPLICATION-GROUP-ID --user-id USER-ID**注意:**请将 REGION 替换为您的 AWS 区域,将 REPLICATION-GROUP-ID 替换为您的 ElastiCache 复制组 ID,将 USER-ID 替换为您用于 ElastiCache 的 IAM 用户 ID。
-
使用令牌作为密码以连接到 ElastiCache 集群。您可以使用 Valkey 或 Redis CLI 或其客户端 API 库来连接您的 ElastiCache 集群。
Valkey CLI 命令示例:valkey-cli -h PRIMARY-ENDPOINT -p 6379 --tls -c --user USER ID -a TEMPORARY-SECURITY-CREDENTIALRedis CLI 命令示例:
redis6-cli -h PRIMARY-ENDPOINT -p 6379 --tls -c --user USER-ID -a TEMPORARY-SECURITY-CREDENTIAL**注意:**请将 PRIMARY-ENDPOINT 替换为您的 ElastiCache 集群的主端点,将 USER-ID 替换为您的 IAM 用户 ID,将 TEMPORARY-SECURITY-CREDENTIAL 替换为您的 IAM 身份验证令牌。
**重要事项:**当使用 valkey-cli 或 redis-cli 命令时,必须同时包含 --tls 和 -a 参数。如果您未提供这些参数或输入了错误的凭证,则会收到 NOAUTH 或 AUTH failed 错误消息。如果您在使用 valkey-cli 或 redis-cli 时仅包含 --tls 参数,请在连接后使用 AUTH user-id temporary-security-credential 完成身份验证。
Lettuce Redis OSS 客户端示例:
RedisURI redisURI = RedisURI.builder() .withHost(CACHE-NAME) .withPort(6379) .withSsl(true) .withAuthentication(USER-ID, TEMPORARY-SECURITY-CREDENTIAL) .build(); return RedisClient.create(redisURI);
查看 Redis OSS 或 Valkey 客户端配置中的组件
验证 Redis OSS 或 Valkey 客户端中的以下配置:
- Valkey 或 Redis OSS 客户端具有正确的 ElastiCache 集群端点和端口。
- Valkey 或 Redis OSS 客户端支持 SSL/TLS。
- 您的用户名是已为 ElastiCache 启用的 IAM 用户。
- 您拥有与您的 ElastiCache 集群的配置、引擎类型和版本参数相匹配的最新版本的 Valkey 或 Redis OSS 客户端。客户端版本过时或不兼容会导致身份验证错误。
- 您已根据自身需求配置了客户端超时参数。超时设置不正确可能会过早终止连接并导致身份验证错误。
检查 Amazon CloudWatch 指标
使用 Amazon CloudWatch 指标监控 ElastiCache 集群的运行状况和活动。要识别身份验证问题,最佳做法是监控以下指标:
- 检查 Connections(连接)指标,例如 CurrConnections 和 NewConnections。新连接减少意味着身份验证错误导致连接尝试失败。在每种情况下,ElastiCache 都会使用 2 到 6 个连接来监控集群。有关详细信息,请参阅 Valkey 和 Redis OSS 的指标。
- 查看 IamAuthenticationExpirations 以监控可能导致连接失败的过期 IAM 身份验证令牌。
- 查看 IamAuthenticationThrottling 以了解 ElastiCache 限制使用 IAM 凭证进行身份验证尝试的次数。
相关信息
GitHub 网站上的 ElastiCache IAM authentication demo Application(ElastiCache IAM 身份验证演示应用程序)
Redisson 网站上的 How to Connect to Redis With the ElastiCache IAM Credential Provider(如何使用 ElastiCache IAM 凭证提供程序连接到 Redis)
