Управление пользователями Apache Kafka®
Пользователи в Apache Kafka®:
-
Разграничивают права доступа производителей и потребителей данных. Подробнее о правах, которые предоставляет каждая роль.
Производитель или потребитель получает доступ только к тем топикам, которые разрешены для его пользователя. Вы можете использовать одного и того же пользователя для нескольких производителей или потребителей: первые получат права на запись в определенные топики, а вторые — на чтение.
-
Управляют топиками. Подробнее см. в разделе Топики и разделы.
После создания кластера Apache Kafka® вы можете:
- получить список пользователей в кластере;
- создать пользователя;
- изменить настройки пользователя:
- импортировать пользователя в Terraform;
- удалить пользователя.
Получить список пользователей в кластере
- В консоли управления
перейдите в нужный каталог. - В списке сервисов выберите Managed Service for Kafka.
- Нажмите на имя нужного кластера и перейдите на вкладку Пользователи.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
-
Чтобы получить список пользователей, выполните команду:
yc managed-kafka user list --cluster-name <имя_кластера> -
Чтобы получить подробную информацию по конкретному пользователю, выполните команду:
yc managed-kafka user get <имя_пользователя> --cluster-name <имя_кластера>
Чтобы узнать имя кластера, получите список кластеров в каталоге.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом User.list и выполните запрос, например, с помощью cURL
:curl \ --request GET \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://mdb.api.cloud.yandex.net/managed-kafka/v1/clusters/<идентификатор_кластера>/users'Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом UserService/List и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/kafka/v1/user_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>" }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.kafka.v1.UserService.ListИдентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Создать пользователя
Примечание
Для создания пользователя-администратора воспользуйтесь интерфейсами командной строки, API или Terraform.
Чтобы создать пользователя для производителя или потребителя в кластере:
-
В консоли управления
перейдите в нужный каталог. -
В списке сервисов выберите Managed Service for Kafka.
-
Нажмите на имя нужного кластера и перейдите на вкладку Пользователи.
-
Нажмите кнопку Создать пользователя.
-
Введите имя пользователя и пароль.
Примечание
Имя пользователя может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы или подчеркивания.
Длина пароля от 8 до 128 символов.
-
Выдайте права доступа к нужным топикам.
-
Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы создать пользователя:
-
Посмотрите описание команды CLI для создания пользователей:
yc managed-kafka user create --help -
Создайте пользователя с ролью
producerдля производителя илиconsumerдля потребителя и выдайте права доступа к нужным топикам:yc managed-kafka user create <имя_пользователя> \ --cluster-name <имя_кластера> \ --password <пароль> \ --permission topic=<имя_топика>,role=<роль_пользователя>,allow_host=<разрешенный_IP-адрес_1>,allow_host=<разрешенный_IP-адрес_2>,...,allow_host=<разрешенный_IP-адрес_N>Параметр
--permissionдолжен содержать хотя бы одну пару топик-роль, где:topic— имя топика.role— роль пользователя:producer,consumer,adminилиtopic_admin. Подробнее о правах, которые предоставляет каждая роль.allow_host— (опционально) IP-адрес, с которого разрешен доступ этому пользователю. Чтобы задать несколько адресов, добавьте нужное количество опцийallow_hostчерез запятую.
Чтобы создать пользователя-администратора для управления топиками в кластере:
-
Посмотрите описание команды CLI для создания пользователя:
yc managed-kafka user create --help -
Создайте пользователя с ролью
admin, действующей на все (*) топики кластера:yc managed-kafka user create <имя_пользователя> \ --cluster-name <имя_кластера> \ --password <пароль> \ --permission topic=*,role=admin,allow_host=<разрешенный_IP-адрес_1>,allow_host=<разрешенный_IP-адрес_2>,...,allow_host=<разрешенный_IP-адрес_N> -
Создайте пользователя с ролью
topic_admin, действующей на все топики кластера с префиксомpref:yc managed-kafka user create <имя_пользователя> \ --cluster-name <имя_кластера> \ --password <пароль> \ --permission topic=pref*,role=topic_admin
Примечание
Имя пользователя может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы или подчеркивания.
Длина пароля от 8 до 128 символов.
Чтобы узнать имя кластера, получите список кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
-
Добавьте ресурс
yandex_mdb_kafka_user:resource "yandex_mdb_kafka_user" "<имя_пользователя>" { cluster_id = "<идентификатор_кластера>" name = "<имя_пользователя>" password = "<пароль>" ... }Примечание
Имя пользователя может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы или подчеркивания.
Длина пароля от 8 до 128 символов.
-
Выдайте права доступа к нужным топикам.
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform.
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение всех операций с кластером Managed Service for Apache Kafka® 60 минутами.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts, например:
resource "yandex_mdb_kafka_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом User.create и выполните запрос, например, с помощью cURL
:curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-kafka/v1/clusters/<идентификатор_кластера>/users' \ --data '{ "userSpec": { "name": "<имя_пользователя>", "password": "<пароль_пользователя>", "permissions": [ { "topicName": "<имя_топика>", "role": "<уровень_прав_доступа_к_топику>", "allowHosts": [ <список_IP-адресов> ] } ] } }'Где
userSpec— настройки нового пользователя Apache Kafka®:-
name— имя пользователя. -
password— пароль пользователя.Примечание
Имя пользователя может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы или подчеркивания.
Длина пароля от 8 до 128 символов.
-
permissions— права доступа к топикам. Каждый элемент массива соответствует отдельному топику и имеет следующую структуру:topicName— имя или шаблон имени топика:*— чтобы разрешить доступ к любым топикам.- Полное название топика — чтобы разрешить доступ конкретно к нему. Чтобы узнать название, получите список топиков в кластере.
<префикс>*— чтобы выдать доступ к топикам, названия которых начинаются с указанного префикса. Допустим, есть топикиtopic_a1,topic_a2,a3. Если указать значениеtopic*, доступ будет разрешен для топиковtopic_a1иtopic_a2.Для указания всех топиков в кластере используйте маску*.
role— роль пользователя:ACCESS_ROLE_CONSUMER,ACCESS_ROLE_PRODUCER,ACCESS_ROLE_TOPIC_ADMINилиACCESS_ROLE_ADMIN. РольACCESS_ROLE_ADMINдоступна только если выбраны все топики (topicName: "*"). Подробнее о правах, которые предоставляет каждая роль.allowHosts— (опционально) список IP-адресов, с которых пользователю разрешен доступ к топику.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом UserService/Create и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/kafka/v1/user_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "user_spec": { "name": "<имя_пользователя>", "password": "<пароль_пользователя>", "permissions": [ { "topic_name": "<имя_топика>", "role": "<уровень_прав_доступа_к_топику>", "allow_hosts": [ <список_IP-адресов> ] } ] } }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.kafka.v1.UserService.CreateГде
user_spec— настройки нового пользователя БД:-
name— имя пользователя. -
password— пароль пользователя.Примечание
Имя пользователя может содержать латинские буквы, цифры, дефис и подчеркивание, но должно начинаться с буквы или подчеркивания.
Длина пароля от 8 до 128 символов.
-
permissions— права доступа к топикам. Каждый элемент массива соответствует отдельному топику и имеет следующую структуру:topic_name— имя или шаблон имени топика:*— чтобы разрешить доступ к любым топикам.- Полное название топика — чтобы разрешить доступ конкретно к нему. Чтобы узнать название, получите список топиков в кластере.
<префикс>*— чтобы выдать доступ к топикам, названия которых начинаются с указанного префикса. Допустим, есть топикиtopic_a1,topic_a2,a3. Если указать значениеtopic*, доступ будет разрешен для топиковtopic_a1иtopic_a2.
role— роль пользователя:ACCESS_ROLE_CONSUMER,ACCESS_ROLE_PRODUCER,ACCESS_ROLE_TOPIC_ADMINилиACCESS_ROLE_ADMIN. РольACCESS_ROLE_ADMINдоступна только если выбраны все топики (topicName: "*"). Подробнее о правах, которые предоставляет каждая роль.allow_hosts— (опционально) список IP-адресов, с которых пользователю разрешен доступ к топику.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Изменить настройки пользователя
-
В консоли управления
перейдите в нужный каталог. -
В списке сервисов выберите Managed Service for Kafka.
-
Нажмите на имя нужного кластера и перейдите на вкладку Пользователи.
-
Нажмите значок
для нужного пользователя и выберите пункт:- Изменить пароль, чтобы указать другой пароль для пользователя.
- Настроить, чтобы выдать или отозвать права доступа к топикам.
-
Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
С помощью CLI можно изменить пароль пользователя, а также выдать или отозвать права доступа к топикам.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
-
Найдите в этом файле ресурс
yandex_mdb_kafka_userдля нужного пользователя и внесите правки.С помощью Terraform можно изменить пароль пользователя, а также выдать или отозвать права доступа к топикам.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом User.update и выполните запрос, например, с помощью cURL
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask(одной строкой через запятую).curl \ --request PATCH \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-kafka/v1/clusters/<идентификатор_кластера>/users/<имя_пользователя>' \ --data '{ "updateMask": "permissions", "permissions": [ { "topicName": "<имя_топика>", "role": "<уровень_прав_доступа_к_топику>", "allowHosts": [ <список_IP-адресов> ] } ] }'Где:
-
updateMask— перечень изменяемых параметров в одну строку через запятую.В данном случае указан только один параметр:
permissions. -
permissions— новый набор прав на доступ к топикам. Каждый элемент массива соответствует отдельному топику и имеет следующую структуру:topicName— имя или шаблон имени топика. Чтобы узнать имя, получите список топиков в кластере. Для указания всех топиков в кластере используйте маску*.role— новая роль пользователя:ACCESS_ROLE_CONSUMER,ACCESS_ROLE_PRODUCER,ACCESS_ROLE_TOPIC_ADMINилиACCESS_ROLE_ADMIN. РольACCESS_ROLE_ADMINдоступна только если выбраны все топики (topicName: "*"). Подробнее о правах, которые предоставляет каждая роль.allowHosts— (опционально) новый список IP-адресов, с которых пользователю разрешен доступ к топику.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
С помощью метода User.update вы также можете изменить пароль пользователя, а с помощью методов grantPermission и revokePermission — выдать или отозвать права доступа к топику.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом UserService/Update и выполните запрос, например, с помощью gRPCurl
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
update_mask(в виде массива строкpaths[]).Формат перечисления настроек
"update_mask": { "paths": [ "<настройка_1>", "<настройка_2>", ... "<настройка_N>" ] }grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/kafka/v1/user_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "user_name": "<имя_пользователя>", "update_mask": { "paths": [ "permissions" ] }, "permissions": [ { "topic_name": "<имя_топика>", "role": "<уровень_прав_доступа_к_топику>", "allow_hosts": [ <список_IP-адресов> ] } ] }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.kafka.v1.UserService.UpdateГде:
-
update_mask— перечень изменяемых параметров в виде массива строкpaths[].В данном случае массив состоит только из одной строки:
permissions. -
permissions— новый набор прав на доступ к топикам. Каждый элемент массива соответствует отдельному топику и имеет следующую структуру:topic_name— имя или шаблон имени топика. Чтобы узнать имя, получите список топиков в кластере. Для указания всех топиков в кластере используйте маску*.role— новая роль пользователя:ACCESS_ROLE_CONSUMER,ACCESS_ROLE_PRODUCER,ACCESS_ROLE_TOPIC_ADMINилиACCESS_ROLE_ADMIN. РольACCESS_ROLE_ADMINдоступна только если выбраны все топики (topicName: "*"). Подробнее о правах, которые предоставляет каждая роль.allow_hosts— (опционально) новый список IP-адресов, с которых пользователю разрешен доступ к топику.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
С помощью вызова UserService/Update вы также можете изменить пароль пользователя, а с помощью методов grantPermission и revokePermission — выдать или отозвать права доступа к топику.
Изменить пароль пользователя
- В консоли управления
перейдите в нужный каталог. - В списке сервисов выберите Managed Service for Kafka.
- Нажмите на имя нужного кластера и перейдите на вкладку Пользователи.
- Нажмите значок
для нужного пользователя и выберите пункт Изменить пароль. - Задайте новый пароль и нажмите кнопку Изменить.
Примечание
Длина пароля от 8 до 128 символов.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы изменить пароль пользователя, выполните следующую команду:
yc managed-kafka user update <имя_пользователя> \
--cluster-name <имя_кластера> \
--password <новый_пароль>
Примечание
Длина пароля от 8 до 128 символов.
Чтобы узнать имя кластера, получите список кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
-
Найдите в этом файле ресурс
yandex_mdb_kafka_userдля нужного пользователя. -
Измените значение поля
password:resource "yandex_mdb_kafka_user" "<имя_пользователя>" { ... password = "<пароль>" ... }Примечание
Длина пароля от 8 до 128 символов.
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform.
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение всех операций с кластером Managed Service for Apache Kafka® 60 минутами.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts, например:
resource "yandex_mdb_kafka_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом User.update и выполните запрос, например, с помощью cURL
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask(одной строкой через запятую).curl \ --request PATCH \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-kafka/v1/clusters/<идентификатор_кластера>/users/<имя_пользователя>' \ --data '{ "updateMask": "password", "password": "<новый_пароль_пользователя>" }'Где:
-
updateMask— перечень изменяемых параметров в одну строку через запятую.В данном случае указан только один параметр:
password. -
password— новый пароль пользователя.Примечание
Длина пароля от 8 до 128 символов.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом UserService/Update и выполните запрос, например, с помощью gRPCurl
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
update_mask(в виде массива строкpaths[]).Формат перечисления настроек
"update_mask": { "paths": [ "<настройка_1>", "<настройка_2>", ... "<настройка_N>" ] }grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/kafka/v1/user_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "user_name": "<имя_пользователя>", "update_mask": { "paths": [ "password" ] }, "password": "<новый_пароль_пользователя>" }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.kafka.v1.UserService.UpdateГде:
-
update_mask— перечень изменяемых параметров в виде массива строкpaths[].В данном случае массив состоит только из одной строки:
password. -
password— новый пароль пользователя.Примечание
Длина пароля от 8 до 128 символов.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Выдать пользователю права
Примечание
Выданные пользователю права на доступ к топику сохраняются после его удаления. Если после удаления вы не отзывали права, то при создании топика с тем же именем пользователь сможет работать с ним без переназначения прав.
-
В консоли управления
перейдите в нужный каталог. -
В списке сервисов выберите Managed Service for Kafka.
-
Выберите кластер.
-
Перейдите на вкладку Пользователи.
-
Нажмите значок
для пользователя, которому нужно выдать права на топик, и выберите пункт Настроить. -
Нажмите кнопку
Добавить топик. Если такой кнопки нет — значит, для этого пользователя добавлены права на все существующие топики кластера.Если на какие-либо топики не нужны права, их можно отозвать.
-
Выберите нужный топик из выпадающего списка или введите его название:
-
Укажите в поле Топик:
*— чтобы разрешить доступ к любым топикам.- Полное название топика — чтобы разрешить доступ конкретно к нему.
<префикс>*— чтобы выдать доступ к топикам, названия которых начинаются с указанного префикса. Допустим, есть топикиtopic_a1,topic_a2,a3. Если указать значениеtopic*, доступ будет разрешен для топиковtopic_a1иtopic_a2.
-
Нажмите кнопку Добавить топик.
-
-
Нажмите на значок
в столбце Роли для нужного топика и выберите роль:ACCESS_ROLE_CONSUMER: потребителям, которые используют этого пользователя, будет разрешен доступ к топику.ACCESS_ROLE_PRODUCER: производителям, которые используют этого пользователя, будет разрешен доступ к топику.ACCESS_ROLE_ADMIN: роль доступна только если выбран доступ к любым топикам.ACCESS_ROLE_TOPIC_ADMIN: роль с максимальными правами на управление топиками через Admin API Apache Kafka® .
Вы можете выбрать роли
ACCESS_ROLE_CONSUMERиACCESS_ROLE_PRODUCERодновременно — тогда пользователь будет подходить и производителям, и потребителям.Подробнее о правах, которые предоставляет каждая роль.
Пользователю также предоставляется доступ к субъектам схем данных. То, какие субъекты доступны, зависит от указанных ролей и топиков. Подробнее читайте в разделе Субъекты в Managed Schema Registry.
-
Чтобы выдать права на другие топики — повторите процедуру.
-
(Опционально) Если права были назначены топику по ошибке — отзовите их.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы выдать права пользователю:
-
Получите список топиков кластера:
yc managed-kafka topic list --cluster-name <имя_кластера> -
Выдайте права на доступ к нужным топикам, передав параметры
--permission:yc managed-kafka user update <имя_пользователя> \ --cluster-name <имя_кластера> \ --permission topic=<имя_топика>,role=<роль_пользователя>,allow_host=<разрешенный_IP-адрес_1>,allow_host=<разрешенный_IP-адрес_2>,...,allow_host=<разрешенный_IP-адрес_N>Доступны следующие параметры
--permission:-
topic— имя топика, к которому нужно выдать права доступа.Если на какие-либо топики не нужны права, их можно отозвать.
-
role— роль пользователя:producer,consumer,adminилиtopic_admin. Подробнее о правах, которые предоставляет каждая роль.Роль
adminдоступна только если выбраны все топики (topic=*). -
allow_host— (опционально) IP-адрес, с которого разрешен доступ этому пользователю. Чтобы задать несколько адресов, добавьте нужное количество опцийallow_hostчерез запятую.
При изменении прав пользователя, существующие права удаляются и заменяются новыми. То есть в команде всегда нужно передавать полный список прав, которые должны быть у пользователя.
Например, чтобы выдать права пользователю
test-userв кластереkafka-cliк топикуtopic2с рольюproducer, при этом сохранить существующий доступ к топикуtopic1, выполните команду:yc managed-kafka user update test-user \ --cluster-name kafka-cli \ --permission topic=topic1,role=consumer \ --permission topic=topic2,role=producerВместе с доступом к топику пользователю также предоставляется доступ к субъектам схем данных. То, какие субъекты доступны, зависит от указанных ролей и топиков. Подробнее читайте в разделе Субъекты в Managed Schema Registry.
-
Чтобы узнать имя кластера, получите список кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
-
Найдите в этом файле ресурс
yandex_mdb_kafka_clusterдля нужного пользователя. -
Добавьте блок
permission:resource "yandex_mdb_kafka_user" "<имя_пользователя>" { ... permission { topic_name = "<топик>" role = "<роль_пользователя>" allow_hosts = [ <список_разрешенных_IP-адресов> ] } }Где:
-
topic_name— имя топика. Укажите:*— чтобы разрешить доступ к любым топикам.- Полное название топика — чтобы разрешить доступ конкретно к нему.
<префикс>*— чтобы выдать доступ к топикам, названия которых начинаются с указанного префикса. Допустим, есть топикиtopic_a1,topic_a2,a3. Если указать значениеtopic*, доступ будет разрешен для топиковtopic_a1иtopic_a2.
-
role— роль пользователя:ACCESS_ROLE_CONSUMER,ACCESS_ROLE_PRODUCER,ACCESS_ROLE_TOPIC_ADMINилиACCESS_ROLE_ADMIN. РольACCESS_ROLE_ADMINдоступна только если выбраны все топики (topicName: "*"). Подробнее о правах, которые предоставляет каждая роль. -
allow_hosts— список IP-адресов, с которых пользователю разрешен доступ к топику.
Вместе с доступом к топику пользователю также предоставляется доступ к субъектам схем данных. Список доступных субъектов зависит от указанных ролей и топиков. Подробнее см. в разделе Субъекты в Managed Schema Registry.
-
Если на какие-либо топики не нужны права, их можно отозвать.
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform.
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение всех операций с кластером Managed Service for Apache Kafka® 60 минутами.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts, например:
resource "yandex_mdb_kafka_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом User.grantPermission и выполните запрос, например, с помощью cURL
:curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-kafka/v1/clusters/<идентификатор_кластера>/users/<имя_пользователя>:grantPermission' \ --data '{ "permission": [ { "topicName": "<имя_топика>", "role": "<роль_пользователя>", "allowHosts": [ <список_IP-адресов> ] } ] }'Где:
permission— новое право на доступ к топику:topicName— имя топика. Чтобы узнать имя, получите список топиков в кластере.role— роль пользователя:ACCESS_ROLE_CONSUMER,ACCESS_ROLE_PRODUCER,ACCESS_ROLE_TOPIC_ADMINилиACCESS_ROLE_ADMIN. РольACCESS_ROLE_ADMINдоступна только если выбраны все топики (topicName: "*"). Подробнее о правах, которые предоставляет каждая роль.allowHosts— (опционально) список IP-адресов, с которых пользователю разрешен доступ к топику.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Вместе с доступом к топику пользователю также предоставляется доступ к субъектам схем данных. То, какие субъекты доступны, зависит от указанных ролей и топиков. Подробнее читайте в разделе Субъекты в Managed Schema Registry.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом UserService/GrantPermission и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/kafka/v1/user_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "user_name": "<имя_пользователя>", "permission": [ { "topic_name": "<имя_топика>", "role": "<роль_пользователя>", "allow_hosts": [ <список_IP-адресов> ] } ] }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.kafka.v1.UserService.GrantPermissionГде:
permission— новое право на доступ к топику:topic_name— имя или шаблон имени топика. Чтобы узнать имя, получите список топиков в кластере. Для указания всех топиков в кластере используйте маску*.role— роль пользователя:ACCESS_ROLE_CONSUMER,ACCESS_ROLE_PRODUCER,ACCESS_ROLE_TOPIC_ADMINилиACCESS_ROLE_ADMIN. РольACCESS_ROLE_ADMINдоступна только если выбраны все топики (topicName: "*"). Подробнее о правах, которые предоставляет каждая роль.allow_hosts— (опционально) список IP-адресов, с которых пользователю разрешен доступ к топику.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Вместе с доступом к топику пользователю также предоставляется доступ к субъектам схем данных. То, какие субъекты доступны, зависит от указанных ролей и топиков. Подробнее читайте в разделе Субъекты в Managed Schema Registry.
Отозвать права у пользователя
Если в кластере отозвать у пользователя-администратора роль ACCESS_ROLE_ADMIN, то будет потеряна возможность управлять топиками. Не отзывайте эту роль или выдайте ее другому пользователю.
- В консоли управления
перейдите в нужный каталог. - В списке сервисов выберите Managed Service for Kafka.
- Выберите кластер.
- Перейдите на вкладку Пользователи.
- Нажмите значок
для нужного пользователя и выберите пункт Настроить. - Найдите нужный топик в списке топиков.
- Удалите роль, которая больше не нужна: нажмите значок
рядом с именем роли. Если нужно отозвать все права на доступ к топику, удалите его из списка: наведите курсор на имя топика и нажмите значок в конце строки.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы отозвать права доступа к нужным топикам, передайте обновленный список параметров --permission:
yc managed-kafka user update <имя_пользователя> \
--cluster-name <имя_кластера> \
--permission topic=<имя_топика>,role=<роль_пользователя>,allow_host=<разрешенный_IP-адрес_1>,allow_host=<разрешенный_IP-адрес_2>,...,allow_host=<разрешенный_IP-адрес_N>
При изменении прав пользователя, существующие права удаляются и заменяются новыми. То есть в команде всегда нужно передавать полный список прав, которые должны быть у пользователя.
Параметр --permission должен содержать хотя бы одну пару топик-роль, где:
topic— имя топика.role— роль пользователя:producer,consumer,adminилиtopic_admin. Подробнее о правах, которые предоставляет каждая роль.allow_host— (опционально) IP-адрес, с которого разрешен доступ этому пользователю. Чтобы задать несколько адресов, добавьте нужное количество опцийallow_hostчерез запятую.
Чтобы узнать имя кластера, получите список кластеров в каталоге.
Чтобы отозвать у пользователя все имеющиеся права доступа, воспользуйтесь консолью или удалите пользователя.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
-
Найдите в этом файле ресурс
yandex_mdb_kafka_userдля нужного пользователя. -
Измените или удалите блок
permission. -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform.
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение всех операций с кластером Managed Service for Apache Kafka® 60 минутами.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts, например:
resource "yandex_mdb_kafka_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом User.revokePermission и выполните запрос, например, с помощью cURL
:curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-kafka/v1/clusters/<идентификатор_кластера>/users/<имя_пользователя>:revokePermission' \ --data '{ "permission": [ { "topicName": "<имя_топика>", "role": "<роль_пользователя>", "allowHosts": [ <список_IP-адресов> ] } ] }'Где:
permission— отзываемое право на доступ к топику:topicName— имя топика. Чтобы узнать имя, получите список топиков в кластере.role— роль пользователя, которую требуется отозвать:ACCESS_ROLE_PRODUCER,ACCESS_ROLE_CONSUMER,ACCESS_ROLE_ADMINилиACCESS_ROLE_TOPIC_ADMIN.allowHosts– (опционально) список IP-адресов, с которых пользователю будет отозван доступ к топику.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом UserService/RevokePermission и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/kafka/v1/user_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "user_name": "<имя_пользователя>", "permission": [ { "topic_name": "<имя_топика>", "role": "<роль_пользователя>", "allow_hosts": [ <список_IP-адресов> ] } ] }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.kafka.v1.UserService.RevokePermissionГде:
permission— отзываемое право на доступ к топику:topic_name— имя или шаблон имени топика. Чтобы узнать имя, получите список топиков в кластере.role— роль пользователя, которую требуется отозвать:ACCESS_ROLE_PRODUCER,ACCESS_ROLE_CONSUMER,ACCESS_ROLE_ADMINилиACCESS_ROLE_TOPIC_ADMIN.allow_hosts— (опционально) список IP-адресов, доступ к топику с которых будет отозван у пользователя.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Импортировать пользователя в Terraform
С помощью импорта вы можете передать существующих в кластере пользователей под управление Terraform.
-
Укажите в конфигурационном файле Terraform пользователя, которого необходимо импортировать:
resource "yandex_mdb_kafka_user" "<имя_пользователя>" {} -
Выполните команду для импорта пользователя:
terraform import yandex_mdb_kafka_user.<имя_пользователя> <идентификатор_кластера>:<имя_пользователя>Подробнее об импорте пользователей см. в документации провайдера Terraform.
Удалить пользователя
Если в кластере удалить пользователя-администратора с ролью ACCESS_ROLE_ADMIN, то будет потеряна возможность управлять топиками. Перед удалением выдайте эту роль другому пользователю.
- В консоли управления
перейдите в нужный каталог. - В списке сервисов выберите Managed Service for Kafka.
- Нажмите на имя нужного кластера и перейдите на вкладку Пользователи.
- Нажмите значок
для нужного пользователя и выберите пункт Удалить. - В открывшемся окне нажмите кнопку Удалить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы удалить пользователя, выполните команду:
yc managed-kafka user delete <имя_пользователя> --cluster-name <имя_кластера>
Чтобы узнать имя кластера, получите список кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
-
Удалите ресурс
yandex_mdb_kafka_userдля нужного пользователя. -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform.
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение всех операций с кластером Managed Service for Apache Kafka® 60 минутами.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts, например:
resource "yandex_mdb_kafka_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом User.delete и выполните запрос, например, с помощью cURL
:curl \ --request DELETE \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://mdb.api.cloud.yandex.net/managed-kafka/v1/clusters/<идентификатор_кластера>/users/<имя_пользователя>'Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом UserService/Delete и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/kafka/v1/user_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "user_name": "<имя_пользователя>" }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.kafka.v1.UserService.DeleteИдентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.