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

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

基于令牌的基本身份验证具有最低的资源要求和较低的资源开销。此外,如果 Memorystore for Redis 或本地应用上的当前工作负载已使用基于令牌的基本身份验证,则此功能有助于您顺利迁移到 Memorystore for Valkey。

优势

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

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

身份验证模式

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

  • 简单身份验证:一种简单的方法,用户发送身份验证令牌,以 default 用户身份进行身份验证
  • 多用户身份验证:管理多个用户,以对实例的访问权限进行身份验证

最佳做法

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

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

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

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

准备工作

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

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

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

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

AUTH TOKEN

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

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

AUTH USERNAME TOKEN

对于此命令,USERNAME 和 TOKEN 是用户的用户名和身份验证令牌。

如需详细了解 AUTH 命令,请参阅 Valkey 文档中的 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 Valkey gcloud CLI 命令,您需要至少使用 gcloud CLI 版本 489.0.0。

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

授予角色

如需配置基于令牌的基本身份验证或查看实例的身份验证令牌,您需要在 Google Cloud 项目中拥有 Memorystore Admin (roles/memorystore.admin) IAM 角色。如需详细了解如何授予此角色,请参阅访问权限控制。

管理实例的基于令牌的基本身份验证

Memorystore for Valkey 支持以下操作,以管理实例的基本令牌身份验证:

创建使用基于令牌的基本身份验证的实例

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

您可以使用 Google Cloud 控制台或 gcloud CLI 创建实例。

控制台

如需创建实例并为其启用基于令牌的基本身份验证,请参阅创建实例。

gcloud

如需创建实例并为其启用基于令牌的基本身份验证,请使用 gcloud memorystore instances create 命令。

gcloud memorystore instances create INSTANCE_ID \
--location=REGION \
--authorization-mode=token-auth

进行以下替换:

  • INSTANCE_ID:您要创建以使用基本基于令牌的身份验证的实例的 ID
  • REGION:您希望实例所在的区域

为实例启用基于令牌的基本身份验证

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

default 用户只需使用自己的令牌即可通过身份验证,登录到实例。 所有其他用户均使用标准用户名和令牌进行身份验证。如需了解详情,请参阅验证客户端是否支持基于令牌的基本身份验证。

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

您可以使用 Google Cloud 控制台或 gcloud CLI 为实例启用基于令牌的基本身份验证。

控制台

  1. 在 Google Cloud 控制台中,前往 Memorystore for Valkey 页面。

    Memorystore for Valkey

  2. 点击要为其启用基于令牌的基本身份验证的实例。

  3. 在实例概览页面上,滚动到安全卡片。

  4. 点击身份验证模式字段旁边的修改图标 ()。

    如果该字段旁边显示 IAM Auth或Token Auth,则表示您已为该实例启用 IAM 身份验证或基于令牌的基本身份验证。

  5. 在身份验证模式对话框中,选择令牌身份验证选项,然后点击更新实例。

gcloud

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

gcloud memorystore instances update INSTANCE_ID \
--location=REGION \
--authorization-mode=token-auth

进行以下替换:

  • INSTANCE_ID:您要为其启用基于令牌的基本身份验证的实例的 ID
  • REGION:实例所在的区域

为实例创建基于令牌的基本身份验证用户

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

您可以使用 Google Cloud 控制台或 gcloud CLI 创建基于令牌的基本身份验证用户。

控制台

  1. 在 Google Cloud 控制台中,前往 Memorystore for Valkey 页面。

    Memorystore for Valkey

  2. 点击要为其创建基于令牌的基本身份验证用户的实例。

  3. 在抽屉式导航栏中,点击用户菜单项。

    如果抽屉式导航栏中未显示此菜单项,则表示您尚未创建使用基本身份验证的实例或为实例启用基于基本令牌的身份验证。

  4. 在用户页面上,点击添加用户。

  5. 在添加用户对话框中,输入用户的 ID,然后点击添加。

gcloud

如需创建用户,请使用 gcloud memorystore instances create-token-auth-user 命令。

gcloud memorystore instances create-token-auth-user INSTANCE_ID \
--location=REGION \
--token-auth-user=USERNAME

进行以下替换:

  • INSTANCE_ID:您要为其创建基于令牌的基本身份验证用户的实例的 ID
  • REGION:实例所在的区域
  • USERNAME:用户的用户名

列出实例的基于令牌的基本身份验证用户

您可以使用 Google Cloud 控制台或 gcloud CLI 检索实例的基本基于令牌的身份验证用户列表。

控制台

  1. 在 Google Cloud 控制台中,前往 Memorystore for Valkey 页面。

    Memorystore for Valkey

  2. 点击要检索其基于令牌的基本身份验证用户列表的实例。

  3. 在抽屉式导航栏中,点击用户菜单项。在用户页面上,系统会显示基于令牌的基本身份验证用户列表。

    如果导航抽屉式导航栏中未显示用户菜单项,则表示您尚未创建具有基本身份验证的实例,或未为实例启用基于令牌的基本身份验证。

