使用访问控制列表对用户进行身份验证 () ACLs - Amazon MemoryDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用访问控制列表对用户进行身份验证 () ACLs

您可以使用访问控制列表 (ACLs) 对用户进行身份验证。

ACLs使您能够通过对用户进行分组来控制集群访问权限。这些访问控制列表旨在作为一种集群访问组织方式。

使用ACLs,您可以创建用户并使用访问字符串为其分配特定权限,如下一节所述。您可以将用户分配到与特定角色(管理员、人力资源)一致的访问控制列表,然后将这些访问控制列表部署到一个或多个 MemoryDB 集群。这样,您可以在使用相同 MemoryDB 集群的客户端之间建立安全边界,并阻止客户端彼此访问数据。

ACLs旨在支持 Redis OSS 6 ACL中的引入。ACLs与 MemoryDB 集群一起使用时,存在一些限制:

  • 不能在访问字符串中指定密码。您可以通过CreateUserUpdateUser呼叫来设置密码。

  • 对于用户权利,您可以将 onoff 作为访问字符串的一部分进行传递。如果两者在访问字符串中都未指定,则将为用户分配 off 并且用户没有访问集群的权限。

  • 您不能使用已禁止命令。如果您指定了已禁止命令,则会引发异常。有关此类命令列表,请参阅 受限命令

  • 您不能将 reset 命令作为访问字符串的一部分。您可以使用API参数指定密码,而 MemoryDB 则管理密码。因此,您不能使用 reset,因为此命令会移除用户的所有密码。

  • Redis OSS 6 引入了该ACLLIST命令。此命令返回用户列表以及应用于每个用户的ACL规则。MemoryDB 支持该ACL LIST命令,但不像 Redis 那样支持密码哈希。OSS使用 MemoryDB,您可以使用该DescribeUsers操作来获取类似的信息,包括访问字符串中包含的规则。但是,DescribeUsers无法检索用户密码。

    MemoryDB 支持的其他只读命令包括ACLWHOAMIACLUSERS、和。ACLCATMemoryDB 不支持任何其他基于写入ACL的命令。

下文将详细介绍如何ACLs与 MemoryDB 配合使用。

使用访问字符串指定权限

要指定对 MemoryDB 集群的权限,您可以使用或创建访问字符串并将其分配给用户。 Amazon CLI Amazon Web Services Management Console

根据定义,访问字符串是指应用于用户的、以空格分隔的规则列表。它们定义了用户可以执行的命令以及用户可以对其进行操作的密钥。要执行命令,用户必须有权访问正在执行的命令以及命令访问的所有密钥。规则从左到右累积应用,如果提供的字符串中存在冗余,则可以使用更简单的字符串代替提供的字符串。

有关ACL规则语法的信息,请参见ACL

在以下示例中,访问字符串表示具有所有可用密钥和命令访问权限的活动用户。

on ~* &* +@all

访问字符串语法分解如下:

  • on – 用户是活动用户。

  • ~* – 具有对所有可用密钥的访问权限。

  • &* – 具有对所有发布/订阅频道的访问权限。

  • +@all – 具有对所有可用命令的访问权限。

上述设置的限制性最小。您可以修改这些设置以使其更加安全。

在以下示例中,访问字符串表示一个用户,其访问权限限于对以“app::”键空间开头的键进行读取访问

on ~app::* -@all +@read

您可以通过列出用户有权访问的命令来进一步优化这些权限:

+command1 – 用户对命令的访问被限制为 command1

+@category – 用户的访问被限制为某个类别的命令。

有关向用户分配访问字符串的信息,请参阅 使用控制台创建用户和访问控制列表以及 CLI

如果要将现有工作负载迁移到 MemoryDB,则可以通过调用 ACL LIST(不包括用户和任何哈希密码)来检索访问字符串。

向量搜索功能

对于向量搜索,所有搜索命令都属于该 @search 类别,而现有类别 @read@write@fast@slow 则会更新为包括搜索命令。如果用户无权访问某个类别,那么该用户也无权访问该类别中的任何命令。例如,如果用户无权访问 @search,那么该用户也无法执行任何与搜索相关的命令。

下表指示搜索命令到相应类别的映射。

