{"queryDurationMs":56,"svcOperation":{"svcOperationId":169,"operation":"modify_user","url":"https://jenkins-master1.adl.nubes.ru/job/cloudServicesDev/job/k8s/job/Kafka/job/modify_user/job/","descr":null,"man":"# Инструкция по управлению пользователями Apache Kafka.
---
## 1. Общая информация
Пользователи в Apache Kafka используются для аутентификации и авторизации при подключении к кластеру.
Платформа позволяет создавать, удалять и изменять пользователей без прямого доступа к брокерам, а также настраивать права доступа к топикам и группам.
Это обеспечивает централизованное и безопасное управление доступом к ресурсам Kafka.
---
## Доступные операции
- **create_user** — Создание пользователя
- **modify_user** — Модификация пользователя
- **delete_user** — Удаление пользователя
---
## 2. Параметры создания пользователя
Ниже перечислены параметры, которые необходимо указать при создании нового пользователя:
* **Имя пользователя**
Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав.
Пример: `username-admin`
* **Топик**
Название топика, к которому будут назначены права для данного пользователя.
Пример: `orders-events`.
Использовать маску нельзя (`orders*`), только полное название или `*`.
* **Операции**
Список разрешённых операций на указанном топике.
Пример: `Describe, Read, Write`
* **Группа**
Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп.
Пример: `order-consumers`.
* **Разрешённые хосты**
Список хостов или подсетей, с которых разрешено подключение пользователя.
Пример: `192.168.1.0/24` или `*`.
---
## 3. Параметры модификации пользователя
Ниже перечислены параметры, которые необходимо указать при модификации пользователя:
* **Имя пользователя**
Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав.
Пример: `username-admin`
* **Топик**
Название топика, к которому будут назначены права для данного пользователя.
Пример: `orders-events`.
Использовать маску нельзя (`orders*`), только полное название или `*`.
* **Операции**
Список разрешённых операций на указанном топике.
Пример: `Describe, Read, Write`
* **Группа**
Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп.
Пример: `order-consumers`.
* **Разрешённые хосты**
Список хостов или подсетей, с которых разрешено подключение пользователя.
Пример: `192.168.1.0/24` или `*`.
---
## 4. Параметры удалении пользователя
Ниже перечислены параметры, которые необходимо указать при удалении пользователя:
* **Имя пользователя**
Имя удаляемого пользователя.
Пример: `username-admin`
## 5. Выходные параметры
После успешного создания пользователя платформа возвращает параметры, необходимые для подключения:
* **ca.crt**
Корневой сертификат (Certificate Authority), используемый для проверки подлинности сервера при TLS-подключении.
Файл содержит публичный ключ удостоверяющего центра, которому доверяют брокеры и клиенты. Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo '<содержание поля>' | base64 -d > <название>.crt
```
* **ca.p12**
PKCS#12-хранилище с корневым сертификатом (Certificate Authority), используемое для проверки подлинности сервера при TLS-подключении.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo '<содержание поля>' | base64 -d > <название>.p12
```
* **ca.password**
Пароль для доступа к хранилищу `ca.p12`. Выдаеться в чистом виде. Раскодировать не нужно.
* **user.crt**
Клиентский сертификат, подтверждающий личность пользователя при подключении к Kafka.
Используется совместно с приватным ключом `user.key` для аутентификации.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo '<содержание поля>' | base64 -d > <название>.crt
```
* **user.key**
Приватный ключ пользователя, применяемый для установления защищённого TLS-соединения и подтверждения подлинности.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo '<содержание поля>' | base64 -d > <название>.key
```
* **user.p12**
PKCS#12-хранилище с клиентским сертификатом и приватным ключом, предназначенное для аутентификации пользователя в Kafka.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo "<содержание поля>" | base64 -d > <название>.p12
```
* **user.password**
Пароль для доступа к хранилищу `user.p12`. Выдаеться в чистом виде. Раскодировать не нужно.
Эти параметры используются для настройки TLS-подключения.
---
## 6. Пример конфигурации клиента внутри кластера
Пример пода:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: kafka-4
spec:
volumes:
- name: work
emptyDir: {}
containers:
- name: kcat
image: quay.io/strimzi/kafka:latest-kafka-4.0.0
command: ["sleep", "5600"]
volumeMounts:
- name: work
mountPath: /work
restartPolicy: Never
```
Создаём под и сохраняем сертификаты:
```bash
kubectl cp user.p12 kafka-4:/work/
kubectl cp ca.p12 kafka-4:/work/
```
Создаём файлы конфигурации:
```bash
cat > /work/user-read.properties <<'EOF'
security.protocol=SSL
ssl.keystore.type=PKCS12
ssl.keystore.location=/work/user.p12
ssl.keystore.password=<user.password>
ssl.truststore.type=PKCS12
ssl.truststore.location=/work/ca.p12
ssl.truststore.password=<ca.password>
EOF
```
```bash
cat > /work/user-write.properties <<'EOF'
security.protocol=SSL
ssl.keystore.type=PKCS12
ssl.keystore.location=/work/user-write.p12
ssl.keystore.password=<user.password>
ssl.truststore.type=PKCS12
ssl.truststore.location=/work/ca.p12
ssl.truststore.password=<ca.password>
EOF
```
Листинг доступных топиков:
```bash
/opt/kafka/bin/kafka-topics.sh \\
--bootstrap-server kafkak8s-bootstrap-external:9093 \\
--command-config /work/user-read.properties \\
--list
```
Запись сообщений:
```bash
/opt/kafka/bin/kafka-console-producer.sh \\
--bootstrap-server <адрес сервис брокера>:9093 \\
--topic <topic> \\
--producer.config /work/user-write.properties
```
Чтение сообщений:
```bash
/opt/kafka/bin/kafka-console-consumer.sh \\
--bootstrap-server <адрес сервис брокера>:9093 \\
--topic <topic> \\
--from-beginning \\
--group <group> \\
--consumer.config /work/user-read.properties \\
--max-messages 50
```
---
## 7. Пример внешнего подключения с использованием **kcat**
**Листинг топиков**
```bash
kcat -b <externalConnect.bootstrap.fqdn>:9093 \\
-L \\
-X security.protocol=SSL \\
-X ssl.ca.location=./ca.crt \\
-X ssl.certificate.location=./user-read.crt \\
-X ssl.key.location=./user-read.key \\
-X ssl.endpoint.identification.algorithm=none
```
**Запись сообщения**
```bash
echo "hello from kcat" | kcat -P \\
-b <externalConnect.bootstrap.fqdn>:9093 \\
-t write-test \\
-X security.protocol=SSL \\
-X ssl.ca.location=./ca.crt \\
-X ssl.certificate.location=./user-write.crt \\
-X ssl.key.location=./user-write.key \\
-X ssl.endpoint.identification.algorithm=none
```
**Чтение сообщений**
```bash
kcat -C \\
-b <externalConnect.bootstrap.fqdn>:9093 \\
-t write-test \\
-o beginning \\
-q \\
-X security.protocol=SSL \\
-X ssl.ca.location=./ca.crt \\
-X ssl.certificate.location=./user-read.crt \\
-X ssl.key.location=./user-read.key \\
-X ssl.endpoint.identification.algorithm=none
```
---
## 9. Рекомендации
* Минимизируйте набор разрешённых операций для повышения безопасности.
* Используйте отдельные учётные записи для продюсеров, консюмеров и системных сервисов.
* Ограничивайте доступ по IP или подсетям с помощью параметра **Разрешённые хосты**.
* После изменения прав или групп пользователя рекомендуется проверить подключение и доступ к топикам.
---","cfsParams":[{"svcOperationCfsParamId":539,"svcOperationCfsParam":"username","label":"Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав","dataType":"string","valueList":null,"refSvcId":null,"isRequired":true,"defaultValue":null,"defaultCompute":null,"func":null,"regex":null,"uniqueScope":null,"maxlength":null,"minlength":null,"maxvalue":null,"minvalue":null,"descr":"Пример: `username-admin`","man":null,"sort":10,"dependsOnCfsParams":null,"isModifiable":null,"isSensitive":false},{"svcOperationCfsParamId":535,"svcOperationCfsParam":"nameTopic","label":"Название топика (topic), к которому будут назначены права для указанного пользователя","dataType":"string","valueList":null,"refSvcId":null,"isRequired":false,"defaultValue":null,"defaultCompute":null,"func":null,"regex":null,"uniqueScope":null,"maxlength":null,"minlength":null,"maxvalue":null,"minvalue":null,"descr":"Пример: `orders-events`. Использовать маску нельзя(`orders*`), только полное название или `*`","man":null,"sort":null,"dependsOnCfsParams":null,"isModifiable":null,"isSensitive":false},{"svcOperationCfsParamId":536,"svcOperationCfsParam":"operations","label":"Список операций, которые разрешены пользователю на топике","dataType":"string","valueList":null,"refSvcId":null,"isRequired":false,"defaultValue":null,"defaultCompute":null,"func":null,"regex":null,"uniqueScope":null,"maxlength":null,"minlength":null,"maxvalue":null,"minvalue":null,"descr":"Пример: `Create, Describe, Read, Write`","man":null,"sort":null,"dependsOnCfsParams":null,"isModifiable":null,"isSensitive":false},{"svcOperationCfsParamId":537,"svcOperationCfsParam":"group","label":"Группа, которым разрешён доступ","dataType":"string","valueList":null,"refSvcId":null,"isRequired":false,"defaultValue":null,"defaultCompute":null,"func":null,"regex":null,"uniqueScope":null,"maxlength":null,"minlength":null,"maxvalue":null,"minvalue":null,"descr":"Пример: `order-consumers` или `*`","man":null,"sort":null,"dependsOnCfsParams":null,"isModifiable":null,"isSensitive":false},{"svcOperationCfsParamId":538,"svcOperationCfsParam":"accessHosts","label":"Список хостов, с которых разрешено подключение к Kafka","dataType":"string","valueList":null,"refSvcId":null,"isRequired":false,"defaultValue":null,"defaultCompute":null,"func":null,"regex":null,"uniqueScope":null,"maxlength":null,"minlength":null,"maxvalue":null,"minvalue":null,"descr":"Пример: `192.168.1.0/24` или `*`","man":null,"sort":null,"dependsOnCfsParams":null,"isModifiable":null,"isSensitive":false}]},"runDurationMs":56}