本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用公共端点连接到缓存
所有公共终端节点连接都需要 IAM 身份验证和 TLS 1.3。生成 IAM 身份验证令牌的方法有三种:
-
GLIDE 客户端:自动处理令牌生成和刷新。无需验证码。
-
开发者工具包 ElastiCache:为您生成令牌。将其与任何 Valkey 或 Redis OSS 客户端库一起使用。
-
手动 Sigv4 签名:使用 SDK 自行生成令牌。 Amazon
用于连接的 IAM 策略
在您连接之前,您的 IAM 用户或角色需要获得调用权限elasticache:Connect。 Amazon 托管策略AdministratorAccess包括所有资源的此权限。
创建允许对 ElastiCache 缓存和 ElastiCache 用户执行elasticache:Connect操作的 IAM 策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "elasticache:Connect", "Resource": [ "arn:aws:elasticache:us-east-1:123456789012:serverlesscache:my-public-cache", "arn:aws:elasticache:us-east-1:123456789012:user:default.iam-user" ] } ] }
选项 1:内置 IAM 的 GLIDE 客户端
GLIDE 2.2 及更高版本包含内置的 IAM 身份验证支持。您可以配置 Amazon
凭据,GLIDE 会自动处理令牌生成、缓存和刷新。有关安装说明,请参阅 GLIDE 网站上的 GLIDE 文档
Python
from glide import ( GlideClusterClient, GlideClusterClientConfiguration, NodeAddress, ServerCredentials, IamAuthConfig, ServiceType, ) config = GlideClusterClientConfiguration( addresses=[NodeAddress("my-public-cache-x2e9hv.public.serverless.use1.cache.amazonaws.com", 6379)], credentials=ServerCredentials( username="default.iam-user", iam_config=IamAuthConfig( cluster_name="my-public-cache", service=ServiceType.ELASTICACHE, region="us-east-1", ), ), use_tls=True, ) client = await GlideClusterClient.create(config) await client.set("key", "value") result = await client.get("key") print(result) # b"value"
Java
import glide.api.GlideClusterClient; import glide.api.models.configuration.IamAuthConfig; import glide.api.models.configuration.ServiceType; import glide.api.models.configuration.ServerCredentials; import glide.api.models.configuration.GlideClusterClientConfiguration; import glide.api.models.configuration.NodeAddress; import java.util.List; import java.util.Collections; List<NodeAddress> nodes = Collections.singletonList( NodeAddress.builder() .host("my-public-cache-x2e9hv.public.serverless.use1.cache.amazonaws.com") .port(6379) .build() ); IamAuthConfig iamConfig = IamAuthConfig.builder() .clusterName("my-public-cache") .service(ServiceType.ELASTICACHE) .region("us-east-1") .build(); GlideClusterClientConfiguration config = GlideClusterClientConfiguration.builder() .addresses(nodes) .credentials(ServerCredentials.builder() .username("default.iam-user") .iamConfig(iamConfig) .build()) .useTLS(true) .build(); GlideClusterClient client = GlideClusterClient.createClient(config).get(); client.set("key", "value").get(); String result = client.get("key").get(); System.out.println(result); // "value"
选项 2:开发者工具包 ElastiCache
ElastiCache (developer-toolkit-elasticache) 的开发者工具包是一个独立的 Python 库和 CLI,用于生成 IAM 身份验证令牌。将其与 Python Valkey 或 Redis OSS 客户端库一起使用,比如 valkey-py。
安装
pip install developer-toolkit-elasticache
Python 和 valkey-py
import valkey from valkey.credentials import CredentialProvider from developer_toolkit_elasticache import ElastiCacheIAMAuthTokenProvider class ElastiCacheCredentialProvider(CredentialProvider): def __init__(self, auth): self._auth = auth def get_credentials(self): return self._auth.user_id, self._auth.get_token() auth = ElastiCacheIAMAuthTokenProvider( serverless_cache_name="my-public-cache", user_id="default.iam-user", region="us-east-1", ) client = valkey.ValkeyCluster( host="my-public-cache-x2e9hv.public.serverless.use1.cache.amazonaws.com", port=6379, ssl=True, credential_provider=ElastiCacheCredentialProvider(auth), ) client.set("key", "value") result = client.get("key") print(result) # b"value"
开发者工具包不会自动刷新令牌。IAM 身份验证令牌的有效期为 15 分钟,因此您的应用程序必须在当前令牌到期之前生成新令牌。前面示例中的凭证提供者会调get_token()用每个新连接。
带有开发者工具包的 CLI
要连接 valkey-cli 或 redis-cli,请使用开发者工具包 CLI 生成令牌:
export VALKEYCLI_AUTH=$(developer-toolkit-elasticache generate_iam_auth_token \ --serverless-cache-name my-public-cache \ --user-id default.iam-user \ --region us-east-1) valkey-cli -c -h my-public-cache-x2e9hv.public.serverless.use1.cache.amazonaws.com \ -p 6379 \ --tls \ --user default.iam-user
VALKEYCLI_AUTH需要 valkey-cli 9.0 或更高版本。对于 redis-cli,请使用代替REDISCLI_AUTH。VALKEYCLI_AUTH
有关源代码和其他示例,请参阅上 ElastiCache存储库的开发者工具包
选项 3:手动 sigV4 签名
使用 Amazon 软件开发工具包手动生成 IAM 身份验证令牌。有关签名代码的示例,请参阅使用令牌作为密码进行连接。
令牌和会话到期
-
令牌过期:IAM 身份验证令牌的有效期为 15 分钟。GLIDE 会自动刷新令牌。如果您使用开发者工具包或手动签名,请为每个新连接生成一个新令牌。令牌过期不会影响已建立的连接。如果您使用临时证书签署令牌,则令牌将在这些证书过期时过期(如果该时间早于 15 分钟)。
-
会话过期:连接将在 12 小时后过期并自动重新连接。撤销 IAM 委托人的
elasticache:Connect权限不会立即断开活动会话的连接。要立即断开用户的连接,请将该用户从缓存的用户组中移除。
问题排查
下表列出了常见的连接错误、其原因以及解决方法。
| 错误 | 原因 | 解决方案 |
|---|---|---|
WRONGPASS或身份验证失败 |
IAM 令牌已过期、用户名不正确、IAM 权限缺失、缓存名称不为小写或临时证书已过期 | 验证令牌是新的(少于 15 分钟),用户名是否与缓存用户组中的用户相匹配,IAM 委托人对缓存 ARN 和用户 ARN 都具有elasticache:Connect权限,令牌签名代码中的缓存名称是否为小写,并且,如果您使用临时证书签署令牌,则这些证书尚未过期。 |
NOAUTH Authentication required |
客户端在进行身份验证之前发送了一条命令。公共端点连接必须使用AUTH或HELLO … AUTH作为其第一个命令进行身份验证。在应用凭据之前,某些客户端库会发送诸如 PING “CLIENT SETINFO或” 之类的命令。重复执行未经身份验证的命令后,连接将关闭。 |
配置您的客户端,使身份验证作为连接设置的一部分进行——将令牌作为连接密码传递或通过凭据提供者传递,而不是AUTH在连接后调用。GLIDE 会自动执行此操作。 |
ERR service is not available |
对于在身份验证完成之前失败的任何新连接,都会返回此错误。为避免向未经身份验证的调用者透露引擎内部状态,请 ElastiCache 报告同样的通用消息,原因有几个不同的根本原因:IAM 身份验证暂时不可用,由于 IAM 身份验证限制您受到速率限制,或者引擎暂时超载(、或达到的最大客户端数)。BUSY CLUSTERDOWN在重新运行的已通过身份验证的连接上HELLO,将 ElastiCache 返回特定的错误,例如AUTH或。ERR IAM Authentication service is not available ERR Exceeded limit of IAM Authentication requests |
如果您最近打开的新连接或重新身份验证的比率很高,请降低该比率,然后使用指数级退避重试。如果您的连接率和重新身份验证率正常,请查看 Healt Amazon h Das |
| 连接超时 | 网络连接问题、端点不正确或未启用 TLS | 验证终端节点地址是否正确,在您的客户端配置中启用了 TLS,并且您的网络允许到端口 6379 的出站连接。 |
TLS handshake failure |
客户端不支持 TLS 1.3。带有公共端点的缓存需要 TLS 1.3。 | 将您的客户端或运行时更新到支持 TLS 1.3 的版本。 |