VSS 命令 @read @write @fast @slow
FT.CREATE Y Y
FT.DROPINDEX Y Y
FT.LIST Y Y
FT.INFO Y Y
FT.SEARCH Y Y
FT.AGGREGATE Y Y
FT.PROFILE Y Y
FT.ALIASADD Y Y
FT.ALIASDEL Y Y
FT.ALIASUPDATE Y Y
FT._ALIASLIST Y Y
FT.EXPLAIN Y Y
FT.EXPLAINCLI Y Y
FT.CONFIG Y Y

ACLs向集群申请 MemoryDB

要使用 MemoryDBACLs,您需要执行以下步骤:

  1. 创建一个或多个用户。

  2. 创建ACL并向列表中添加用户。

  3. 将分配ACL给群集。

下方详细地说明了这些步骤。

使用控制台创建用户和访问控制列表以及 CLI

用户的用户信息是ACLs用户名,也可以是密码和访问字符串(可选)。访问字符串提供对密钥和命令的权限级别。用户名对于用户是唯一的,是传递给引擎的内容。

确保您提供的用户权限符合预期目的ACL。例如,如果您创建了一个ACL被调用的用户Administrators,则您添加到该组的任何用户都应将其访问字符串设置为对键和命令的完全访问权限。对于中的用户 e-commerceACL,您可以将其访问字符串设置为只读访问权限。

MemoryDB 为每个账户和用户名 "default" 自动配置一个默认用户。除非显式添加到,否则它不会与任何集群关联。ACL您无法修改或删除该用户。此用户旨在与先前 Redis OSS 版本的默认行为兼容,并且具有允许其调用所有命令和访问所有密钥的访问字符串。

ACL将为每个包含默认用户的账户创建一个不可变的 “开放访问”。这是ACL唯一可以成为成员的默认用户。创建集群时,必须选择一个ACL才能与该集群关联。虽然您可以选择对默认用户应用 “开放访问权限”ACL,但我们强烈建议ACL使用权限仅限于其业务需求的用户创建一个。

未TLS启用的集群必须使用 “开放访问” ACL 来提供开放式身份验证。

ACLs可以在没有用户的情况下创建。空集群ACL将无法访问集群,只能与TLS已启用集群相关联。

创建用户时,最多可以设置两个密码。修改密码时,将保持与集群之间的所有现有连接。

特别是,在用于 MemoryDB 时,请注意以下用户密码限制:ACLs

  • 密码必须是 16-128 个可打印字符。

  • 不允许使用以下非字母数字字符:, "" / @

使用控制台管理用户和 CLI

在控制台上创建用户
  1. 登录 Amazon Web Services Management Console 并打开 MemoryDB 控制台,网址为。https://console.aws.amazon.com/memorydb/

  2. 在左侧导航窗格中,选择用户

  3. 选择创建用户

  4. 创建用户页面上,输入名称

    集群命名约束如下:

    • 必须包含 1 – 40 个字母数字字符或连字符。

    • 必须以字母开头。

    • 不能包含两个连续连字符。

    • 不能以连字符结束。

  5. 密码下,最多可以输入两个密码。

  6. 访问字符串下,输入访问字符串。访问字符串设置允许用户使用的密钥和命令的权限级别。

  7. 对于标签,您可以选择应用标签来搜索和筛选用户或跟踪您的 Amazon 费用。

  8. 选择创建

要创建用户,请使用 CLI
  • 使用 create-user 命令可创建新的用户。

    对于 Linux、macOS 或 Unix:

    aws memorydb create-user \ --user-name user-name-1 \ --access-string "~objects:* ~items:* ~public:*" \ --authentication-mode \ Passwords="abc",Type=password

    对于 Windows:

    aws memorydb create-user ^ --user-name user-name-1 ^ --access-string "~objects:* ~items:* ~public:*" ^ --authentication-mode \ Passwords="abc",Type=password
在控制台上修改用户
  1. 登录 Amazon Web Services Management Console 并打开 MemoryDB 控制台,网址为。https://console.aws.amazon.com/memorydb/

  2. 在左侧导航窗格中,选择用户

  3. 选择要修改的用户旁边的单选按钮,然后选择操作 -> 修改

  4. 如果要修改密码,请选择修改密码单选按钮。请注意,如设有两个密码,则修改其中之一时必须同时输入两个密码。

  5. 如果要更新访问字符串,则请输入新的访问字符串。

  6. 选择 Modify(修改)。

