Управление пользователями Apache Kafka®
Пользователи в Apache Kafka®:
-
Разграничивают права доступа производителей и потребителей данных.
Производитель или потребитель получает доступ только к тем топикам, которые разрешены для его пользователя. Вы можете использовать одного и того же пользователя для нескольких производителей или потребителей: первые получат права на запись в определенные топики, а вторые — на чтение.
-
Управляют топиками. Подробнее см. в разделе Топики и разделы.
После создания кластера Apache Kafka® вы можете:
- получить список пользователей в кластере;
- создать пользователя;
- изменить настройки пользователя:
- импортировать пользователя в Terraform;
- удалить пользователя.
Получить список пользователей в кластере
- В консоли управления
перейдите в нужный каталог. - В списке сервисов выберите Managed Service for Kafka.
- Нажмите на имя нужного кластера и перейдите на вкладку Пользователи.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --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. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы создать пользователя:
-
Посмотрите описание команды CLI для создания пользователей:
yc managed-kafka user create --help
-
Создайте пользователя с ролью
producer
для производителя илиconsumer
для потребителя и выдайте права доступа к нужным топикам:yc managed-kafka user create <имя_пользователя> \ --cluster-name <имя_кластера> \ --password <пароль> \ --permission topic=<имя_топика>,role=<роль_пользователя>
Чтобы создать пользователя-администратора для управления топиками в кластере:
-
Посмотрите описание команды CLI для создания пользователя:
yc managed-kafka user create --help
-
Создайте пользователя с ролью
admin
, действующей на все (*
) топики кластера:yc managed-kafka user create <имя_пользователя> \ --cluster-name <имя_кластера> \ --password <пароль> \ --permission topic=*,role=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_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_ADMIN
. РольACCESS_ROLE_ADMIN
доступна только если выбраны все топики (topic_name: "*"
).allow_hosts
– (опционально) список IP-адресов, с которых пользователю разрешен доступ к топику.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Изменить настройки пользователя
-
В консоли управления
перейдите в нужный каталог. -
В списке сервисов выберите Managed Service for Kafka.
-
Нажмите на имя нужного кластера и перейдите на вкладку Пользователи.
-
Нажмите значок
для нужного пользователя и выберите пункт:- Изменить пароль, чтобы указать другой пароль для пользователя.
- Настроить, чтобы выдать или отозвать права доступа к топикам.
-
Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --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_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_ADMIN
. РольACCESS_ROLE_ADMIN
доступна только если выбраны все топики (topic_name: "*"
).allow_hosts
– (опционально) новый список IP-адресов, с которых пользователю разрешен доступ к топику.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
С помощью вызова UserService/Update
вы также можете изменить пароль пользователя, а с помощью методов grantPermission
и revokePermission
— выдать или отозвать права доступа к топику.
Изменить пароль пользователя
- В консоли управления
перейдите в нужный каталог. - В списке сервисов выберите Managed Service for Kafka.
- Нажмите на имя нужного кластера и перейдите на вкладку Пользователи.
- Нажмите значок
для нужного пользователя и выберите пункт Изменить пароль. - Задайте новый пароль и нажмите кнопку Изменить.
Примечание
Длина пароля от 8 до 128 символов.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --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_CONSUMER
иACCESS_ROLE_PRODUCER
одновременно — тогда пользователь будет подходить и производителям, и потребителям.Пользователю также предоставляется доступ к субъектам схем данных. То, какие субъекты доступны, зависит от указанных ролей и топиков. Подробнее читайте в разделе Субъекты в Managed Schema Registry.
-
Чтобы выдать права на другие топики — повторите процедуру.
-
(Опционально) Если права были назначены топику по ошибке — отзовите их.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы выдать права пользователю:
-
Получите список топиков кластера:
yc managed-kafka topic list --cluster-name <имя_кластера>
-
Выдайте права на доступ к нужным топикам, передав параметры
--permission
:yc managed-kafka user update <имя_пользователя> \ --cluster-name <имя_кластера> \ --permission topic=<имя_топика>,role=<роль_пользователя>
Доступны следующие параметры
--permission
:-
topic
— имя топика, к которому нужно выдать права доступа.Если на какие-либо топики не нужны права, их можно отозвать.
-
role
— роль пользователя:producer
,consumer
илиadmin
.Роль
admin
доступна только если выбраны все топики (topic=*
).
При изменении прав пользователя, существующие права удаляются и заменяются новыми. То есть в команде всегда нужно передавать полный список прав, которые должны быть у пользователя.
Например, чтобы выдать права пользователю
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 = "<роль_пользователя>" } }
Где:
-
topic_name
— имя топика. Укажите:*
— чтобы разрешить доступ к любым топикам.- Полное название топика — чтобы разрешить доступ конкретно к нему.
<префикс>*
— чтобы выдать доступ к топикам, названия которых начинаются с указанного префикса. Допустим, есть топикиtopic_a1
,topic_a2
,a3
. Если указать значениеtopic*
, доступ будет разрешен для топиковtopic_a1
иtopic_a2
.
-
role
— роль пользователя:ACCESS_ROLE_CONSUMER
,ACCESS_ROLE_PRODUCER
илиACCESS_ROLE_ADMIN
. РольACCESS_ROLE_ADMIN
доступна только если выбраны все топики (topic_name = "*"
).
Вместе с доступом к топику пользователю также предоставляется доступ к субъектам схем данных. То, какие субъекты доступны, зависит от указанных ролей и топиков. Подробнее читайте в разделе Субъекты в 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_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_ADMIN
. РольACCESS_ROLE_ADMIN
доступна только если выбраны все топики (topic_name = "*"
).allow_hosts
– (опционально) список IP-адресов, с которых пользователю разрешен доступ.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Вместе с доступом к топику пользователю также предоставляется доступ к субъектам схем данных. То, какие субъекты доступны, зависит от указанных ролей и топиков. Подробнее читайте в разделе Субъекты в Managed Schema Registry.
Отозвать права у пользователя
Если в кластере отозвать у пользователя-администратора роль ACCESS_ROLE_ADMIN
, то будет потеряна возможность управлять топиками. Не отзывайте эту роль или выдайте ее другому пользователю.
- В консоли управления
перейдите в нужный каталог. - В списке сервисов выберите Managed Service for Kafka.
- Выберите кластер.
- Перейдите на вкладку Пользователи.
- Нажмите значок
для нужного пользователя и выберите пункт Настроить. - Найдите нужный топик в списке топиков.
- Удалите роль, которая больше не нужна: нажмите значок
рядом с именем роли. Если нужно отозвать все права на доступ к топику, удалите его из списка: наведите курсор на имя топика и нажмите значок в конце строки.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы отозвать права доступа к нужным топикам, передайте обновленный список параметров --permission
:
yc managed-kafka user update <имя_пользователя> \
--cluster-name <имя_кластера> \
--permission topic=<имя_топика>,role=<роль_пользователя>
При изменении прав пользователя, существующие права удаляются и заменяются новыми. То есть в команде всегда нужно передавать полный список прав, которые должны быть у пользователя.
Флаг --permission
должен содержать хотя бы одну пару топик/роль, где:
topic
— имя топика.role
— роль пользователя:producer
,consumer
илиadmin
.
Чтобы узнать имя кластера, получите список кластеров в каталоге.
Чтобы отозвать у пользователя все имеющиеся права доступа, воспользуйтесь консолью или удалите пользователя.
-
Откройте актуальный конфигурационный файл 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_CONSUMER
илиACCESS_ROLE_PRODUCER
.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_CONSUMER
илиACCESS_ROLE_PRODUCER
.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. Вы можете указать другой каталог с помощью параметра --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
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя пользователя — со списком пользователей в кластере.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.