利用基于角色的访问控制 (RBAC) 对用户进行身份验证 - Amazon ElastiCache for Redis
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

利用基于角色的访问控制 (RBAC) 对用户进行身份验证

而不是使用 Redis AUTH 命令对用户进行身份验证,如使用 Redis AUTH 命令对用户进行身份验证, 在Amazon ElastiCache for Redis6.x,您可以使用名为基于角色的访问控制 (RBAC) 的功能。

Redis AUTH(如果对其令牌进行身份验证,则所有经过身份验证的客户端都具有完全复制组访问权限)不同,RBAC 使您能够通过用户组控制群集访问权限。这些用户组被设计为组织对复制组的访问权限的一种方法。

使用 RBAC,您可以使用访问字符串创建用户并为其分配特定权限,如下所述。将用户分配给与特定角色(管理员、人力资源)对齐的用户组,然后将这些角色部署到一个或多个ElastiCache for Redis复制组。通过执行此操作,您可以在使用相同 Redis 复制组或组的客户端之间建立安全边界,并阻止客户端彼此访问数据。

RBAC 旨在支持引入Redis ACLRedis 6。当您将 RBAC 与您的ElastiCache for Redis集群中存在一些限制:

  • 不能在访问字符串中指定密码。您可以使用CreateUser或者ModifyUser调用。

  • 对于用户权限,您将onoff作为访问字符串的一部分。如果访问字符串中均未指定,则为用户分配off并且没有对复制组的访问权限。

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

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

  • Redis 6 引入了ACL 列表命令。此命令返回用户列表以及应用于每个用户的 ACL 规则。ElastiCache for Redis支持ACL LIST命令,但不像 Redis 那样支持密码哈希。与ElastiCache for Redis,您可以使用描述用户操作来获取类似的信息,包括访问字符串中包含的规则。然而,描述用户不会检索用户密码。

    支持的其他只读命令ElastiCache for Redis情况如:ACLACL 用户, 和ACL 猫。ElastiCache for Redis不支持任何其他基于写入的 ACL 命令。

RBAC 与ElastiCache for Redis下面将更详细地介绍。

使用访问字符串指定权限

要指定对ElastiCache for Redis复制组中,您可以创建访问字符串并将其分配给用户,使用Amazon CLI或者Amazon Web Services Management Console。

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

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

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

on ~* +@all

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

  • on –用户是活动用户。

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

  • +@all –授予所有可用命令的访问。

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

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

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

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

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

+@category –用户的访问权限为一类命令。

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

如果要将现有工作负载迁移到ElastiCache,您可以通过调用ACL LIST,不包括用户和任何密码哈希。

将 RBAC 应用于ElastiCache for Redis

使用ElastiCache for RedisRBAC,您可执行以下步骤:

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

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

  3. 将用户组分配给启用了传输中加密的有副本复制组。

下面将详细介绍这些步骤。

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

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

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

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

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

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

在控制台上创建新的默认用户

  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon ElastiCache 控制台:https://console.amazonaws.cn/elasticache/

  2. 从导航窗格中,选择 Redis

  3. 选择用户组管理

  4. 适用于用户组 ID下,选择要修改的 ID。确保选择链接,而不是选中复选框。

  5. 选择Swap 默认值

  6. Swap 默认值窗口,用于默认用户选择您想要作为默认用户的用户。

  7. 选择 Swap (交换)。执行此操作时,原始默认用户已终止到复制组的任何现有连接。

要使用创建新的默认用户Amazon CLI

  1. 使用用户名创建新用户default使用以下命令。

    对于 Linux, OS X, or 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, OS X, or 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, OS X, or 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"

    调用此修改操作时,原始默认用户已终止到复制组的任何现有连接。

创建用户时,最多可以设置两个密码。修改密码时,将维护与复制组的所有现有连接。

特别是,在将 RBAC 用于ElastiCache for Redis:

  • 密码必须为 16–128 个可打印字符。

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

使用控制台和 CLI 管理用户

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

