使用基于令牌的基本身份验证来保护对集群的访问

除了 Identity and Access Management (IAM) 身份验证之外,您还可以使用基于令牌的基本身份验证来确保对 Memorystore for Redis Cluster 中集群的访问安全。作为一种轻量级解决方案,基于令牌的基本身份验证可让客户端通过使用令牌在您的应用中验证其身份。

基于令牌的基本身份验证对资源的要求极低,资源开销也很低。此外,如果您目前在 Memorystore for Redis 或本地应用上的工作负载已使用基于令牌的基本身份验证,那么在迁移到 Memorystore for Redis Cluster 时,此功能可帮助您顺利过渡。

优势

使用基于令牌的基本身份验证可带来以下好处:

  • 灵活性:对于新集群和现有集群,您可以随时启用身份验证。启用基于令牌的基本身份验证后,您的集群将受到保护。对于所有新连接,用户必须提供令牌才能通过身份验证并进入您的集群。
  • 零停机时间轮替:轮替用户令牌,而不会导致应用停机。
  • 兼容性default 超级用户保持授予该用户的相同权限。基于令牌的基本身份验证可添加额外的保护层。这样可确保在将工作负载从 Memorystore for Redis 迁移到 Memorystore for Redis Cluster 时实现向后兼容。

身份验证模式

基于令牌的基本身份验证支持两种主要身份验证模式:

  • 简单身份验证:一种简单直接的方法,用户通过发送身份验证令牌来验证自己是否为 default 用户
  • 多用户身份验证:管理多个用户以验证对集群的访问权限

最佳做法

出于安全考虑,我们建议您遵循以下有关基于令牌的基本身份验证的最佳实践:

  • 轮替用户令牌:为用户令牌使用轮替政策
  • 使用 Secret Manager:请勿在应用代码中硬编码用户的基本令牌身份验证凭据。而是将其存储在 Secret Manager 中,并在运行时检索。

    Secret Manager 为用户凭据提供集中式加密保险库,可消除密钥蔓延问题,并减少手动管理凭据的运营开销。它通过使用 IAM 来强制执行访问权限控制,并自动生成审核日志。这有助于确保合规性并防止凭据泄露。

  • 将基于令牌的基本身份验证与传输层安全协议 (TLS) 相结合:使用基于令牌的基本身份验证时,建议您启用传输中加密。这样可确保用户名和令牌不会以纯文本形式通过网络发送。

准备工作

在开始使用基于令牌的基本身份验证来保护集群之前,请完成本部分中的前提条件。

验证客户端是否支持基于令牌的基本身份验证

如需确认客户端应用是否支持基于令牌的基本身份验证,请确保应用可以使用 AUTH 命令。

default 用户使用以下命令向您的客户端应用进行身份验证:

AUTH TOKEN

在此命令中,TOKEN 是默认用户的身份验证令牌。

所有其他用户都使用以下命令进行身份验证:

AUTH USERNAME TOKEN

在此命令中,USERNAMETOKEN 分别是用户的用户名和身份验证令牌。

如需详细了解 AUTH 命令,请参阅 Redis 文档中的 AUTH

使用 Google Cloud 控制台、Google Cloud CLI 和 API

如需使用 Google Cloud 控制台、gcloud CLI 和 API,请执行以下操作:

  1. 在 Google Cloud 控制台的项目选择器页面上,选择或创建 Google Cloud 项目

    转到项目选择器

  2. 确保您的项目已启用结算功能。 了解如何检查项目是否已启用结算功能
  3. 安装初始化 Google Cloud CLI (gcloud CLI)。

    注意:如果您已安装 gcloud CLI,请运行 gcloud components update 以确保您拥有最新版本。如需访问 Memorystore for Redis Cluster gcloud CLI 命令,您需要至少使用 gcloud CLI 版本 489.0.0

  4. 启用 Memorystore for Redis Cluster API。
    Memorystore for Redis Cluster API
  5. 启用 Network Connectivity API。
    Network Connectivity API
  6. 启用 Service Consumer Management API。
    Service Consumer Management API

分配角色

如需为集群配置基于令牌的基本身份验证,您必须在 Google Cloud 项目中拥有以下 IAM 角色之一:

  • roles/redis.admin(Redis 管理员角色)
  • roles/owner(Owner 角色)
  • roles/editor(“编辑者”角色)

管理集群的基本令牌身份验证

Memorystore for Redis Cluster 支持以下操作来管理集群的基本令牌身份验证:

创建具有基本基于令牌的身份验证的集群

通过创建具有基于令牌的基本身份验证的集群,您可以采用一种轻量级且广泛支持的方法来限制用户对集群的访问权限。

