• Русский
  • Управление пользователями

    Реализация надлежащей аутентификации и контроля доступа необходима для обеспечения безопасности вашей среды Redis. В этом разделе рассматриваются управление паролями и настройка контроля доступа на основе ролей для экземпляров Redis.

    Примечание о совместимости версий

    Redis 6.0 и более поздние версии реализуют комплексную систему списков контроля доступа (ACL), которая поддерживает несколько пользователей с детально настраиваемыми разрешениями. Redis 6.0+ сохраняет пользователя по умолчанию для обратной совместимости с устаревшими клиентами.

    Просмотр пользователей

    Следующие методы позволяют просмотреть всех пользователей, связанных с экземпляром Redis.

    CLI
    Веб-консоль

    Экземпляры 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

    Поля вывода предоставляют следующую информацию:

    FieldDescription
    NAMEИдентификатор пользовательского ресурса RedisUser
    INSTANCEИмя связанного экземпляра Redis
    USERNAMEИмя пользователя, зарегистрированное в Redis
    PHASEСостояние синхронизации:
    • Success: конфигурация пользователя успешно синхронизирована со всеми узлами Redis
    • Fail: синхронизация пользователя не удалась на одном или нескольких узлах Redis
    • Pending: связанный экземпляр Redis не готов или выполняется синхронизация
    Учетная запись системного оператора

    Каждый экземпляр Redis включает встроенного пользователя operator, который автоматически создается при создании экземпляра. Эта системная учетная запись имеет расширенные права (включая возможности управления пользователями) и защищена сложным паролем длиной 64 символа.

    Эта учетная запись предназначена исключительно для системных операций и никогда не должна использоваться для доступа приложений. Любое изменение ее конфигурации может привести к серьезной нестабильности экземпляра и потенциально к состояниям сбоя, из которых невозможно восстановиться.

    Обновление пароля

    Следующие процедуры позволяют обновить пароли пользователей для повышения безопасности. В качестве одной из лучших практик обеспечения безопасности рекомендуется регулярно выполнять ротацию паролей.

    Процедура

    CLI
    Веб-консоль
    1. Определите целевого пользователя из списка RedisUser.

      В этом примере мы обновим пароль пользователя default для экземпляра s6.

    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. Платформа предоставляет предопределенные профили разрешений для распространенных сценариев использования:

    Permission ProfileACL RulesDescription
    NotDangerous+@all -@dangerous ~*Предоставляет доступ ко всем командам для всех ключей, кроме тех, что классифицируются как потенциально опасные операции
    ReadWrite-@all +@write +@read -@dangerous ~*Разрешает операции чтения и записи для всех ключей, блокируя при этом опасные команды
    ReadOnly-@all +@read -keys ~*Ограничивает доступ только операциями чтения для всех ключей
    Administrator+@all -acl ~*Предоставляет полный доступ ко всем возможностям Redis, за исключением команд управления ACL

    Для расширенных сценариев использования поддерживаются пользовательские правила ACL. Подробный синтаксис и возможности см. в Redis ACL Documentation.

    Примечание: Все профили разрешений, включая пользовательские, явно отзывают права управления ACL. Изменения пользователей должны выполняться через интерфейсы управления пользователями платформы.

    Процедура

    CLI
    Веб-консоль
    $ kubectl -n default patch RedisUser s56 --type=merge --patch='{"spec": {"aclRules": "+@all ~*"}}'

    После успешного создания пользователь случайным образом переходит в состояние Pending. Дождитесь, пока он изменится на состояние Success, что означает успешное выполнение обновления.

    Создание пользователя

    Процедура

    CLI
    Веб-консоль

    Создайте пользователя для экземпляра кластера 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
    
    Once the resource status changes to `Success`, you can connect with the new password for debugging.