要修改用户,请使用 CLI
  1. 使用 update-user 命令修改用户。

  2. 修改用户后,与该用户关联的访问控制列表以及与该用户关联的所有集群都会更新ACL。将会保持所有现有连接。示例如下。

    对于 Linux、macOS 或 Unix:

    aws memorydb update-user \ --user-name user-name-1 \ --access-string "~objects:* ~items:* ~public:*"

    对于 Windows:

    aws memorydb update-user ^ --user-name user-name-1 ^ --access-string "~objects:* ~items:* ~public:*"
在控制台查看用户详细信息
  1. 登录 Amazon Web Services Management Console 并打开 MemoryDB 控制台,网址为。https://console.aws.amazon.com/memorydb/

  2. 在左侧导航窗格中,选择用户

  3. 用户名下选择用户或使用搜索框查找用户。

  4. “用户设置” 下,您可以查看用户的访问字符串、密码计数、状态和 Amazon 资源名称 (ARN)。

  5. 访问控制列表 (ACL) 下,您可以查看ACL该用户所属的用户。

  6. 标签下,查看与用户关联的任何标签。

使用 describe-users 命令查看用户的详细信息。

aws memorydb describe-users \ --user-name my-user-name
在控制台上删除用户
  1. 登录 Amazon Web Services Management Console 并打开 MemoryDB 控制台,网址为。https://console.aws.amazon.com/memorydb/

  2. 在左侧导航窗格中,选择用户

  3. 选择要修改的用户旁边的单选按钮,然后选择操作 -> 删除

  4. 要进行确认,请在确认文本框中输入 delete,然后选择确认

  5. 要取消,请选择取消

要删除用户,请使用 CLI
  • 使用 delete-user 命令删除用户。

    此账户将被删除并从其所属的任何访问控制列表中移除。示例如下:

    对于 Linux、macOS 或 Unix:

    aws memorydb delete-user \ --user-name user-name-2

    对于 Windows:

    aws memorydb delete-user ^ --user-name user-name-2

使用控制台管理访问控制列表和 CLI

您可以创建访问控制列表来组织和控制用户对一个或多个集群的访问,如下所示。

使用以下步骤通过控制台管理访问控制列表。

使用控制台创建访问控制列表
  1. 登录 Amazon Web Services Management Console 并打开 MemoryDB 控制台,网址为。https://console.aws.amazon.com/memorydb/

  2. 在左侧导航窗格中,选择访问控制列表 (ACL)

  3. 选择创建ACL

  4. 创建访问控制列表 (ACL) 页面上,输入ACL名称。

    集群命名约束如下:

    • 必须包含 1 – 40 个字母数字字符或连字符。

    • 必须以字母开头。

    • 不能包含两个连续连字符。

    • 不能以连字符结束。

  5. 选定用户下,执行以下操作之一:

    1. 通过选择创建用户创建新用户

    2. 添加用户,方法是选择管理,再从管理用户对话框中选择用户,然后选择选择

  6. 对于标签,您可以选择应用标签来搜索和筛选您的费用ACLs或跟踪您的 Amazon 费用。

  7. 选择创建

使用以下过程使用创建访问控制列表CLI。

要创建新用户ACL并添加用户,请使用 CLI
  • 使用 create-acl 命令创建。ACL

    对于 Linux、macOS 或 Unix:

    aws memorydb create-acl \ --acl-name "new-acl-1" \ --user-names "user-name-1" "user-name-2"

    对于 Windows:

    aws memorydb create-acl ^ --acl-name "new-acl-1" ^ --user-names "user-name-1" "user-name-2"
使用控制台修改访问控制列表
  1. 登录 Amazon Web Services Management Console 并打开 MemoryDB 控制台,网址为。https://console.aws.amazon.com/memorydb/

  2. 在左侧导航窗格中,选择访问控制列表 (ACL)

  3. 选择ACL要修改的,然后选择修改

  4. 修改页面的所选用户下,执行下列操作之一:

    1. 通过选择要添加的创建用户来创建新用户ACL。

    2. 添加或移除用户,方法是选择管理,再从管理用户对话框中选择或取消选中用户,然后选择选择

  5. 创建访问控制列表 (ACL) 页面上,输入ACL名称。

    集群命名约束如下:

    • 必须包含 1 – 40 个字母数字字符或连字符。

    • 必须以字母开头。

    • 不能包含两个连续连字符。

    • 不能以连字符结束。

  6. 选定用户下,执行以下操作之一:

    1. 通过选择创建用户创建新用户

    2. 添加用户,方法是选择管理,再从管理用户对话框中选择用户,然后选择选择

  7. 选择修改保存更改,或选择取消放弃更改。