您可以使用 gcloud CLI 创建集群。

如需创建已启用基于令牌的基本身份验证的集群,请使用 gcloud beta redis clusters create 命令。

gcloud beta redis clusters create CLUSTER_ID \
--region=REGION \
--auth-mode=token-auth

进行以下替换:

  • CLUSTER_ID:您要创建的集群的 ID,用于使用基于令牌的基本身份验证
  • REGION:您希望集群所在的区域

为集群启用基于令牌的基本身份验证

通过为集群启用基于令牌的基本身份验证,您可以采用一种轻量级且广泛支持的方法来限制用户对集群的访问权限。

default 用户只需使用自己的令牌即可向集群进行身份验证。所有其他用户则使用标准用户名和令牌进行身份验证。如需了解详情,请参阅验证客户端是否支持基于令牌的基本身份验证

启用基于令牌的基本身份验证可能会导致尝试创建新连接的应用出现停机,因为 Memorystore for Redis Cluster 要求请求经过身份验证。虽然现有连接不受影响,但若要利用基于令牌的基本身份验证来尝试后续连接到集群,您必须更新应用。如需了解详情,请参阅使用基于令牌的基本身份验证连接到集群

您可以使用 gcloud CLI 为集群启用基于令牌的基本身份验证。

如需启用基于令牌的基本身份验证,请使用 gcloud beta redis clusters update 命令。

gcloud beta redis clusters update CLUSTER_ID \
--region=REGION \
--auth-mode=token-auth

进行以下替换:

  • CLUSTER_ID:要为其启用基于令牌的基本身份验证的集群的 ID
  • REGION:集群所在的区域

为集群创建基于令牌的基本身份验证用户

通过为集群创建基于令牌的基本身份验证用户,您可以配置集群以允许多用户身份验证。在用户首次登录后,此身份验证模式会充当新连接的安全且可撤消的凭据。在用户删除身份验证令牌或被移除之前,可以继续使用该令牌。

您可以使用 gcloud CLI 创建基于令牌的基本身份验证用户。

如需创建用户,请使用 gcloud beta redis clusters create-token-auth-user 命令。

gcloud beta redis clusters create-token-auth-user CLUSTER_ID \
--region=REGION \
--token-auth-user=USERNAME

进行以下替换:

  • CLUSTER_ID:要为其创建基于令牌的基本身份验证用户的集群的 ID
  • REGION:集群所在的区域
  • USERNAME:用户的用户名

列出集群的基本令牌身份验证用户

您可以使用 gcloud CLI 检索集群的基本令牌身份验证用户列表。

如需列出用户,请使用 gcloud beta redis clusters token-auth-users list 命令。

gcloud beta redis clusters token-auth-users list \
--cluster=CLUSTER_ID \
--region=REGION

进行以下替换:

  • CLUSTER_ID:您要检索基本令牌身份验证用户列表的集群的 ID。
  • REGION:集群所在的区域

查看有关基于基本令牌的身份验证用户的信息

您可以使用 gcloud CLI 查看有关基于令牌的基本身份验证用户的信息。

如需查看有关用户的信息,请使用 gcloud beta redis clusters token-auth-users describe 命令。

gcloud beta redis clusters token-auth-users describe USERNAME \
--cluster=CLUSTER_ID \
--region=REGION

进行以下替换:

  • USERNAME:您要查看其信息的基本令牌身份验证用户的用户名
  • CLUSTER_ID:用户可以向其进行身份验证的集群的 ID
  • REGION:集群所在的区域

从集群中删除基于基本令牌的身份验证用户

从集群中删除基于令牌的基本身份验证用户后,您将撤消该用户对集群的访问权限。

您可以使用 gcloud CLI 从集群中删除基于令牌的基本身份验证用户。

如需删除用户,请使用 gcloud beta redis clusters token-auth-users delete 命令。

gcloud beta redis clusters token-auth-users delete USERNAME \
--cluster=CLUSTER_ID \
--region=REGION

进行以下替换:

  • USERNAME:基于基本令牌的身份验证用户的用户名
  • CLUSTER_ID:要从中删除用户的集群的 ID
  • REGION:集群所在的区域

对于您要删除的用户,Memorystore for Redis Cluster 不会结束现有连接。如需结束这些连接,请在集群中的所有节点上运行以下命令:

CLIENT KILL USER USERNAME

管理用户的基本基于令牌的身份验证

Memorystore for Redis Cluster 支持以下操作来管理用户的基本令牌身份验证:

为用户创建身份验证令牌

通过为用户创建身份验证令牌,您可以轮替用户的现有令牌,而不会导致应用停机。

您可以使用 gcloud CLI 为用户创建身份验证令牌。

