基于角色的访问控制 () RBAC - 亚马逊 ElastiCache

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

基于角色的访问控制 () RBAC

在 Valkey 7.2 及更高版本以及 Redis OSS 6.0 及更高版本中使用 Valkey 和 Redis 命令进行身份验证 OSS AUTH,您可以使用名为基于角色的访问控制 () 的功能,而不是按照中所述使用 Valkey 和 Redis OSS AUTH 命令对用户进行身份验证。RBACRBAC也是控制对无服务器缓存的访问的唯一方法。

与 Valkey 和 Redis 不同 OSSAUTH,所有经过身份验证的客户端在令牌经过身份验证后都具有完全的缓存访问权限,这RBAC使您可以通过用户组控制缓存访问权限。这些用户组旨在作为一种管理对缓存的访问权限的方式。

使用RBAC,您可以使用访问字符串创建用户并向他们分配特定权限,如下所述。您可以将用户分配到与特定角色(管理员、人力资源)对应的用户组,然后将这些用户组部署到一个或多个 ElastiCache 缓存中。通过这样做,你可以在使用相同的 Valkey 或 Redis OSS 缓存的客户端之间建立安全边界,并防止客户端访问彼此的数据。

注意

RBAC与 Valkey 集群一起使用时,您仍然需要为用户和用户组分配引擎 “redis”。

RBAC旨在支持 Redis OSS 6 ACL中的引入。当你RBAC使用你的 ElastiCache Valkey 或 Redis OSS 缓存时,会有一些限制:

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

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

  • 您不能使用已禁止和重命名的命令。如果您指定了已禁止的命令或重命名命令,则会引发异常。如果要对重命名的命令使用访问控制列表 (ACLs),请指定该命令的原始名称,换言之,在重命名命令之前的名称。

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

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

    Valkey 和 Redis 支持的其他只读命令OSS包括ACLWHOAMIACLUSERS、和。 ElastiCache ACLCAT ElastiCache 使用 Valkey 和 Redis OSS 不支持任何其他基于写入ACL的命令。

  • 以下限制适用:

    资源 允许的最大值
    每个用户组的用户数 100
    用户数 1000
    用户组数 100

下文将详细介绍RBAC与 ElastiCache (RedisOSS) 一起使用。

使用访问字符串指定权限

要指定对 ElastiCache (RedisOSS) 缓存的权限,请使用 AWS CLI 或 AWS Management Console创建访问字符串并将其分配给用户。

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

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

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

on ~* +@all

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

  • on – 用户是活动用户。

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

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

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

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

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

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

+command1— 用户对命令的访问权限仅限于 command1.

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

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

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

对于 Redis OSS 版本 6.2 及更高版本,还支持以下访问字符串语法:

  • &* – 具有对所有可用频道的访问权限。

对于 Redis 7.0 及以上OSS版本,还支持以下访问字符串语法:

  • | - 可用于屏蔽子命令(例如 “-config|set”)。

  • %R~<pattern> - 添加指定的读取密钥模式。此行为与常规密钥模式类似,但仅授予读取与给定模式匹配的密钥的权限。有关更多信息,请参阅密钥权限

  • %W~<pattern> - 添加指定的写入密钥模式。此行为与常规密钥模式类似,但仅授予写入与给定模式匹配的密钥的权限。有关更多信息,请参阅ACL密钥权限

  • %RW~<pattern> - ~<pattern> 的别名。

  • (<rule list>) - 创建一个新的选择器作为匹配规则的依据。选择器在获得用户权限后进行评估,并根据其定义顺序进行评估。如果命令与用户权限或任何选择器匹配,则允许使用。有关更多信息,请参阅ACL选择器

  • clearselectors - 删除附加到用户的所有选择器。

ElastiCache 使用 Valkey 或 Redis 申请RBAC缓存 OSS

要 ElastiCache 与 Valkey 或 Redis 一起使用 OSSRBAC,您需要执行以下步骤:

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

  2. 创建用户组并将用户添加到该组中。

  3. 将用户组分配给已启用了传输中加密的缓存。

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

使用控制台创建用户和用户组以及 CLI

用户的用户信息RBAC包括用户 ID、用户名以及可选的密码和访问字符串。访问字符串提供对密钥和命令的权限级别。用户 ID 对于用户是唯一的,用户名则是传递给引擎的内容。

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

ElastiCache 自动为默认用户配置用户 ID 和用户名"default",并将其添加到所有用户组中。您无法修改或删除该用户。此用户旨在与先前 Redis OSS 版本的默认行为兼容,并且具有允许其调用所有命令和访问所有密钥的访问字符串。

