本页面提供有关 Memorystore for Redis 集群的 IAM 身份验证功能的常见任务的说明。如需详细了解此功能,请参阅 IAM 身份验证简介。
创建启用了 IAM 身份验证的实例
如需创建使用 IAM 身份验证的 Memorystore for Redis Cluster 实例,请运行 create
命令:
gcloud redis clusters create INSTANCE_ID --region=REGION_ID --network=NETWORK --node-type=NODE_TYPE --shard-count=SHARD_COUNT --auth-mode=iam-auth
替换以下内容:
INSTANCE_ID 是您要创建的 Memorystore for Redis Cluster 实例的 ID。实例 ID 的长度必须介于 1 到 63 个字符之间,且只能使用小写字母、数字或连字符。并且必须以小写字母开头并以小写字母或数字结尾。
REGION_ID 是您要将实例放置在其中的区域。
NETWORK 是用于创建实例的网络。必须采用以下格式:
projects/NETWORK_PROJECT_ID/global/networks/NETWORK_ID
。此处使用的网络 ID 必须与服务连接政策使用的网络 ID 相匹配。否则,create
操作会失败。如需了解详情,请参阅网络。NODE_TYPE 是您选择的节点类型。接受的值包括:
redis-shared-core-nano
redis-standard-small
redis-highmem-medium
redis-highmem-xlarge
SHARD_COUNT 用于确定实例中的分片数量。分片数量决定了用于存储集群数据的总内存容量。如需详细了解集群规范,请参阅集群和节点规范。
授予 IAM 身份验证权限
如需授予 IAM 访问权限,请按照授予 IAM 角色说明向主账号授予 roles/redis.dbConnectionUser
角色。
默认情况下,向主账号授予 roles/redis.dbConnectionUser
角色后,该主账号便可访问项目中的所有实例。
为实例创建受限的 IAM 管理员角色
您可能希望创建一个可以修改实例连接 IAM 权限的角色,但又不想授予完整的 IAM 管理员访问权限。为此,您可以为 roles/redis.dbConnectionUser
角色创建受限的 IAM 管理员。如需了解详情,请参阅创建受限的 IAM 管理员。
连接到使用 IAM 身份验证的实例
如果您还没有与 Redis 集群使用同一授权网络的 Compute Engine 虚拟机,请创建一个虚拟机并按照 Linux 虚拟机使用快速入门中的说明连接到该虚拟机。
为您的项目启用 Cloud Platform API 范围。如需详细了解如何启用此访问权限范围,请参阅服务账号并更新访问权限范围。如需详细了解此范围的最佳实践,请参阅范围最佳实践。
为您的项目启用 Memorystore for Redis API。
从 Compute Engine SSH 终端运行以下命令,以在 Compute Engine 虚拟机上安装 redis-cli:
sudo apt-get install redis-tools
运行以下命令以获取 IAM 用户的访问令牌:
gcloud auth print-access-token
连接到实例的发现端点:
redis-cli -h NETWORK_ADDRESS -p PORT -a ACCESS_TOKEN -c
替换以下内容:
运行
CLUSTER SHARDS
命令可查看集群拓扑。记下其中一个节点的 IP 地址和端口号。如需使用
redis-cli
进行身份验证并连接到节点,请使用以下命令:redis-cli -h NODE_IP_ADDRESS -p NODE_PORT -a ACCESS_TOKEN -c
替换以下内容:
- NODE_IP_ADDRESS:您在上一步中找到的节点的 IP 地址
- NODE_PORT:您在上一步中找到的节点的端口号
- ACCESS_TOKEN:您在之前的步骤中检索到的 IAM 访问令牌
如需验证是否与节点建立了经过身份验证的连接,请运行 Redis
SET
和GET
命令。删除用于连接到 Redis 集群的 Compute Engine 虚拟机。这有助于避免系统向您的 Cloud Billing 账号收取费用。
自动检索访问令牌
(可选)如果您还没有为应用创建服务账号,请创建一个(请参阅创建和管理服务账号)。
gcloud iam service-accounts create SA_NAME \ --description="DESCRIPTION" \ --display-name="DISPLAY_NAME"
替换以下内容:
- SA_NAME 是服务账号的名称。
- DESCRIPTION 是可选的服务账号说明。
- DISPLAY_NAME 是要在Google Cloud 控制台中显示的服务账号名称。
向您的服务账号授予对项目的
redis.dbConnectionUser
权限。gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role="ROLE_NAME"
替换以下内容:
- PROJECT_ID:项目 ID
- SA_NAME:服务账号的名称
- ROLE_NAME:角色名称,例如
redis.dbConnectionUser
连接到使用 IAM 身份验证的实例的代码示例
您可以查看代码示例,了解如何使用热门客户端库对应用进行身份验证。此外,您还可以了解如何使用此代码示例连接到使用 IAM 身份验证的实例。
排查与 IAM 身份验证相关的错误消息
错误消息 | 建议采取的操作 | 说明 |
---|---|---|
|
验证提供给 Memorystore for Redis Cluster 服务器的用户名和访问令牌 | 提供的用户名或访问令牌无效。“default”是唯一支持的用户名。如果您的应用已在使用“默认”用户名,请验证访问令牌是否未过期,并且是否按照连接到使用 IAM 身份验证的实例中的说明进行检索。如果 IAM 权限最近发生了更改,可能需要几分钟时间才能传播。 |
|
检查应用是否已配置为向 Memorystore for Redis Cluster 服务器提供 IAM 访问令牌 | 应用未向 Memorystore for Redis Cluster 服务器提供访问令牌。验证应用是否已配置为提供访问令牌。请按照连接到使用 IAM 身份验证的实例中的说明操作 |
|
使用指数退避重试 | IAM 后端过载,并向 Memorystore for Redis Cluster 服务器返回了配额超出错误。应用应尝试使用指数退避算法重试此错误,以防止进一步的连接失败。 |
|
使用指数退避重试 | IAM 后端向 Memorystore for Redis Cluster 服务器返回了暂时性错误。应用应尝试使用指数退避算法重试此错误,以防止进一步的连接失败。 |