如需创建用户,请使用 gcloud beta redis clusters token-auth-users create-auth-token 命令。

gcloud beta redis clusters token-auth-users create-auth-token USERNAME \
--cluster=CLUSTER_ID \
--region=REGION

进行以下替换:

  • USERNAME:您要为其创建身份验证令牌的用户的用户名
  • CLUSTER_ID:用户可以使用相应令牌访问的集群的 ID
  • REGION:集群所在的区域

列出用户的身份验证令牌

您可以使用 gcloud CLI 检索用户的身份验证令牌列表。

如需列出令牌,请使用 gcloud beta redis clusters token-auth-users auth-tokens list 命令。

gcloud beta redis clusters token-auth-users auth-tokens list \
--token-auth-user=USERNAME \
--cluster=CLUSTER_ID \
--region=REGION

进行以下替换:

  • USERNAME:身份验证令牌所属的用户的用户名
  • CLUSTER_ID:用户可以使用身份验证令牌访问的集群的 ID
  • REGION:集群所在的区域

查看有关用户身份验证令牌的信息

您可以使用 gcloud CLI 查看有关用户身份验证令牌的信息。

如需查看相关信息,请使用 gcloud beta redis clusters token-auth-users auth-tokens describe 命令。

gcloud beta redis clusters token-auth-users auth-tokens describe AUTH_TOKEN \
--cluster=CLUSTER_ID \
--region=REGION \
--token-auth-user=USERNAME

进行以下替换:

  • AUTH_TOKEN:您要查看相关信息的身份验证令牌的名称
  • CLUSTER_ID:用户可以使用相应令牌访问的集群的 ID
  • REGION:集群所在的区域
  • USERNAME:身份验证令牌所属的用户的用户名

从用户中删除身份验证令牌

从用户处删除身份验证令牌是一项关键的安全操作,会使令牌失效。

您可以使用 gcloud CLI 删除用户的身份验证令牌。

如需删除令牌,请使用 gcloud beta redis clusters token-auth-users auth-tokens delete 命令。

gcloud beta redis clusters token-auth-users auth-tokens delete AUTH_TOKEN \
--cluster=CLUSTER_ID \
--region=REGION \
--token-auth-user=USERNAME

进行以下替换:

  • AUTH_TOKEN:要从用户中删除的身份验证令牌的名称
  • CLUSTER_ID:您要通过删除令牌来阻止用户访问的集群的 ID
  • REGION:集群所在的区域
  • USERNAME:您要删除的令牌所对应的用户的用户名

使用基于令牌的基本身份验证连接到集群

您可以使用以下方法通过基于令牌的基本身份验证连接到集群:

  • 统一资源标识符 (URI) 字符串:此格式化字符串非常方便,因为所有必要的连接信息(例如用户的用户名和令牌,以及集群的 IP 地址和主机名)都包含在一个字符串中。
  • 标志:此方法更适合用于单个命令行工具、脚本或通过使用多个单独的实参将配置分解为单独的环境变量的环境。

以下部分将介绍每种连接方法。

使用 URI 字符串

如需使用 URI 字符串从 Compute Engine 虚拟机或受支持的环境进行连接,请使用以下命令:

redis-cli -u
redis://USERNAME:TOKEN@IP_ADDRESS:PORT

进行以下替换:

  • USERNAME:尝试连接到集群的用户的用户名
  • TOKEN:用户的身份验证令牌
  • IP_ADDRESS:集群的 IP 地址
  • PORT:为集群预留的端口号

使用标志

如需使用标志从 Compute Engine 虚拟机或受支持的环境进行连接,请使用以下命令:

redis-cli --user USERNAME -a TOKEN -h IP_ADDRESS -p PORT

进行以下替换:

  • USERNAME:尝试连接到集群的用户的用户名
  • TOKEN:用户的身份验证令牌
  • IP_ADDRESS:集群的 IP 地址
  • PORT:为集群预留的端口号

在不中断服务的情况下轮替用户的身份验证令牌

如需轮替用户的身份验证令牌,同时避免应用停机,请执行以下操作:

  1. 为用户创建额外的身份验证令牌:Memorystore for Redis Cluster 会生成第二个有效令牌。这两个令牌均有效。
  2. 更新您的应用:更新您的应用以使用新令牌。
  3. 删除用户的身份验证令牌:Memorystore for Redis Cluster 会移除第一个令牌。用户只能使用第二个令牌来验证对您应用的身份。

基于基本令牌的身份验证的访问日志

Memorystore for Redis Cluster 会针对与身份验证令牌和用户关联的操作生成管理员活动审核日志和数据访问审核日志。如需详细了解这些审核日志,请参阅使用审核日志监控访问权限