用户管理

实现适当的身份验证和访问控制对于保障您的 Redis 环境安全至关重要。本节介绍 Redis 实例的密码管理和基于角色的访问控制配置。

版本兼容性说明

Redis 5.0 仅支持单一凭证集的基础密码认证,而 Redis 6.0 及更高版本实现了全面的访问控制列表(ACL)系统,支持多个用户及细粒度权限。Redis 6.0+ 为向后兼容旧客户端,保留了默认用户。

目录

查看用户

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

CLI
Web Console

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

$ kubectl -n default get redisuser -l middleware.instance/name=<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 实例名称
USERNAMERedis 中注册的用户名
PHASE同步状态:
  • Success:用户配置已成功同步至所有 Redis 节点
  • Fail:用户同步在一个或多个 Redis 节点失败
  • Pending:关联的 Redis 实例未就绪或同步进行中
系统 Operator 账户

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

该账户专用于系统操作,严禁用于应用访问。对该账户配置的任何修改可能导致实例严重不稳定,甚至出现不可恢复的故障状态。

更新密码

以下操作步骤允许您更新用户密码以增强安全性。建议定期更换密码作为安全最佳实践。

操作步骤

CLI
Redis 5.0 CLI
Web Console
版本兼容性

以下操作仅适用于 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 中。

  3. 查看当前密码 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 编码字符串。

  4. 使用新密码更新 Secret:

    $ kubectl -n default patch secret redis-s6-2hqxb --type=merge --patch='{"stringData": {"password": "admin@12345"}}'
  5. 验证密码更新:

    $ 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 ~*提供除 ACL 管理命令外的所有 Redis 功能的全面访问权限

对于高级用例,支持自定义 ACL 规则。详情请参阅 Redis ACL 文档

注意:所有权限配置(包括自定义)均显式撤销 ACL 管理权限。用户修改必须通过平台的用户管理界面进行。

操作步骤

CLI
Web Console
$ kubectl -n default patch RedisUser s56 --type=merge --patch='{"spec": {"aclRules": "+@all ~*"}}'

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

创建用户

操作步骤

CLI
Web Console

为 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` 后,即可使用新密码连接进行调试。