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

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

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

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

    Содержание

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

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

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

    Экземпляры Redis (версии 6.0+) используют Custom Resource (CR) RedisUser для управления учетными записями пользователей. Чтобы вывести список всех пользователей, связанных с конкретным экземпляром:

    $ 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

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

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

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

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

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

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

    Процедура

    CLI
    Redis 5.0 CLI
    Веб-консоль
    Совместимость версий

    Следующие операции применимы только к Redis 6.0 и более поздним версиям. Для Redis 5.0 смотрите вкладку "Redis 5.0 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. Платформа предоставляет предопределённые профили разрешений для распространённых сценариев:

    Профиль разрешенийACL правилаОписание
    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
    
    После изменения статуса ресурса на `Success` можно подключаться с новым паролем для отладки.