gcloud

如需列出用户,请使用 gcloud memorystore instances token-auth-users list 命令。

gcloud memorystore instances token-auth-users list \
--instance=INSTANCE_ID \
--location=REGION

进行以下替换:

  • INSTANCE_ID:您要检索其基于令牌的基本身份验证用户列表的实例的 ID
  • REGION:实例所在的区域

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

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

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

gcloud memorystore instances token-auth-users describe USERNAME \
--instance=INSTANCE_ID \
--location=REGION

进行以下替换:

  • USERNAME:您要查看其相关信息的基于令牌的基本身份验证用户的用户名
  • INSTANCE_ID:用户可以向其进行身份验证的实例的 ID
  • REGION:实例所在的区域

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

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

您可以使用 Google Cloud 控制台或 gcloud CLI 从实例中删除基于令牌的基本身份验证用户。

控制台

  1. 在 Google Cloud 控制台中,前往 Memorystore for Valkey 页面。

    Memorystore for Valkey

  2. 点击要从中删除基于令牌的基本身份验证用户的实例。

  3. 在抽屉式导航栏中,点击用户菜单项。

    如果该菜单项未显示在抽屉式导航栏中,则表示您尚未创建具有基本身份验证的实例或为该实例启用基于基本令牌的身份验证。

  4. 在用户页面上,点击要删除的用户 ID 旁边的操作 ()。

  5. 在随即显示的菜单中,选择移除用户。

  6. 在删除用户?对话框中,输入用户的 ID,然后点击删除。Memorystore for Valkey 会删除用户以及与该用户关联的所有身份验证令牌。

  7. 可选:对于您要删除的用户,Memorystore for Valkey 不会终止现有连接。如需结束这些连接,请在实例中的所有节点上运行以下命令:

    CLIENT KILL USER USERNAME
    

gcloud

如需删除用户,请使用 gcloud memorystore instances token-auth-users delete 命令。

gcloud memorystore instances token-auth-users delete USERNAME \
--instance=INSTANCE_ID \
--location=REGION

进行以下替换:

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

对于您要删除的用户,Memorystore for Valkey 还会删除与该用户关联的所有身份验证令牌。此外,Memorystore for Valkey 不会结束现有连接。如需结束这些连接,请在实例中的所有节点上运行以下命令:

CLIENT KILL USER USERNAME

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

Memorystore for Valkey 支持以下操作,用于管理用户的基本基于令牌的身份验证:

为用户创建身份验证令牌

当您为实例创建基于令牌的基本身份验证用户时,Memorystore for Valkey 会自动为该用户创建身份验证令牌。不过,您可以为用户创建额外的身份验证令牌。这样一来,您就可以轮换用户的现有令牌,而不会导致应用停机。

您可以使用 Google Cloud 控制台或 gcloud CLI 为用户创建身份验证令牌。

控制台

  1. 在 Google Cloud 控制台中,前往 Memorystore for Valkey 页面。

    Memorystore for Valkey

  2. 点击您要为其创建身份验证令牌的用户所在的实例。

  3. 在抽屉式导航栏中,点击用户菜单项。

    如果该菜单项未显示在抽屉式导航栏中,则表示您尚未创建具有基本身份验证的实例或为该实例启用基于基本令牌的身份验证。

  4. 在用户页面上,在要为其创建身份验证令牌的用户 ID 旁边,点击操作 ()。

  5. 在随即显示的菜单中,选择添加身份验证令牌。

  6. 在添加身份验证令牌对话框中,点击添加。

    如果用户已有两个身份验证令牌,则您必须先删除现有令牌,然后才能为该用户创建另一个令牌。

gcloud

如需创建令牌,请使用 gcloud memorystore instances token-auth-users create-auth-token 命令。

gcloud memorystore instances token-auth-users create-auth-token USERNAME \
--instance=INSTANCE_ID \
--location=REGION

进行以下替换:

  • USERNAME:您要为其创建身份验证令牌的用户的用户名
  • INSTANCE_ID:用户可以使用令牌访问的实例的 ID
  • REGION:实例所在的区域

如果用户已拥有两个身份验证令牌,则必须先删除现有令牌,然后才能为该用户创建另一个令牌。

列出用户的身份验证令牌

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

如需列出令牌,请使用 gcloud memorystore instances token-auth-users auth-tokens list 命令。

gcloud memorystore instances token-auth-users auth-tokens list \
--token-auth-user=USERNAME \
--instance=INSTANCE_ID \
--location=REGION

进行以下替换:

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

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

您可以使用 Google Cloud 控制台或 gcloud CLI 查看用户的身份验证令牌的相关信息。

