本页面提供了有关 Memorystore for Redis Cluster 的 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 是集群的 节点类型。
SHARD_COUNT 决定了实例中的 分片数量。分片数量决定了用于存储集群数据的总内存容量。如需详细了解集群规范,请参阅集群和节点规范。
授予 IAM 身份验证的权限
如需授予 IAM 访问权限,请按照授予 IAM 角色中的说明向主账号授予
roles/redis.dbConnectionUser 角色。主账号是一种身份,您可以向其授予资源访问权限 Google Cloud。例如,
主账号可以是能够访问您的 Google Cloud 项目的服务帐号。
默认情况下,向主账号授予 roles/redis.dbConnectionUser 角色后,主账号便可以访问项目中的所有实例。
为实例创建有限的 IAM 管理员角色
您可能需要创建一个可以修改实例连接 IAM 权限的角色,而无需授予完整的 IAM 管理员访问权限。为此,您可以为 roles/redis.dbConnectionUser 角色创建有限的 IAM 管理员。如需了解详情,请参阅创建有限的 IAM 管理员。
连接到使用 IAM 身份验证的实例
如果您还没有与 Redis 集群使用同一 授权网络的 Compute Engine 虚拟机,请创建一个虚拟机并按照 Linux 虚拟机使用快速入门中的说明连接到该虚拟机。
对于您的项目,请使用
gcloud compute instances set-service-account命令设置服务帐号,并为 Compute Engine 虚拟机启用 Cloud Platform API 范围。gcloud compute instances set-service-account VM_NAME \ --service-account=SERVICE_ACCOUNT_EMAIL \ --scopes=SCOPE
进行以下替换:
- VM_NAME:Compute Engine 虚拟机的名称
- SERVICE_ACCOUNT_EMAIL:服务帐号的电子邮件地址
- SCOPE:虚拟机的 Cloud Platform API 范围 (
cloud-platform)
例如,以下命令将
my-sa-123@my-project-123.服务帐号分配给名为example-VM的虚拟机,并对该虚拟机设置访问权限范围,以允许访问 Cloud Platform API:gcloud compute instances set-service-account example-VM \ --service-account=my-sa-123@my-project-123. \ --scopes=cloud-platform
如需详细了解如何启用此访问权限范围,请参阅 服务帐号并更新访问权限范围。如需详细了解此范围的最佳实践,请参阅 范围最佳实践。
为您的项目启用 Memorystore for Redis API。
从 Compute Engine SSH 终端运行以下命令,以在 Compute Engine 虚拟机上安装
redis-cli:sudo apt-get install redis-tools
运行以下命令,以检索 IAM 用户的访问令牌:
gcloud auth print-access-token
访问令牌会在一小时后过期。如需了解详情,请参阅 IAM 访问令牌时限。
连接到实例的发现端点:
redis-cli -h NETWORK_ADDRESS -p PORT -a ACCESS_TOKEN -c
替换以下内容:
NETWORK_ADDRESS:实例的网络地址。如需查看 网络地址,请参阅查看集群信息。
PORT:实例的端口号。如需查看端口号,请参阅 查看集群信息。
ACCESS_TOKEN:您在 上一步中检索到的访问令牌。
如果您指定了用户名,则必须使用
default用户名或 IAM 主账号电子邮件地址。此外,经过身份验证的连接在令牌过期后仍然有效。如需了解详情,请参阅 IAM 访问令牌时限。如果您在集群上启用了传输加密,则必须附加传输层安全协议 (TLS) 标志。例如:
redis-cli -h NETWORK_ADDRESS -p PORT -a ACCESS_TOKEN -c --tls --cacert /tmp/server_ca.pem
运行
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命令。删除用于连接到集群的 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." \ --role=roles/"ROLE_NAME"
替换以下内容:
- PROJECT_ID:项目 ID。
- SA_NAME:服务帐号的名称。
- ROLE_NAME:角色名称。对于此示例:
redis.dbConnectionUser。
以指定服务帐号的身份对应用进行身份验证。如需了解更多 信息,请参阅服务账号。
连接到使用 IAM 身份验证的实例的代码示例
您可以查看一个代码示例,该示例展示了如何使用常用客户端库对应用进行身份验证。此外,您还可以了解如何使用此代码示例连接到使用 IAM 身份验证的实例。
排查 IAM 身份验证错误消息
| 出错提示 | 推荐措施 | 说明 |
|---|---|---|
|
验证提供给 Memorystore for Redis Cluster 服务器的访问令牌,并确保已启用匹配的 ACL 用户。 | IAM 主账号缺少所需的权限,您提供的访问令牌无效,或者匹配的 ACL 用户已停用。 验证访问令牌是否已过期,以及您是否按照连接到使用 IAM 身份验证的实例中的说明检索了令牌。 如果您最近更改了 IAM 权限,则这些权限可能需要几分钟才能传播。 |
|
检查应用是否配置为向 Memorystore for Redis Cluster 服务器提供 IAM 访问令牌。 | 应用未向 Memorystore for Redis Cluster 服务器提供访问令牌。 验证应用是否配置为提供访问令牌,以及您是否按照 连接到 使用 IAM 身份验证的实例中的 说明检索了访问令牌。 |
|
请使用指数退避算法重试。 | IAM 后端过载,并向 Memorystore for Redis Cluster 服务器返回了超出配额错误。 为防止进一步连接失败,我们建议应用使用指数退避算法重试此错误。 |
|
验证用户名或使用指数退避算法重试。 | 出现此错误的原因如下:
如果用户名有效,则我们建议您的应用尝试使用指数退避算法重试此错误,以防止进一步连接失败。 |