要向缓存添加适当的访问控制,请将此默认用户替换为未启用的或使用强密码的新用户。要更改默认用户,请创建一个新用户,其用户名设置为 default。然后,您可以用其替换原始默认用户。

以下过程演示了如何用另一个具有已修改访问字符串的 default 用户替换原始 default 用户。

修改控制台上的默认用户
  1. 登录 AWS Management Console 并打开 Amazon ElastiCache 控制台,网址为https://console.aws.amazon.com/elasticache/

  2. 在导航窗格中,选择用户组管理

  3. 对于用户组 ID,选择要修改的 ID。确保选择的是链接,而不是复选框。

  4. 选择 Modify(修改)。

  5. 修改窗口中,选择管理,对于默认用户,选择您想要作为默认用户的用户。

  6. 选择选择

  7. 选择 Modify(修改)。执行此操作时,原始默认用户与缓存之间的任何现有连接将被终止。

使用修改默认用户 AWS CLI
  1. 使用以下命令,创建用户名为 default 的新用户。

    对于 Linux、macOS 或 Unix:

    aws elasticache create-user \ --user-id "new-default-user" \ --user-name "default" \ --engine "REDIS" \ --passwords "a-str0ng-pa))word" \ --access-string "off +get ~keys*"

    对于 Windows:

    aws elasticache create-user ^ --user-id "new-default-user" ^ --user-name "default" ^ --engine "REDIS" ^ --passwords "a-str0ng-pa))word" ^ --access-string "off +get ~keys*"
  2. 创建用户组并添加先前创建的用户。

    对于 Linux、macOS 或 Unix:

    aws elasticache create-user-group \ --user-group-id "new-group-2" \ --engine "REDIS" \ --user-ids "new-default-user"

    对于 Windows:

    aws elasticache create-user-group ^ --user-group-id "new-group-2" ^ --engine "REDIS" ^ --user-ids "new-default-user"
  3. 用新 default 用户替换原始 default 用户。

    对于 Linux、macOS 或 Unix:

    aws elasticache modify-user-group \ --user-group-id test-group \ --user-ids-to-add "new-default-user" \ --user-ids-to-remove "default"

    对于 Windows:

    aws elasticache modify-user-group ^ --user-group-id test-group ^ --user-ids-to-add "new-default-user" ^ --user-ids-to-remove "default"

    调用此修改操作时,原始默认用户与缓存之间的任何现有连接将被终止。

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

特别是,在使用 f RBAC or ElastiCache (RedisOSS) 时,请注意以下用户密码限制:

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

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

使用控制台管理用户和 CLI

使用以下过程在控制台上管理用户。

在控制台上管理用户
  1. 登录 AWS Management Console 并打开 Amazon ElastiCache 控制台,网址为https://console.aws.amazon.com/elasticache/

  2. 在 Amazon ElastiCache 控制面板上,选择用户管理。以下选项可用:

    • 创建用户 – 创建用户时,输入用户 ID、用户名、身份验证模式和访问字符串。访问字符串设置允许用户使用的密钥和命令的权限级别。

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

    • 修改用户 – 允许您更新用户的身份验证设置或更改其访问字符串。

    • 删除用户 – 将账户从它所属的任何用户组中移除。

按以下过程使用 AWS CLI管理用户。

要修改用户,请使用 CLI
  • 使用 modify-user 命令更新用户密码或者更改用户的访问权限。

    修改用户后,将更新与该用户关联的用户组以及与该用户组关联的任何缓存。将会保持所有现有连接。示例如下。

    对于 Linux、macOS 或 Unix:

    aws elasticache modify-user \ --user-id user-id-1 \ --access-string "~objects:* ~items:* ~public:*" \ --no-password-required

    对于 Windows:

    aws elasticache modify-user ^ --user-id user-id-1 ^ --access-string "~objects:* ~items:* ~public:*" ^ --no-password-required
注意

建议您不要使用 nopass 选项。如果您按此建议操作,我们建议将用户的权限设置为只读,且仅能访问一组有限的密钥。

要删除用户,请使用 CLI
  • 使用 delete-user 命令删除用户。此账户将被删除并从其所属的任何用户组中移除。示例如下:

    对于 Linux、macOS 或 Unix:

    aws elasticache delete-user \ --user-id user-id-2

    对于 Windows:

    aws elasticache delete-user ^ --user-id user-id-2