在控制台上管理用户

  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon ElastiCache 控制台:https://console.amazonaws.cn/elasticache/

  2. 在存储库的Amazon ElastiCache控制面板中,选择用户管理。以下选项可用:

    • 创建用户 –创建用户时,需要输入用户 ID、用户名、密码和访问字符串。访问字符串设置允许用户的密钥和命令的权限级别。

      创建用户时,最多可以设置两个密码。修改密码时,将维护与复制组的所有现有连接。

    • 修改用户 –使您能够更新用户的密码或更改其访问字符串。

    • 删除用户 –用户帐户将从其所属的任何用户管理组中删除。

使用以下过程管理具有Amazon CLI。

使用 CLI 修改用户

  • 使用modify-user命令更新用户的密码或密码或更改用户的访问权限。

    修改用户时,将更新与该用户关联的用户组以及与该用户组关联的任何复制组。维护所有现有连接。示例如下。

    对于 Linux, OS X, or 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

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

    { "UserId": "user-id-1", "UserName": "user-name-1", "Status": "modifying", "Engine": "redis", "AccessString": "off ~objects:* ~items:* ~public:* -@all", "UserGroupIds": [ "new-group-1" ], "Authentication": { "Type": "no-password" }, "ARN": "arn:aws:elasticache:us-east-1:493071037918:user:user-id-1" }
注意

我们建议您不要使用nopass选项。如果这样做,我们建议将用户的权限设置为只读并访问一组有限的密钥。

使用 CLI 删除用户

  • 使用 delete-user 命令删除用户。用户帐户将被删除并从其所属的任何用户组中删除。以下是示例。

    对于 Linux, OS X, or Unix:

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

    对于 Windows:

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

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

    { "UserId": "user-id-2", "UserName": "user-name-2", "Status": "deleting", "Engine": "redis", "AccessString": "on ~keys* -@all +get", "UserGroupIds": [ "new-group-1" ], "Authentication": { "Type": "password", "PasswordCount": 1 }, "ARN": "arn:aws:elasticache:us-east-1:493071037918:user:user-id-2" }

要查看用户列表,请调用描述用户operation.

aws elasticache describe-users { "Users": [ { "UserId": "user-id-1", "UserName": "user-id-1", "Status": "active", "Engine": "redis", "AccessString": "+get ~keys*", "UserGroupIds": [], "Authentication": { "Type": "password", "PasswordCount": 1 } } ] }

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

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

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

使用控制台管理用户组

  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon ElastiCache 控制台:https://console.amazonaws.cn/elasticache/

  2. 在存储库的Amazon ElastiCache控制面板中,选择用户管理

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

    • Create –创建用户组时,您可以添加用户,然后将用户组分配给复制组。例如,您可以创建一个Admin用户组,用于在群集上具有管理角色的用户。

      重要

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

    • 添加用户 –将用户添加到用户组。

    • 删除用户 –从用户组移除用户。当用户从用户组中删除时,他们与复制组之间的任何现有连接都将终止。

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

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

    • 添加用户 –将现有用户添加到用户组。

    • 删除用户 –从用户组中删除现有用户。

      注意

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

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

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

  • 使用create-user-group命令,如下所示。

    对于 Linux, OS X, or 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

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

    { "UserGroupId": "new-group-1", "Status": "creating", "Engine": "redis", "UserIds": [ "user-id-1", "user-id-2" ], "ReplicationGroups": [], "ARN": "arn:aws:elasticache:us-east-1:493071037918:usergroup:new-group-1" }

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

  • 使用modify-user-group命令,如下所示。

    对于 Linux, OS X, or Unix:

    aws elasticache modify-user-group --user-group-id new-group-1 \ --user-ids-to-add user-id-3 \ --user-ids-to-remove user-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

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

    { "UserGroupId": "new-group-1", "Status": "modifying", "Engine": "redis", "UserIds": [ "user-id-1", "user-id-2" ], "PendingChanges": { "UserIdsToRemove": [ "user-id-2" ], "UserIdsToAdd": [ "user-id-3" ] }, "ReplicationGroups": [], "ARN": "arn:aws:elasticache:us-east-1:493071037918:usergroup:new-group-1" }
注意

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

