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

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

使用访问控制列表 (ACL) 验证用户

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

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

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

ACL 旨在支持引入Redis ACL在 Redis 6 中。在将 ACL 与 MemoryDB 集群一起使用时,有一些限制。

  • 不能在访问字符串中指定密码。你用设置密码CreateUser要么UpdateUser调用。

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

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

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

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

    MemoryDB 支持的其他只读命令包括ACL WHOAMIACL 用户, 和ACL 猫. MemoryDB 不支持任何其他基于写入的 ACL 命令。

下面将更详细地介绍如何将更详细地介绍如何将为 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,不包括用户和任何密码哈希值。

将 ACL 应用于 MemoryDB 的集群

要使用 MemoryDB ACL,请执行以下步骤:

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

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

  3. 将 ACL 分配给集群。

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

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

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

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

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

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

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

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

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

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

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

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

使用控制台和 CLI 管理用户

在控制台上创建用户

  1. 登录到Amazon Web Services Management Console然后在以下位置打开 MemoryDB and Redis 控制台https://console.aws.amazon.com/memorydb/.

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

  3. 选择创建用户

  4. 在存储库的创建用户页面中,输入名称.

    集群命名约束如下:

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

    • 必须以字母开头。

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

    • 不能以连字符结束。

  5. UDER密码,您最多可输入两个密码。

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

  7. 适用于标签,您可以有选择地应用标签来搜索和筛选用户或跟踪您的Amazon成本.

  8. 选择 Create(创建)。

使用 CLI 创建用户

  • 使用创建用户命令创建用户。

    对于 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 and Redis 控制台https://console.aws.amazon.com/memorydb/.

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

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

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

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

  6. 选择修改

使用 CLI 修改用户

  1. 使用更新用户命令修改用户。

  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 and Redis 控制台https://console.aws.amazon.com/memorydb/.

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

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

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

  5. UDER访问控制列表 (ACL)您可以查看用户属于的 ACL。

  6. UDER标签您可以查看与用户关联的任何标签。

使用描述用户命令来查看用户的详细信息。

aws memorydb describe-users \ --user-name my-user-name

在控制台上删除用户

  1. 登录到Amazon Web Services Management Console然后在以下位置打开 MemoryDB and Redis 控制台https://console.aws.amazon.com/memorydb/.

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

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

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

  5. 要取消,请选择 Cancel (取消)

使用 CLI 删除用户

  • 使用删除用户命令删除用户。

    用户帐户将被删除并从其所属的任何访问控制列表中移除。以下是示例。

    对于 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 and Redis 控制台https://console.aws.amazon.com/memorydb/.

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

  3. 选择创建 ACL.

  4. 在存储库的创建访问控制列表 (ACL)页面中,输入 ACL 名称。

    集群命名约束如下:

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

    • 必须以字母开头。

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

    • 不能以连字符结束。

  5. UDER选定的用户请执行下列操作之一:

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

    2. 通过选择添加用户Manage然后从管理用户对话框然后选择选择.

  6. 适用于标签,您可以有选择地应用标签来搜索和筛选 ACL 或跟踪Amazon成本.

  7. 选择 Create(创建)。

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

使用 CLI 创建新 ACL 并添加用户

  • 使用创建-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 and Redis 控制台https://console.aws.amazon.com/memorydb/.

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

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

  4. 在存储库的修改页面,下选定的用户请执行下列操作之一:

    1. 选择创建新用户创建用户以添加到 ACL 中。

    2. 选择或删除用户Manage然后从管理用户对话框然后选择选择.

  5. 在存储库的创建访问控制列表 (ACL)页面中,输入 ACL 名称。

    集群命名约束如下:

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

    • 必须以字母开头。

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

    • 不能以连字符结束。

  6. UDER选定的用户请执行下列操作之一:

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

    2. 通过选择添加用户Manage然后从管理用户对话框然后选择选择.

  7. 选择修改要保存您的更改或Cancel丢弃它们。

使用 CLI 通过添加新用户或移除当前成员来修改 ACL

  • 使用更新 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 and Redis 控制台https://console.aws.amazon.com/memorydb/.

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

  3. 选择下面的 ACLACL 名称或者使用搜索框来查找 ACL。

  4. UDER用户您可以查看与 ACL 关联的用户列表。

  5. UDER关联的群集你可以查看 ACL 所属的集群。

  6. UDER标签您可以查看与 ACL 关联的任何标签。

使用描述 ACL命令来查看 ACL 的详细信息。

aws memorydb describe-acls \ --acl-name test-group

使用控制台删除访问控制列表

  1. 登录到Amazon Web Services Management Console然后在以下位置打开 MemoryDB and Redis 控制台https://console.aws.amazon.com/memorydb/.

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

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

  4. 在存储库的Delete页面,输入delete在确认框中并选择Delete要么Cancel以避免删除 ACL。

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

使用 CLI 删除 ACL

  • 使用删除 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 并添加用户后,实施 ACL 的最后步骤是将 ACL 分配给集群。

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

要将 ACL 添加到群集中,请使用Amazon Web Services Management Console请参阅创建内存数据库集群.

将访问控制列表分配给群集使用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"