要查看用户列表,请调用 describe-users 操作。

aws elasticache describe-users

使用控制台管理用户组和 CLI

您可以创建用户组来组织和控制用户对一个或多个缓存的访问权限,如下所示。

使用控制台通过以下过程管理用户组。

使用控制台管理用户组
  1. 登录 AWS Management Console 并打开 Amazon ElastiCache 控制台,网址为https://console.aws.amazon.com/elasticache/

  2. 在 Amazon ElastiCache 控制面板上,选择用户组管理

    以下操作可用于创建新用户组:

    • 创建 – 创建用户组时,您可以添加用户,然后将用户组分配给缓存。例如,您可以为在缓存上具有管理角色的用户创建一个 Admin 用户组。

      重要

      创建用户组时,需要包括默认用户。

    • Add Users(添加用户)– 向用户组添加用户。

    • Remove Users(移除用户)– 从用户组中移除用户。当用户从用户组中移除时,他们与缓存之间的任何现有连接都将终止。

    • Delete(删除)– 使用此操作删除用户组。请注意,将删除用户组本身,而不是属于该组的用户。

    对于现有用户组,您可执行以下操作:

    • Add User(添加用户)– 将现有用户添加到用户组。

    • Delete Users(删除用户)– 从用户组中移除现有用户。

      注意

      用户将从用户组中移除,但不会从系统中删除。

使用以下过程使用管理用户组CLI。

要创建新用户组并添加用户,请使用 CLI
  • 使用 create-user-group 命令,如下所示:

    对于 Linux、macOS 或 Unix:

    aws elasticache create-user-group \ --user-group-id "new-group-1" \ --engine "REDIS" \ --user-ids user-id-1, user-id-2

    对于 Windows:

    aws elasticache create-user-group ^ --user-group-id "new-group-1" ^ --engine "REDIS" ^ --user-ids user-id-1, user-id-2
要通过添加新用户或移除当前成员来修改用户组,请使用 CLI
  • 使用 modify-user-group 命令,如下所示:

    对于 Linux、macOS 或 Unix:

    aws elasticache modify-user-group --user-group-id new-group-1 \ --user-ids-to-add user-id-3 \ --user-ids-to-remove user-id-2

    对于 Windows:

    aws elasticache modify-user-group --user-group-id new-group-1 ^ --user-ids-to-add userid-3 ^ --user-ids-to-removere user-id-2
注意

此命令将结束属于从用户组中移除的用户的任何打开的连接。

要删除用户组,请使用 CLI
  • 使用 delete-user-group 命令,如下所示:将删除用户组本身,而不是属于该组的用户。

    对于 Linux、macOS 或 Unix:

    aws elasticache delete-user-group / --user-group-id

    对于 Windows:

    aws elasticache delete-user-group ^ --user-group-id

要查看用户组列表,可以调用该describe-user-groups操作。

aws elasticache describe-user-groups \ --user-group-id test-group

将用户组分配给无服务器缓存

创建用户组并添加用户后,实现的最后一步RBAC是将该用户组分配给无服务器缓存。

使用控制台将用户组分配给无服务器缓存

要使用向无服务器缓存中添加用户组 AWS Management Console,请执行以下操作:

使用将用户组分配给无服务器缓存 AWS CLI

以下 AWS CLI 操作使用带值my-user-group-iduser-group-id参数创建无服务器缓存。用已存在的子网组替换子网组 sng-test

关键参数
  • --engine— 必须是valkeyredis

  • --user-group-id – 此值提供用户组的 ID,该用户组由对缓存具有指定访问权限的用户组成。

对于 Linux、macOS 或 Unix:

aws elasticache create-serverless-cache \ --serverless-cache-name "new-serverless-cache" \ --description "new-serverless-cache" \ --engine "redis" \ --user-group-id "new-group-1"

对于 Windows:

aws elasticache create-serverless-cache ^ --serverless-cache-name "new-serverless-cache" ^ --description "new-serverless-cache" ^ --engine "redis" ^ --user-group-id "new-group-1"

以下 AWS CLI 操作使用带值的user-group-id参数修改无服务器缓存。my-user-group-id

对于 Linux、macOS 或 Unix:

aws elasticache modify-serverless-cache \ --serverless-cache-name serverless-cache-1 \ --user-group-id "new-group-2"

对于 Windows:

aws elasticache modify-serverless-cache ^ --serverless-cache-name serverless-cache-1 ^ --user-group-id "new-group-2"

