用户管理

实施适当的身份验证和访问控制对保护您的 Redis 环境至关重要。本节涵盖了 Redis 实例的密码管理和基于角色的访问控制配置。

版本兼容性说明

Redis 5.0 仅支持使用一组凭据进行基本密码身份验证,而 Redis 6.0 及后续版本实现了全面的访问控制列表 (ACL) 系统,支持多个具有细粒度权限的用户。Redis 6.0 及以上版本为向后兼容旧客户端保留了默认用户。

目录

查看用户

以下方法允许您查看与 Redis 实例相关的所有用户。

命令行界面
Web 控制台

Redis 实例 (版本 6.0+) 利用 RedisUser 自定义资源 (CR) 来管理用户账户。列出与特定实例关联的所有用户:

$ kubectl -n default get redisuser -l middleware.instance/name=<实例名>

例如,要列出名为 s6 的实例的所有用户:

$ kubectl -n test get redisuser -l middleware.instance/name=s6
NAME                  INSTANCE   USERNAME   PHASE     AGE
rfr-acl-s6-admin      s6         admin      Success   22s
rfr-acl-s6-app-a      s6         app-a      Success   45s
rfr-acl-s6-app-b      s6         app-b      Success   6s
rfr-acl-s6-default    s6         default    Success   3m17s
rfr-acl-s6-operator   s6         operator   Success   3m17s

输出字段提供以下信息:

字段描述
NAMERedisUser 自定义资源标识符
INSTANCE关联的 Redis 实例名称
USERNAME在 Redis 中注册的用户名
PHASE同步状态:
  • Success: 用户配置成功同步到所有 Redis 节点
  • Fail: 在一个或多个 Redis 节点上的用户同步失败
  • Pending: 关联的 Redis 实例尚未就绪或同步正在进行中
系统操作员账户说明

每个 Redis 实例都包括一个内置的 operator 用户,该用户在实例创建期间自动生成。此系统账户具有全面的权限(包括用户管理功能),并使用复杂的 64 字符密码进行保护。

该账户仅供系统操作使用,切勿用于应用程序访问。对该账户配置的任何修改可能导致实例严重不稳定,并可能导致无法恢复的故障状态。

更新密码

以下步骤允许您更新用户密码以增强安全性。定期更换密码被认为是安全的最佳实践。

步骤

命令行界面
Redis 5.0 CLI
Web 控制台
版本兼容性说明

以下操作仅适用于 Redis 6.0 或更高版本。对于 Redis 5.0,请参考 "Redis 5.0 CLI" 选项卡。

  1. 从 RedisUser 列表中识别目标用户。

    在此示例中,我们将更新实例 s6default 用户的密码。

  2. 检索 RedisUser 资源以识别关联的密码 Secret:

$ kubectl -n default get RedisUser rfr-acl-s6-default -o yaml
apiVersion: redis.middleware.alauda.io/v1
kind: RedisUser
metadata:
  annotations:
    middleware.alauda.io/acl-supported-version: "6.0"
  creationTimestamp: "2025-02-28T02:07:26Z"
  finalizers:
  - redisusers.redis.middleware.alauda.io/finalizer
  generation: 1
  labels:
    managed-by: redis-operator
    middleware.instance/name: s6
  name: rfr-acl-s6-default
  namespace: default
  ownerReferences:
  - apiVersion: databases.spotahome.com/v1
    blockOwnerDeletion: true
    controller: true
    kind: RedisFailover
    name: s6
    uid: 56596fa0-4a42-408b-ba26-d61b3a42b60c
  - apiVersion: middleware.alauda.io/v1
    blockOwnerDeletion: true
    kind: Redis
    name: s6
    uid: 80d2e7b0-02d2-490f-bec4-f145f2c738fc
  resourceVersion: "1014064"
  uid: aae888f3-86ba-48bd-9376-710070bf07e0
spec:
  accountType: default
  aclRules: +@all -acl -flushall -flushdb -keys ~*
  arch: sentinel
  passwordSecrets:
  - redis-s6-2hqxb
  redisName: s6
  username: default
status:
  Phase: Success
  lastUpdateSuccess: "2025-02-28T02:16:28Z"

spec.passwordSecrets[0] 字段可以看出,密码存储在 Secret redis-s6-2hqxb 中。

  1. 检查当前的密码 Secret:
$ kubectl -n default get secret redis-s6-2hqxb -o yaml
apiVersion: v1
data:
  password: YWRtaW5AMTIz
kind: Secret
metadata:
  annotations:
    cpaas.io/creator: admin
    cpaas.io/operator: admin
    cpaas.io/updated-at: "2025-02-28T08:49:38Z"
  creationTimestamp: "2025-02-28T02:07:24Z"
  generateName: redis-s6-
  labels:
    managed-by: redis-operator
    middleware.instance/name: s6
  name: redis-s6-2hqxb
  namespace: default
  ownerReferences:
  - apiVersion: redis.middleware.alauda.io/v1
    blockOwnerDeletion: true
    controller: true
    kind: RedisUser
    name: rfr-acl-s6-default
    uid: aae888f3-86ba-48bd-9376-710070bf07e0
  resourceVersion: "1183397"
  uid: 45a5faa7-5b47-4a6a-a4e4-c614feccb806
type: Opaque

注意:password 键是 Redis Operator 使用的保留字段名,其值以 base64 编码的字符串形式存储。

  1. 使用新密码更新 Secret:
$ kubectl -n default patch secret redis-s6-2hqxb --type=merge --patch='{"stringData": {"password": "admin@12345"}}'
  1. 验证密码更新:
$ kubectl -n default get secret redis-s6-2hqxb -o jsonpath='{.data.password}' | base64 -d
admin@12345

在更新密码后,RedisUser 资源将暂时进入 Pending 状态,直到更改在所有 Redis 节点上传播。一旦同步,状态将恢复为 Success

更新权限

Redis 6.0+ 通过其 ACL 系统支持细粒度的访问控制。该平台提供了常见用例的预定义权限配置:

权限配置ACL 规则描述
NotDangerous+@all -@dangerous ~*允许对所有键执行所有命令,但不包括被标记为潜在危险的操作
ReadWrite-@all +@write +@read -@dangerous ~*允许在所有键上进行读写操作,但阻止危险命令
ReadOnly-@all +@read -keys ~*限制访问所有键的只读操作
Administrator+@all -acl ~*提供对所有 Redis 功能的全面访问,但不包括 ACL 管理命令

对于高级用例,支持自定义 ACL 规则。有关详细语法和功能,请参阅 Redis ACL 文档

注意:所有权限配置,包括自定义配置,明文撤销 ACL 管理权限。用户修改必须通过平台的用户管理接口进行。

步骤

命令行界面
Web 控制台
$ kubectl -n default patch RedisUser s56 --type=merge --patch='{"spec": {"aclRules": "+@all ~*"}}'

成功创建后,用户将随机进入 Pending 状态。等待其变为 Success 状态,表示更新成功。

创建用户

步骤

命令行界面
Web 控制台

为 Redis 集群实例创建用户。

$ cat << EOF | kubectl -n default create -f -
apiVersion: redis.middleware.alauda.io/v1
kind: RedisUser
metadata:
  name: rfr-acl-s6-app-a
spec:
  accountType: custom
  aclRules: +@all -acl ~*
  passwordSecrets:
  - new-redis-password
  redisName: s6
  username: app-a
EOF

一旦资源状态变为 `Success`,您可以使用新密码进行调试连接。