[Документация Yandex Cloud](../../index.md) > [Yandex Managed Service for Valkey™](../index.md) > [Пошаговые инструкции](index.md) > Пользователи > Создание пользователя

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

Yandex Managed Service for Valkey™ позволяет создавать пользователей Valkey™ и настраивать их разрешения на команды, ключи и каналы Pub/Sub кластера с помощью списков контроля доступа [Valkey™ ACL](https://valkey.io/topics/acl).

Valkey™ ACL решает две основные задачи:

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

Вместе с кластером создается пользователь по умолчанию `default`. Он имеет разрешения на все ключи и каналы Pub/Sub кластера, а также может выполнять все команды, кроме административных. Подробные разрешения пользователя можно получить с [информацией о пользователе](user-list.md#get).

## Создать пользователя {#create-user}

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://kz.console.yandex.cloud) перейдите в каталог, в котором находится нужный кластер.
  1. [Перейдите](../../console/operations/select-service.md#select-service) в сервис **Yandex Managed Service for&nbsp;Valkey™**.
  1. Нажмите на имя нужного кластера и выберите вкладку ![image](../../_assets/console-icons/persons.svg) **Пользователи**.
  1. В правом верхнем углу страницы нажмите кнопку **Создать пользователя**.
  
  
  1. Выберите способ авторизации:
      
      * **Пароль** — авторизация по имени пользователя и паролю. Для этого способа авторизации:
        
        1. Введите имя пользователя.

        
        1. Введите пароль. Длина пароля — от 8 до 128 символов.


      * **IAM** — авторизация с помощью [аккаунтов на Yandex Cloud](../../iam/concepts/users/accounts.md).
        
        Для этого способа авторизации выберите нужный аккаунт в поле **Пользователь**.


  1. Выберите опцию **Включить пользователя**, чтобы пользователь мог подключаться к кластеру и выполнять команды.
  1. В блоке `Permissions` задайте разрешения пользователя:

      * `Patterns` — разрешения на шаблоны ключей.
      * `Pub Sub Channels` — разрешения на каналы Pub/Sub.
      * `Categories` — разрешения на категории команд.
      * `Commands` — разрешения на команды.
      * `Sanitize Payload` — разрешение на очистку данных. Возможные значения:
        
        * `sanitize-payload` (по умолчанию) — очистка данных включена;
        * `skip-sanitize-payload` — очистка данных отключена.
        
      {% note info %}
      
      Пользователю не могут быть выданы разрешения на категорию административных команд `+@admin` и [некоторые команды](../concepts/supported-features.md).
      
      {% endnote %}

      Подробнее о списках контроля доступа читайте в [документации Valkey™ ACL](https://valkey.io/topics/acl).
  
  1. Нажмите кнопку **Создать**.

- CLI {#cli}
  
  Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../cli/quickstart.md#install).

  По умолчанию используется каталог, указанный при [создании](../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

  Чтобы создать пользователя Valkey™:

  1. Посмотрите описание команды CLI для создания пользователя:

      ```bash
      yc managed-redis user create --help
      ```
  
  1. Создайте пользователя, выполнив команду (приведены не все флаги):

      ```bash
      yc managed-redis user create <имя_пользователя> \
        --cluster-id=<идентификатор_кластера> \
        --password="<пароль_пользователя>" \
        --disabled \
        --raw="<разрешения>" \
        --categories="<разрешения_на_категории_команд>" \
        --commands="<разрешения_на_команды>" \
        --patterns="<разрешения_на_шаблоны_ключей>" \
        --pub-sub-channels="<разрешения_на_каналы>" \
        --sanitize-payload=<очистка_данных>
      ```

      Где:
      
      * `--cluster-id` — идентификатор кластера.

        Идентификатор кластера можно получить со [списком кластеров](cluster-list.md#list-clusters) в каталоге.

      * `--password` — пароль пользователя. Длина пароля — от 8 до 128 символов.
      
      * `--disabled` — отключает пользователя. По умолчанию — `false`.
      
      * `--raw` — разрешения, в строку через пробел. Также строка должна включать настройку статуса пользователя:
        
        * `on` — пользователь включен;
        * `off` — пользователь отключен.
        
        Пример: `on ~data:* &* +@set +@hash +get +set`.

        {% note info %}

        Флаг `--raw` не используется с флагами отдельных разрешений и с `--disabled`.

        {% endnote %}
      
      * `--categories` — разрешения на категории команд, в строку через пробел.
      
      * `--commands` — разрешения на команды, в строку через пробел.
      
      * `--patterns` — разрешения на шаблоны ключей, в строку через пробел.
      
      * `--pub-sub-channels` — разрешения на каналы Pub/Sub, в строку через пробел.
      
      * `--sanitize-payload` — очистка данных. Возможные значения:
        
        * `sanitize-payload` (по умолчанию) — очистка данных включена;
        * `skip-sanitize-payload` — очистка данных отключена.

      {% note info %}
      
      Пользователю не могут быть выданы разрешения на категорию административных команд `+@admin` и [некоторые команды](../concepts/supported-features.md).
      
      {% endnote %}

      Подробнее о списках контроля доступа читайте в [документации Valkey™ ACL](https://valkey.io/topics/acl).

- Terraform {#tf}

  1. Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
  
      Как создать такой файл, описано в разделе [Создание кластера](cluster-create.md).
  
  1. Чтобы создать пользователя, добавьте ресурс `yandex_mdb_redis_user`:
  
      ```hcl
      resource "yandex_mdb_redis_user" "<локальное_имя_ресурса>" {
        cluster_id = <идентификатор_кластера>
        name       = "<имя_пользователя>"
        passwords  = ["<пароль_пользователя>"]
        enabled    = <статус_пользователя>
        
        permissions = {
          categories       = "<разрешения_на_категории_команд>"
          commands         = "<разрешения_на_команды>"
          patterns         = "<разрешения_на_шаблоны_ключей>"
          pub_sub_channels = "<разрешения_на_каналы>"
          sanitize_payload = "<очистка_данных>"
        }
      }
      ```

      Где:

      * `cluster_id` — идентификатор кластера.
      
      * `name` — имя пользователя.
        
      * `passwords` — пароль пользователя. Длина пароля — от 8 до 128 символов.
          
        Можно указать только один пароль.

      * `enabled` — статус пользователя. Возможные значения:
        
        * `true` — пользователь включен;
        * `false` — пользователь отключен.
      
      * `permissions` — настройки разрешений пользователя:

        * `categories` — разрешения на категории команд, в строку через пробел.
        
        * `commands` — разрешения на команды, в строку через пробел.
        
        * `patterns` — разрешения на шаблоны ключей, в строку через пробел.
          
        * `pub_sub_channels` — разрешения на каналы Pub/Sub, в строку через пробел.
          
        * `sanitize_payload` — очистка данных. Возможные значения:
          
          * `sanitize-payload` (по умолчанию) — очистка данных включена;
          * `skip-sanitize-payload` — очистка данных отключена.
        
        {% note info %}
        
        Пользователю не могут быть выданы разрешения на категорию административных команд `+@admin` и [некоторые команды](../concepts/supported-features.md).
        
        {% endnote %}

        Подробнее о списках контроля доступа читайте в [документации Valkey™ ACL](https://valkey.io/topics/acl).
  
  1. Проверьте корректность настроек.
  
      1. В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
      1. Выполните команду:
      
         ```bash
         terraform validate
         ```
      
         Если в файлах конфигурации есть ошибки, Terraform на них укажет.
  
  1. Подтвердите изменение ресурсов.
  
      1. Выполните команду для просмотра планируемых изменений:
      
         ```bash
         terraform plan
         ```
      
         Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
      
      1. Если вас устраивают планируемые изменения, внесите их:
         1. Выполните команду:
      
            ```bash
            terraform apply
            ```
      
         1. Подтвердите изменение ресурсов.
         1. Дождитесь завершения операции.

  1. Убедитесь, что пользователь создан, выполнив команду [CLI](../../cli/quickstart.md#install):
      
      ```bash
      yc managed-redis user get <имя_пользователя> \
        --cluster-id=<идентификатор_кластера>
      ```

      [Подробнее о том, как получить информацию о пользователе](user-list.md#get).
  
  {% note warning "Ограничения по времени" %}
  
  Провайдер Terraform ограничивает время на выполнение операций с кластером Yandex Managed Service for Valkey™:
  
  * создание, в т. ч. путем восстановления из резервной копии, — 15 минут;
  * изменение — 60 минут;
  * удаление — 15 минут.
  
  Операции, длящиеся дольше указанного времени, прерываются.
  
  {% cut "Как изменить эти ограничения?" %}
  
  Добавьте к описанию кластера блок `timeouts`, например:
  
  ```hcl
  resource "yandex_mdb_redis_cluster_v2" "<имя_кластера>" {
    ...
    timeouts = {
      create = "1h30m" # Полтора часа
      update = "2h"    # 2 часа
      delete = "30m"   # 30 минут
    }
  }
  ```
  
  {% endcut %}
  
  {% endnote %}

- REST API {#api}

  1. [Получите IAM-токен для аутентификации в API](../api-ref/authentication.md) и поместите токен в переменную среды окружения:

      ```bash
      export IAM_TOKEN="<IAM-токен>"
      ```

  1. Создайте файл `body.json` и добавьте в него следующее содержимое:

      ```json
      {
        "userSpec": {
          "name": "<имя_пользователя>",
          "passwords": [
            "<пароль_пользователя>"
          ],
          "permissions": {
            "patterns": "<разрешения_на_шаблоны_ключей>",
            "pubSubChannels": "<разрешения_на_каналы>",
            "categories": "<разрешения_на_категории_команд>",
            "commands": "<разрешения_на_команды>",
            "sanitizePayload": "<очистка_данных>"
          },
          "enabled": <статус_пользователя>
        }
      }
      ```

      Где `userSpec` — настройки пользователя:
      
      * `name` — имя пользователя.

      * `passwords` — пароль пользователя. Длина пароля — от 8 до 128 символов.
      
        Можно указать только один пароль.
      
      * `permissions` — настройки разрешений пользователя:

        * `patterns` — разрешения на шаблоны ключей, в строку через пробел.
        * `pubSubChannels` — разрешения на каналы Pub/Sub, в строку через пробел.
        * `categories` — разрешения на категории команд, в строку через пробел.
        * `commands` — разрешения на команды, в строку через пробел.
        * `sanitizePayload` — очистка данных. Возможные значения:
          
          * `sanitize-payload` (по умолчанию) — очистка данных включена;
          * `skip-sanitize-payload` — очистка данных отключена.
        
        {% note info %}
        
        Пользователю не могут быть выданы разрешения на категорию административных команд `+@admin` и [некоторые команды](../concepts/supported-features.md).
        
        {% endnote %}

        Подробнее о списках контроля доступа читайте в [документации Valkey™ ACL](https://valkey.io/topics/acl). 

      * `enabled` — статус пользователя. Возможные значения:
        
        * `true` — пользователь включен;
        * `false` — пользователь отключен. 

  1. Воспользуйтесь методом [User.Create](../api-ref/User/create.md) и выполните запрос, например с помощью [cURL](https://curl.se/):

      ```bash
      curl \
        --request POST \
        --header "Authorization: Bearer $IAM_TOKEN" \
        --header "Content-Type: application/json" \
        --url 'https://mdb.api.yandexcloud.kz/managed-redis/v1/clusters/<идентификатор_кластера>/users' \
        --data "@body.json"
      ```

      Идентификатор кластера можно получить со [списком кластеров](cluster-list.md#list-clusters) в каталоге.

  1. Убедитесь, что запрос был выполнен успешно, изучив [ответ сервера](../api-ref/User/create.md#yandex.cloud.operation.Operation).

- gRPC API {#grpc-api}

  1. [Получите IAM-токен для аутентификации в API](../api-ref/authentication.md) и поместите токен в переменную среды окружения:

      ```bash
      export IAM_TOKEN="<IAM-токен>"
      ```

  1. Клонируйте репозиторий [cloudapi](https://github.com/yandex-cloud/cloudapi):
     
     ```bash
     cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
     ```
     
     Далее предполагается, что содержимое репозитория находится в директории `~/cloudapi/`.

  1. Создайте файл `body.json` и добавьте в него следующее содержимое:
      
      ```json
      {
        "cluster_id": "<идентификатор_кластера>",
        "user_spec": {
          "name": "<имя_пользователя>",
          "passwords": [
            "<пароль_пользователя>"
          ],
          "permissions": {
            "patterns": "<разрешения_на_шаблоны_ключей>",
            "pub_sub_channels": "<разрешения_на_каналы>",
            "categories": "<разрешения_на_категории_команд>",
            "commands": "<разрешения_на_команды>",
            "sanitize_payload": "<очистка_данных>"
          },
          "enabled": <статус_пользователя>
        }
      }
      ```

      Где:

      * `cluster_id` — идентификатор кластера.
      
        Идентификатор кластера можно получить со [списком кластеров](cluster-list.md#list-clusters) в каталоге.

      * `user_spec` — настройки пользователя:
      
        * `name` — имя пользователя.
        
        * `passwords` — пароль пользователя. Длина пароля — от 8 до 128 символов.
          
          Можно указать только один пароль.
      
        * `permissions` — настройки разрешений пользователя:

          * `patterns` — разрешения на шаблоны ключей, в строку через пробел.
          
          * `pub_sub_channels` — разрешения на каналы Pub/Sub, в строку через пробел.
          
          * `categories` — разрешения на категории команд, в строку через пробел.
          
          * `commands` — разрешения на команды, в строку через пробел.
          
          * `sanitize_payload` — очистка данных. Возможные значения:
          
            * `sanitize-payload` (по умолчанию) — очистка данных включена;
            * `skip-sanitize-payload` — очистка данных отключена.
        
          {% note info %}
          
          Пользователю не могут быть выданы разрешения на категорию административных команд `+@admin` и [некоторые команды](../concepts/supported-features.md).
          
          {% endnote %}

          Подробнее о списках контроля доступа читайте в [документации Valkey™ ACL](https://valkey.io/topics/acl).

        * `enabled` — статус пользователя. Возможные значения:
        
          * `true` — пользователь включен;
          * `false` — пользователь отключен.

  1. Воспользуйтесь вызовом [UserService.Create](../api-ref/grpc/User/create.md) и выполните запрос, например с помощью [gRPCurl](https://github.com/fullstorydev/grpcurl):

      ```bash
      grpcurl \
        -format json \
        -import-path ~/cloudapi/ \
        -import-path ~/cloudapi/third_party/googleapis/ \
        -proto ~/cloudapi/yandex/cloud/mdb/redis/v1/user_service.proto \
        -rpc-header "Authorization: Bearer $IAM_TOKEN" \
        -d @ \
        mdb.api.yandexcloud.kz:443 \
        yandex.cloud.mdb.redis.v1.UserService.Create \
        < body.json
        ```

  1. Убедитесь, что запрос был выполнен успешно, изучив [ответ сервера](../api-ref/grpc/User/create.md#yandex.cloud.operation.Operation).

{% endlist %}