使用 CLI 删除用户组的步骤

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

    对于 Linux, OS X, or Unix:

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

    对于 Windows:

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

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

    aws elasticache delete-user-group --user-group-id "new-group-1" { "UserGroupId": "new-group-1", "Status": "deleting", "Engine": "redis", "UserIds": [ "user-id-1", "user-id-3" ], "ReplicationGroups": [], "ARN": "arn:aws:elasticache:us-east-1:493071037918:usergroup:new-group-1" }

要查看用户组列表,可以调用描述用户组operation.

aws elasticache describe-user-groups \ --user-group-id test-group
{ "UserGroups": [{ "UserGroupId": "test-group", "Status": "creating", "Engine": "redis", "UserIds": [ "defaut", "test-user-1" ], "ReplicationGroups": [] }] }

将用户组分配给复制组

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

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

若要使用复制中添加用户组,使用Amazon Web Services Management Console中,执行以下操作:

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

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

关键参数

  • --engine – 必须是 redis

  • --engine-version –必须为 6.x 或更高版本。

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

  • --user-group-ids –此值提供由具有集群指定访问权限的用户组组成的用户组。

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

对于 Linux, OS X, or Unix:

aws elasticache create-replication-group \ --replication-group-id "new-replication-group" \ --replication-group-description "new-replication-group" \ --engine "redis" \ --engine-version "6.x" \ --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" ^ --engine-version "6.x" ^ --cache-node-type cache.m5.large ^ --transit-encryption-enabled ^ --user-group-ids "new-group-1" ^ --cache-subnet-group "cache-subnet-group"

前面的代码将返回以下响应。

{ "ReplicationGroup": { "ReplicationGroupId": "new-replication-group", "Description": "new-replication-group", "Status": "creating", "PendingModifiedValues": {}, "MemberClusters": [ "new-replication-group-001" ], "AutomaticFailover": "disabled", "SnapshotRetentionLimit": 0, "SnapshotWindow": "10:30-11:30", "ClusterEnabled": false, "UserGroupIds": ["new-group-1"] "CacheNodeType": "cache.m5.large", "TransitEncryptionEnabled": true, "AtRestEncryptionEnabled": false } }

以下Amazon CLI操作会修改启用传输中加密 (TLS) 并具有user-group-ids具有值的参数my-user-group-id

对于 Linux, OS X, or 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"

前面的代码返回以下响应(缩写):

{ "ReplicationGroupId": "replication-group-1", "PendingChanges": { "UserGroups": { "UserGroupIdsToRemove": ["new-group-1"], "UserGroupIdsToAdd": ["new-group-2"] } } . . . "UserGroupIds": ["new-group-1"] }
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" { "ReplicationGroupId": "replication-group-1", "PendingChanges": { "UserGroups": { "UserGroupIdsToRemove": ["new-group-1"], "UserGroupIdsToAdd": ["new-group-2"] } } . . . "UserGroupIds": ["new-group-1"] }

请注意PendingChanges在响应中。对复制组所做的任何修改都会异步更新。您可通过查看事件来监控此进度。有关更多信息,请参阅查看 ElastiCache 事件

从 Redis 身份验证迁移到 RBAC

如果您正在使用 Redis 身份验证,如使用 Redis AUTH 命令对用户进行身份验证并希望迁移到使用 RBAC,请使用以下过程。

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

使用控制台从 Redis 身份验证迁移到 RBAC

  1. 登录 Amazon Web Services Management Console并通过以下网址打开 ElastiCache 控制台:https://console.amazonaws.cn/elasticache/

  2. 从右上角的列表中,选择Amazon您想要修改的集群所在的区域。

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

    此时会显示选定引擎的集群列表。

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

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

    Modify Cluster (修改集群) 窗口随即出现。

  6. 适用于访问控制选项中,选择用户组访问控制列表

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

  8. 选择修改

使用以下过程通过 CLI 从 Redis AUTH 迁移到 RBAC。

使用 CLI 从 Redis 身份验证迁移到 RBAC

  • 使用modify-replication-group命令,如下所示。

    对于 Linux, OS X, or 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 迁移到 Redis 身份验证

如果您正在使用 RBAC 并希望迁移到 Redis 身份验证,请参阅从 RBAC 迁移到 Redis 身份验证