请注意,对缓存所做的任何修改都将异步更新。您可通过查看事件来监控进度。有关更多信息,请参阅 查看 ElastiCache 事件

将用户组分配给复制组

创建用户组并添加用户后,实现的最后一步RBAC是将该用户组分配给复制组。

使用控制台将用户组分配给复制组

要使用向复制中添加用户组 AWS Management Console,请执行以下操作:

使用将用户组分配给复制组 AWS CLI

以下 AWS CLI 操作创建一个启用传输中加密 (TLS) 且user-group-ids参数值为的复制组my-user-group-id。用已存在的子网组替换子网组 sng-test

关键参数
  • --engine— 必须是valkeyredis

  • --engine-version – 必须是 6.0 或更高版本。

  • --transit-encryption-enabled – 必需,用于身份验证和关联用户组。

  • --user-group-ids – 此值提供用户组的 ID,该用户组由对缓存具有指定访问权限的用户组成。

  • --cache-subnet-group – 必需,用于关联用户组。

对于 Linux、macOS 或 Unix:

aws elasticache create-replication-group \ --replication-group-id "new-replication-group" \ --replication-group-description "new-replication-group" \ --engine "redis" \ --cache-node-type cache.m5.large \ --transit-encryption-enabled \ --user-group-ids "new-group-1" \ --cache-subnet-group "cache-subnet-group"

对于 Windows:

aws elasticache create-replication-group ^ --replication-group-id "new-replication-group" ^ --replication-group-description "new-replication-group" ^ --engine "redis" ^ --cache-node-type cache.m5.large ^ --transit-encryption-enabled ^ --user-group-ids "new-group-1" ^ --cache-subnet-group "cache-subnet-group"

以下 AWS CLI 操作修改了启用传输中加密 (TLS) 且user-group-ids参数值my-user-group-id为的复制组。

对于 Linux、macOS 或 Unix:

aws elasticache modify-replication-group \ --replication-group-id replication-group-1 \ --user-group-ids-to-remove "new-group-1" \ --user-group-ids-to-add "new-group-2"

对于 Windows:

aws elasticache modify-replication-group ^ --replication-group-id replication-group-1 ^ --user-group-ids-to-remove "new-group-1" ^ --user-group-ids-to-add "new-group-2"

记下响应中的 PendingChanges。对缓存所做的任何修改都将异步更新。您可通过查看事件来监控进度。有关更多信息,请参阅 查看 ElastiCache 事件

从迁移AUTH到 RBAC

如果您AUTH按中所述使用使用 Valkey 和 Redis 命令进行身份验证 OSS AUTH并希望迁移到使用RBAC,请按以下步骤操作。

使用以下步骤通过控制台从AUTH迁移到。RBAC

从 Valkey 或 Redis 迁移OSSAUTH到RBAC使用控制台
  1. 登录 AWS Management Console 并打开 ElastiCache 控制台,网址为 https://console.aws.amazon.com/elasticache/

  2. 从右上角的列表中,选择要修改的缓存所在的 AWS 区域。

  3. 在导航窗格中,选择在要修改的缓存上运行的引擎。

    此时会显示选定引擎的缓存列表。

  4. 在缓存列表中,对于要修改的缓存,选择其名称。

  5. 对于 Actions(操作),选择 Modify(修改)。

    此时将显示修改窗口。

  6. 对于访问控制,选择用户组访问控制列表

  7. 对于用户组访问控制列表,选择一个用户组。

  8. 选择预览更改,然后在下一个屏幕上选择修改

使用以下过程从 Valkey 或 Redis 迁移OSSAUTH到RBAC使用。CLI

要从迁移AUTH到,请RBAC使用 CLI
  • 使用 modify-replication-group 命令,如下所示:

    对于 Linux、macOS 或 Unix:

    aws elasticache modify-replication-group --replication-group-id test \ --auth-token-update-strategy DELETE \ --user-group-ids-to-add user-group-1

    对于 Windows:

    aws elasticache modify-replication-group --replication-group-id test ^ --auth-token-update-strategy DELETE ^ --user-group-ids-to-add user-group-1

从迁移RBAC到 AUTH

如果您正在使用RBAC并想要迁移到 Redis OSSAUTH,请参阅从迁移RBAC到 AUTH

注意

如果您需要禁用 ElastiCache 缓存的访问控制,则需要通过 AWS CLI。有关更多信息,请参阅 在 ElastiCache Valkey 或 Redis OSS 缓存上禁用访问控制