控制台

  1. 在 Google Cloud 控制台中,前往 Memorystore for Valkey 页面。

    Memorystore for Valkey

  2. 点击包含您要查看其相关信息的用户身份验证令牌的实例。

  3. 在抽屉式导航栏中,点击用户菜单项。

    如果抽屉式导航栏中未显示该菜单项,则表示您尚未创建具有基本身份验证的实例,或尚未为该实例启用基于令牌的基本身份验证。

  4. 在用户页面上,点击用户 ID 旁边的操作 ()。

  5. 在随即显示的菜单中,选择查看身份验证令牌。在Auth 令牌对话框中,系统会显示以下信息:

    • 用户的 ID。
    • 用户拥有的身份验证令牌数量(一个或两个)。
    • 每个身份验证令牌的版本,以及 Memorystore for Valkey 创建每个版本时的日期和时间。每次您为用户创建身份验证令牌时,Memorystore for Valkey 都会创建该令牌的增量版本。
    • 身份验证令牌。
  6. 可选:如需获取用户的身份验证令牌,以便使用该令牌连接到实例,请点击令牌旁边的复制 (),然后将令牌粘贴到文本编辑器中。

  7. 点击完成。

gcloud

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

gcloud memorystore instances token-auth-users auth-tokens describe AUTH_TOKEN \
--instance=INSTANCE_ID \
--location=REGION \
--token-auth-user=USERNAME

进行以下替换:

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

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

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

您可以使用 Google Cloud 控制台或 gcloud CLI 从用户中删除身份验证令牌。

控制台

  1. 在 Google Cloud 控制台中,前往 Memorystore for Valkey 页面。

    Memorystore for Valkey

  2. 点击包含要删除其身份验证令牌的用户的实例。

  3. 在抽屉式导航栏中,点击用户菜单项。

    如果抽屉式导航栏中未显示该菜单项,则表示您尚未创建具有基本身份验证的实例,或尚未为实例启用基于令牌的基本身份验证。

  4. 在用户页面上,找到要删除身份验证令牌的用户 ID,然后点击该 ID 旁边的操作 ()。

  5. 在随即显示的菜单中,选择删除身份验证令牌。

  6. 在要删除身份验证令牌吗?对话框中,执行以下操作:

    1. 在Auth 令牌菜单中,选择要删除的身份验证令牌。
    2. 在Auth token ID 字段中,输入令牌的版本号(例如 version-1)。
    3. 点击删除。

gcloud

如需删除令牌,请使用 gcloud memorystore instances token-auth-users auth-tokens delete 命令。

gcloud memorystore instances token-auth-users auth-tokens delete AUTH_TOKEN \
--instance=INSTANCE_ID \
--location=REGION \
--token-auth-user=USERNAME

进行以下替换:

  • AUTH_TOKEN:要从用户中删除的身份验证令牌的名称
  • INSTANCE_ID:您要通过删除令牌来阻止用户访问的实例的 ID
  • REGION:实例所在的区域
  • USERNAME:拥有您要删除的令牌的用户的用户名

使用基于令牌的基本身份验证连接到实例

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

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

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

使用 URI 字符串

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

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

进行以下替换:

  • USERNAME:尝试连接到实例的用户的用户名。
  • TOKEN:用户的身份验证令牌。

    如果您提供的令牌不正确或无效,则无法连接到实例。Memorystore for Valkey 会在数据访问审核日志中为此操作创建条目。您可以查看日志,以检测安全威胁或排查因令牌过期或格式不正确而导致的连接问题。如需详细了解如何查看数据访问审核日志,请参阅查看日志。

  • IP_ADDRESS:实例的 IP 地址。

  • PORT:为实例预留的端口号。

如果您在实例上启用传输中加密,则必须使用安全协议 (rediss://) 并附加 TLS 标志。例如:

valkey-cli -u
rediss://USERNAME:TOKEN@IP_ADDRESS:PORT --tls --cacert /tmp/server_ca.pem

使用标志

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

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

进行以下替换:

  • USERNAME:尝试连接到实例的用户的用户名。
  • TOKEN:用户的身份验证令牌。

    如果您提供的令牌不正确或无效,则无法连接到实例。Memorystore for Valkey 会在数据访问审核日志中为此操作创建条目。您可以查看日志,以检测安全威胁或排查因令牌过期或格式不正确而导致的连接问题。如需详细了解如何查看数据访问审核日志,请参阅查看日志。

  • IP_ADDRESS:实例的 IP 地址。

  • PORT:为实例预留的端口号。

如果您在实例上启用传输加密,则必须附加 TLS 标志。例如:

valkey-cli --user USERNAME -a TOKEN -h IP_ADDRESS -p PORT --tls --cacert /tmp/server_ca.pem

在不停机的情况下轮替用户的身份验证令牌

如需轮替用户的身份验证令牌而不导致应用停机,请执行以下操作:

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

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

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