要ACL通过添加新用户或移除当前成员来修改,请使用 CLI
  • 使用 update-acl 命令来修改。ACL

    对于 Linux、macOS 或 Unix:

    aws memorydb update-acl --acl-name new-acl-1 \ --user-names-to-add user-name-3 \ --user-names-to-remove user-name-2

    对于 Windows:

    aws memorydb update-acl --acl-name new-acl-1 ^ --user-names-to-add user-name-3 ^ --user-names-to-remove user-name-2
注意

此命令将结束属于已从中移除的ACL用户的所有已打开连接。

在控制台上查看ACL详细信息
  1. 登录 Amazon Web Services Management Console 并打开 MemoryDB 控制台,网址为。https://console.aws.amazon.com/memorydb/

  2. 在左侧导航窗格中,选择访问控制列表 (ACL)

  3. 选择ACL下属ACL名称或使用搜索框查找ACL.

  4. 在 “用户” 下,您可以查看与关联的用户列表ACL。

  5. 在 “关联集群” 下,您可以查看其所ACL属的集群。

  6. 在 “标签” 下,您可以查看与关联的任何标签ACL。

使用 desc ribe-acls 命令查看的详细信息。ACL

aws memorydb describe-acls \ --acl-name test-group
使用控制台删除访问控制列表
  1. 登录 Amazon Web Services Management Console 并打开 MemoryDB 控制台,网址为。https://console.aws.amazon.com/memorydb/

  2. 在左侧导航窗格中,选择访问控制列表 (ACL)

  3. 选择ACL要修改的,然后选择 “删除

  4. 在 “删除” 页面上,delete在确认框中输入并选择 “删除” 或 “取消” 以避免删除ACL。

删除的是本ACL身,而不是属于该组的用户。

要删除ACL,请使用 CLI
  • 使用 d elete-acl 命令删除。ACL

    对于 Linux、macOS 或 Unix:

    aws memorydb delete-acl / --acl-name

    对于 Windows:

    aws memorydb delete-acl ^ --acl-name

    上述示例将返回以下响应。

    aws memorydb delete-acl --acl-name "new-acl-1" { "ACLName": "new-acl-1", "Status": "deleting", "EngineVersion": "6.2", "UserNames": [ "user-name-1", "user-name-3" ], "clusters": [], "ARN":"arn:aws:memorydb:us-east-1:493071037918:acl/new-acl-1" }

将访问控制列表分配到集群

创建ACL并添加用户后,实现的最后一步ACLs是将分配ACL给集群。

使用控制台将访问控制列表分配到集群

要使用ACL向集群添加的 Amazon Web Services Management Console,请参阅创建 MemoryDB 集群

为群集分配访问控制列表使用 Amazon CLI

以下 Amazon CLI 操作创建一个启用传输中加密 (TLS) 且acl-name参数值为的集群my-acl-name。用已存在的子网组替换子网组 subnet-group

关键参数
  • --engine-version – 必须是 6.2。

  • --tls-enabled— 用于身份验证和关联。ACL

  • --acl-name – 此值提供由具有集群指定访问权限的用户组成的访问控制列表。

对于 Linux、macOS 或 Unix:

aws memorydb create-cluster \ --cluster-name "new-cluster" \ --description "new-cluster" \ --engine-version "6.2" \ --node-type db.r6g.large \ --tls-enabled \ --acl-name "new-acl-1" \ --subnet-group-name "subnet-group"

对于 Windows:

aws memorydb create-cluster ^ --cluster-name "new-cluster" ^ --cluster-description "new-cluster" ^ --engine-version "6.2" ^ --node-type db.r6g.large ^ --tls-enabled ^ --acl-name "new-acl-1" ^ --subnet-group-name "subnet-group"

以下 Amazon CLI 操作修改了启用传输中加密 (TLS) 且acl-name参数值new-acl-2为的集群。

对于 Linux、macOS 或 Unix:

aws memorydb update-cluster \ --cluster-name cluster-1 \ --acl-name "new-acl-2"

对于 Windows:

aws memorydb update-cluster ^ --cluster-name cluster-1 ^ --acl-name "new-acl-2"