Квоты Kafka являются неотъемлемой частью многопользовательских кластеров Kafka. Они предотвращают негативное влияние на производительность кластера Kafka плохо работающих приложений, чрезмерно потребляющих ресурсы кластера. Кроме того, они позволяют центральной платформе потоковых данных работать как многопользовательской платформе и использоваться нижестоящими и вышестоящими приложениями в нескольких бизнес-направлениях. Kafka поддерживает два типа квот: квоты пропускной способности сети и запрашивать квоты скорости. Квоты пропускной способности сети определяют пороговые значения скорости передачи данных, например, сколько данных клиентские приложения могут производить и потреблять от каждого отдельного брокера в кластере Kafka, измеряемое в байтах в секунду. Квоты на количество запросов ограничивают процент времени, который каждый отдельный брокер тратит на обработку запросов клиентских приложений. В зависимости от вашей конфигурации квоты Kafka могут быть установлены для определенных пользователей, определенных идентификаторов клиентов или для того и другого.
In Часть 1 этой серии, состоящей из двух частей, мы обсудили концепции того, как применять квоты Кафки в Amazon Managed Streaming для Apache Kafka (Amazon MSK) при использовании Управление идентификацией и доступом AWS (IAM) контроль доступа.
В этом посте мы проведем вас через пошаговую реализацию настройки квот Kafka в кластере MSK при использовании контроля доступа IAM и их тестировании с помощью примеров клиентских приложений.
Обзор решения
Следующий рисунок, который мы впервые представили в Часть 1, иллюстрирует, как клиентские приложения Kafka (ProducerApp-1
, ConsumerApp-1
и ConsumerApp-2
) доступ Topic-B
в кластере MSK, взяв на себя роли записи и чтения IAM. Каждое клиентское приложение-производитель и потребитель имеет квоту, которая определяет, сколько данных они могут создавать или потреблять в байтах в секунду. ProducerApp-1
quota позволяет производить до 1024 байт/сек на брокера. Точно так же ConsumerApp-1
и ConsumerApp-2
квоты позволяют им потреблять 5120 и 1024 байта в секунду на брокера соответственно. Ниже приводится краткое объяснение потока, показанного на диаграмме архитектуры:
- P1 –
ProducerApp-1
(через егоProducerApp-1-Role
роль IAM) берет на себяTopic-B-Write-Role
Роль IAM для отправки сообщенийTopic-B
- P2 - с
Topic-B-Write-Role
Предполагается роль IAM,ProducerApp-1
начинает отправлять сообщения наTopic-B
- C1 –
ConsumerApp-1
(через егоConsumerApp-1-Role
роль IAM) иConsumerApp-2
(через егоConsumerApp-2-Role
роль IAM) взять на себяTopic-B-Read-Role
Роль IAM для чтения сообщений отTopic-B
- C2 - с
Topic-B-Read-Role
Предполагается роль IAM,ConsumerApp-1
иConsumerApp-2
начать получать сообщения отTopic-B
Обратите внимание, что в этом посте используется Интерфейс командной строки AWS (интерфейс командной строки AWS), AWS CloudFormation шаблоны, и Консоль управления AWS за предоставление и изменение ресурсов AWS, а за предоставленные ресурсы будет выставлен счет вашей учетной записи AWS.
Шаги высокого уровня следующие:
- Подготовьте кластер MSK с контролем доступа IAM и Эластичное вычислительное облако Amazon (Amazon EC2) для клиентских приложений.
- Создавай
Topic-B
на кластере МСК. - Создайте роли IAM для доступа клиентских приложений.
Topic-B
. - Запускайте приложения производителя и потребителя без установки квот.
- Настройте квоты производства и потребления для клиентских приложений.
- Перезапустите приложения после установки квот.
Предпосылки
Рекомендуется прочитать Часть 1 этой серии, прежде чем продолжить. Для того, чтобы начать, вам необходимо следующее:
- Учетная запись AWS, которая в этом посте будет называться демонстрационной учетной записью, при условии, что ее идентификатор учетной записи
1111 1111 1111
- Разрешения на создание, удаление и изменение ресурсов AWS в демо-аккаунте
Подготовьте кластер MSK с контролем доступа IAM и экземплярами EC2.
Этот шаг включает подготовку кластера MSK с контролем доступа IAM в облаке VPC в демо-аккаунте. Кроме того, мы создаем четыре экземпляра EC2 для внесения изменений в конфигурацию кластера MSK и клиентских приложений хост-производителя и потребителя.
Развертывание стека CloudFormation
- Клонировать Репозиторий GitHub чтобы загрузить файлы шаблонов CloudFormation и образцы клиентских приложений:
- В консоли AWS CloudFormation выберите Стеки в навигационной панели.
- Выберите Создать стек.
- Что касается Подготовить шаблон, наведите на Шаблон готов.
- Что касается Источник шаблона, наведите на Загрузить файл шаблона.
- Загрузить
cfn-msk-stack-1.yaml
файл изamazon-msk-kafka-quotas/cfn-templates
каталог, затем выберите Следующая. - Что касается Название стека, войти
MSKStack
. - Оставьте параметры по умолчанию и выберите Следующая.
- Прокрутите вниз Настроить параметры стека страницу и выберите Следующая для продолжения.
- Прокрутите вниз Обзор страницу, установите флажок Я признаю, что CloudFormation может создавать ресурсы IAM, и выберите Отправить.
Для завершения стека потребуется около 30 минут. После успешного создания стека будут созданы следующие ресурсы:
- VPC с тремя частными подсетями и одной общедоступной подсетью.
- Кластер MSK с тремя брокерами с включенным контролем доступа IAM
- Экземпляр EC2 под названием
MSKAdminInstance
для изменения настроек кластера MSK, а также для создания и изменения ресурсов AWS - экземпляры EC2 для
ProducerApp-1
,ConsumerApp-1
иConsumerApp-2
, по одному на каждое клиентское приложение - Отдельная роль IAM для каждого экземпляра EC2, на котором размещено клиентское приложение, как показано на диаграмме архитектуры.
- Из стека Выходы вкладка, обратите внимание на
MSKClusterArn
значения.
Создайте тему на кластере MSK
Создавать Topic-B
в кластере MSK выполните следующие действия:
- В консоли Amazon EC2 перейдите к списку запущенных инстансов EC2.
- Выберите
MSKAdminInstance
экземпляр EC2 и выберите Свяжитесь. - На Диспетчер сеансов , выберите Свяжитесь.
- Выполните следующие команды на новой вкладке, которая откроется в вашем браузере:
- Установите переменную среды так, чтобы она указывала на конечную точку IAM брокеров кластера MSK:
- Обратите внимание на значение
BOOTSTRAP_BROKERS_IAM
. - Запустите следующую команду CLI Kafka, чтобы создать
Topic-B
на кластере МСК:
Поскольку кластер MSK снабжен управлением доступом IAM, параметр --command-config
указывает на config_iam.properties
, который содержит свойства, необходимые для управления доступом к IAM, созданные MSKStack
Стек CloudFormation.
При выполнении команд Kafka CLI могут появляться следующие предупреждения, но вы можете их игнорировать:
- Чтобы убедиться, что
Topic-B
создано, перечислите все темы:
Создайте роли IAM для клиентских приложений для доступа к теме B.
Этот шаг включает в себя создание Topic-B-Write-Role
и Topic-B-Read-Role
как показано на схеме архитектуры. Topic-B-Write-Role
разрешает операции записи на Topic-B
, и можно предположить по ProducerApp-1
. Аналогичным образом, ConsumerApp-1
и ConsumerApp-2
могу предположить Topic-B-Read-Role
выполнять операции чтения на Topic-B
. Для выполнения операций чтения на Topic-B
, ConsumerApp-1
и ConsumerApp-2
также должны принадлежать к группам потребителей, указанным во время MSKStack
обновление стека на следующем шаге.
Создайте роли, выполнив следующие действия:
- В консоли AWS CloudFormation выберите Стеки в навигационной панели.
- Выберите
MSKStack
, а затем выбрать Обновление ПО. - Что касается Подготовить шаблон, выберите Заменить текущий шаблон.
- Что касается Источник шаблона, наведите на Загрузить файл шаблона.
- Загрузить
cfn-msk-stack-2.yaml
файл изamazon-msk-kafka-quotas/cfn-templates
каталог, затем выберите Следующая. - Укажите следующие дополнительные параметры стека:
-
- Что касается Тема Б АРН, введите
Topic-B
АРН.
- Что касается Тема Б АРН, введите
ARN должен быть отформатирован как arn:aws:kafka:region:account-id:topic/msk-cluster-name/msk-cluster-uuid/Topic-B
. Используйте имя кластера и UUID кластера из ARN кластера MSK, который вы указали ранее, и укажите свой регион AWS. Для получения дополнительной информации см. Контроль доступа IAM для Amazon MSK.
-
- Что касается Название потребительской группы ConsumerApp-1, войти
ConsumerApp-1
группа потребителей АРН.
- Что касается Название потребительской группы ConsumerApp-1, войти
Он должен быть отформатирован как arn:aws:kafka:region:account-id:group/msk-cluster-name/msk-cluster-uuid/consumer-group-name
-
- Что касается Название потребительской группы ConsumerApp-2, войти
ConsumerApp-2
группа потребителей АРН.
- Что касается Название потребительской группы ConsumerApp-2, войти
Используйте тот же формат, что и предыдущий ARN.
- Выберите Следующая для продолжения.
- Прокрутите вниз Настроить стек страницу параметров и выберите Следующая для продолжения.
- Прокрутите вниз Обзор страницу, установите флажок Я признаю, что CloudFormation может создавать ресурсы IAM, и выберите Обновить стек.
Обновление стека займет около 3 минут. После успешного обновления стека будут созданы следующие ресурсы:
- Тема-B-Написать-Роль – Роль IAM с разрешением на выполнение операций записи на
Topic-B
. Его политика доверия позволяетProducerApp-1-Role
роль IAM, чтобы взять на себя это. - Тема-B-Чтение-Роль – Роль IAM с разрешением на выполнение операций чтения
Topic-B
. Его политика доверия позволяетConsumerApp-1-Role
иConsumerApp-2-Role
роли IAM, чтобы взять на себя это. Более того,ConsumerApp-1
иConsumerApp-2
также должны принадлежать к группам потребителей, которые вы указали при обновлении стека, чтобы выполнять операции чтения наTopic-B
.
- Из стека Выходы вкладка, обратите внимание на
TopicBReadRoleARN
иTopicBWriteRoleARN
значения.
Запуск приложений производителя и потребителя без установки квот
Здесь мы бежим ProducerApp-1
, ConsumerApp-1
и ConsumerApp-2
не устанавливая свои квоты. Из предыдущих шагов вам понадобится BOOTSTRAP_BROKERS_IAM
стоимость, Topic-B-Write-Role
АРН и Topic-B-Read-Role
АРН. Исходный код клиентских приложений и их упакованные версии доступны в Репозиторий GitHub.
Запустите приложение ConsumerApp-1.
Чтобы запустить ConsumerApp-1
приложение, выполните следующие действия:
- В консоли Amazon EC2 выберите
ConsumerApp-1
экземпляр EC2 и выберите Свяжитесь. - На Диспетчер сеансов , выберите Свяжитесь.
- Выполните следующие команды на новой вкладке, которая откроется в вашем браузере:
- Запустите
ConsumerApp-1
приложение, чтобы начать потреблять сообщения отTopic-B
:
Вы можете найти исходный код на GitHub для справки. Детали параметра командной строки следующие:
- --bootstrap-серверы – Конечная точка IAM брокеров начальной загрузки кластера MSK.
- –принять-роль-арн –
Topic-B-Read-Role
Роль IAM ARN. Взяв на себя эту роль,ConsumerApp-1
будут читать сообщения из темы. - -область – Регион, который вы используете.
- –название-темы – Название темы, из которой
ConsumerApp-1
будут читать сообщения. По умолчаниюTopic-B
. - –группа потребителей – Название группы потребителей для
ConsumerApp-1
, как указано во время обновления стека. - –роль-имя-сеанса –
ConsumerApp-1
предполагаетTopic-B-Read-Role
используя Сервис токенов безопасности AWS (AWS STS) SDK.ConsumerApp-1
будет использовать это имя сеанса роли при вызовеassumeRole
функции. - -ID клиента – идентификатор клиента для
ConsumerApp-1
. - –print-consumer-quota-метрики – Флаг, указывающий, следует ли распечатывать клиентские метрики на терминале
ConsumerApp-1
. - –cw-имя-измерения – Amazon CloudWatch имя измерения, которое будет использоваться для публикации метрик регулирования клиента из
ConsumerApp-1
. - –cw-значение-размера – Значение измерения CloudWatch, которое будет использоваться для публикации метрик регулирования клиента из
ConsumerApp-1
. - –cw-пространство имен – пространство имен, где
ConsumerApp-1
будет публиковать метрики CloudWatch для мониторинга регулирования.
- Если вас устраивают остальные параметры, используйте следующую команду и измените
--assume-role-arn
и--region
согласно вашей среде:
Ассоциация fetch-throttle-time-avg
и fetch-throttle-time-max
метрики клиента должны отображать 0.0, указывая на отсутствие регулирования для ConsumerApp-1
. Помните, что мы не установили квоту потребления для ConsumerApp-1
еще. Пусть поработает какое-то время.
Запустите приложение ConsumerApp-2.
Чтобы запустить ConsumerApp-2
приложение, выполните следующие действия:
- В консоли Amazon EC2 выберите
ConsumerApp-2
экземпляр EC2 и выберите Свяжитесь. - На Диспетчер сеансов , выберите Свяжитесь.
- Выполните следующие команды на новой вкладке, которая откроется в вашем браузере:
- Запустите
ConsumerApp-2
приложение, чтобы начать потреблять сообщения отTopic-B
:
Код имеет аналогичные параметры командной строки, как ConsumerApp-1
обсуждалось ранее, за исключением следующего:
- –группа потребителей – Название группы потребителей для
ConsumerApp-2
, как указано во время обновления стека. - –роль-имя-сеанса –
ConsumerApp-2
предполагаетTopic-B-Read-Role
с помощью SDK AWS STS.ConsumerApp-2
будет использовать это имя сеанса роли при вызовеassumeRole
функции. - -ID клиента – идентификатор клиента для
ConsumerApp-2
.
- Если вас устраивают остальные параметры, используйте следующую команду и измените
--assume-role-arn
и--region
согласно вашей среде:
Ассоциация fetch-throttle-time-avg
и fetch-throttle-time-max
метрики клиента должны отображать 0.0, указывая на отсутствие регулирования для ConsumerApp-2
. Помните, что мы не установили квоту потребления для ConsumerApp-2
еще. Пусть поработает какое-то время.
Запустите приложение ProducerApp-1.
Чтобы запустить ProducerApp-1
приложение, выполните следующие действия:
- В консоли Amazon EC2 выберите
ProducerApp-1
экземпляр EC2 и выберите Свяжитесь. - На Диспетчер сеансов , выберите Свяжитесь.
- Выполните следующие команды на новой вкладке, которая откроется в вашем браузере:
- Запустите
ProducerApp-1
приложение, чтобы начать отправлять сообщения наTopic-B
:
Вы можете найти исходный код на GitHub для справки. Детали параметра командной строки следующие:
- --bootstrap-серверы – Конечная точка IAM брокеров начальной загрузки кластера MSK.
- –принять-роль-арн –
Topic-B-Write-Role
Роль IAM ARN. Взяв на себя эту роль,ProducerApp-1
будут писать сообщения в тему. - –название-темы –
ProducerApp-1
будут отправлять сообщения в эту тему. По умолчаниюTopic-B
. - -область – Регион AWS, который вы используете.
- –количество сообщений – Количество сообщений
ProducerApp-1
заявка будет отправлена в тему. - –роль-имя-сеанса –
ProducerApp-1
предполагаетTopic-B-Write-Role
с помощью SDK AWS STS.ProducerApp-1
будет использовать это имя сеанса роли при вызовеassumeRole
функции. - -ID клиента – идентификатор клиента
ProducerApp-1
. - – тип производителя –
ProducerApp-1
можно запустить либо синхронно or асинхронно. Варианты синхронизировать or асинхронной. - --print-producer-quota-метрики – Флаг, указывающий, должны ли клиентские метрики распечатываться на терминале ПроизводительApp-1.
- –cw-имя-измерения – Имя измерения CloudWatch, которое будет использоваться для публикации метрик регулирования клиента из ПроизводительApp-1.
- –cw-значение-размера – Значение измерения CloudWatch, которое будет использоваться для публикации метрик регулирования клиента из ПроизводительApp-1.
- –cw-пространство имен – Пространство имен, где ПроизводительApp-1 будет публиковать метрики CloudWatch для мониторинга регулирования.
- Если вас устраивают остальные параметры, используйте следующую команду и измените
--assume-role-arn
и--region
согласно вашей среде. Для запуска синхронного производителя Kafka используется опция--producer-type sync
:
В качестве альтернативы используйте --producer-type async
для запуска асинхронного производителя. Для получения более подробной информации см. Асинхронная отправка.
Ассоциация produce-throttle-time-avg
и produce-throttle-time-max
метрики клиента должны отображать 0.0, указывая на отсутствие регулирования для ProducerApp-1
. Помните, что мы не установили квоту на производство для ProducerApp-1
еще. Проверь это ConsumerApp-1
и ConsumerApp-2
может потреблять сообщения и замечать, что они не регулируются. Остановите клиентские приложения потребителя и производителя, нажав Ctrl + C на соответствующих вкладках браузера.
Установка квот на производство и потребление для клиентских приложений
Теперь, когда мы запустили приложения производителя и потребителя без квот, мы устанавливаем их квоты и перезапускаем их.
Откройте приложение Менеджер сессий терминал для MSKAdminInstance
EC2, как описано ранее, и выполните следующие команды, чтобы найти конфигурацию по умолчанию одного из брокеров в кластере MSK. Кластеры MSK предоставляются с конфигурацией квот Kafka по умолчанию.
Следующий скриншот показывает Broker-1
значения по умолчанию для quota.consumer.default
и quota.producer.default
.
Конфигурация квоты ProducerApp-1
Замените заполнители во всех командах в этом разделе значениями, соответствующими вашей учетной записи.
В соответствии с архитектурной диаграммой, рассмотренной ранее, установите ProducerApp-1
выдавать квоту до 1024 байт/сек. Для <ProducerApp-1 Client Id>
и <ProducerApp-1 Role Session>
, убедитесь, что вы используете те же значения, которые вы использовали при запуске ProducerApp-1
ранее (producerapp-1-client-id
и producerapp-1-role-session
соответственно):
Проверить ProducerApp-1
создайте квоту, используя следующую команду:
Вы можете удалить ProducerApp-1
создать квоту с помощью следующей команды, но не запускать команду так как мы проверим квоты дальше.
Конфигурация квоты ConsumerApp-1
Замените заполнители во всех командах в этом разделе значениями, соответствующими вашей учетной записи.
Давайте установим квоту потребления 5120 байт/сек для ConsumerApp-1
. Для <ConsumerApp-1 Client Id>
и <ConsumerApp-1 Role Session>
, убедитесь, что вы используете те же значения, которые вы использовали при запуске ConsumerApp-1
ранее (consumerapp-1-client-id
и consumerapp-1-role-session
соответственно):
kafka-configs.sh --bootstrap-server $BOOTSTRAP_BROKERS_IAM --command-config config_iam.properties --alter --add-config 'consumer_byte_rate=5120' --entity-type clients --entity-name <ConsumerApp-1 Client Id> --entity-type users --entity-name arn:aws:sts::<AWS Account Id>:assumed-role/MSKStack-TopicBReadRole-xxxxxxxxxxx/<ConsumerApp-1 Role Session>
Проверить ConsumerApp-1
использовать квоту с помощью следующей команды:
Вы можете удалить ConsumerApp-1
использовать квоту, используя следующую команду, но не запускать команду так как мы проверим квоты дальше.
Конфигурация квоты ConsumerApp-2
Замените заполнители во всех командах в этом разделе значениями, соответствующими вашей учетной записи.
Давайте установим квоту потребления 1024 байт/сек для ConsumerApp-2
. Для <ConsumerApp-2 Client Id>
и <ConsumerApp-2 Role Session>
, убедитесь, что вы используете те же значения, которые вы использовали при запуске ConsumerApp-2
ранее (consumerapp-2-client-id
и consumerapp-2-role-session
соответственно):
Проверить ConsumerApp-2
использовать квоту с помощью следующей команды:
Как и в случае ConsumerApp-1
, вы можете удалить ConsumerApp-2
использовать квоту, используя ту же команду с ConsumerApp-2
сведения о клиенте и пользователе.
Перезапустите приложения-производители и потребители после установки квот.
Давайте перезапустим приложения, чтобы проверить действие квот.
Повторный запуск ProducerApp-1
повторный показ ProducerApp-1
in синхронный режиме с той же командой, которую вы использовали ранее. На следующем снимке экрана показано, что когда ProducerApp-1
достигает своей квоты на любом из брокеров, produce-throttle-time-avg
и produce-throttle-time-max client
значение метрики будет выше 0.0. Значение выше 0.0 означает, что ProducerApp-1
задушен. Позволять ProducerApp-1
запустить на несколько секунд, а затем остановить его с помощью Ctrl + C.
Вы также можете проверить действие квоты производства, повторно запустив ProducerApp-1
снова в асинхронный Режим (--producer-type async
). Подобно синхронному запуску, на следующем снимке экрана показано, что когда ProducerApp-1
достигает своей квоты на любом из брокеров, produce-throttle-time-avg
и produce-throttle-time-max
значение метрики клиента будет выше 0.0. Значение выше 0.0 означает, что ProducerApp-1
задушен. Разрешить асинхронный ProducerApp-1
побегать какое-то время.
В конце концов вы увидите TimeoutException
заявив, org.apache.kafka.common.errors.TimeoutException: Expiring xxxxx record(s) for Topic-B-2:xxxxxxx ms has passed since batch creation
При использовании асинхронный производитель и отправка сообщений со скоростью, превышающей скорость, которую брокер может принять из-за квоты, сообщения будут сначала поставлены в очередь в памяти клиентского приложения. В конечном итоге у клиента закончится место в буфере, если скорость отправки сообщений будет продолжать превышать скорость приема сообщений, что приведет к следующей Producer.send()
вызов заблокировать. Producer.send()
в конце концов бросит TimeoutException
если задержка тайм-аута недостаточна для того, чтобы позволить брокеру догнать приложение-производитель. Останавливаться ProducerApp-1
с помощью Ctrl + C.
Повторно запустите ConsumerApp-1
повторный показ ConsumerApp-1
с той же командой, которую вы использовали ранее. На следующем снимке экрана показано, что когда ConsumerApp-1
достигает своей квоты, fetch-throttle-time-avg
и fetch-throttle-time-max client
значение метрики будет выше 0.0. Значение выше 0.0 означает, что ConsumerApp-1
задушен.
Разрешить ConsumerApp-1
запустить на несколько секунд, а затем остановить его с помощью Ctrl + C.
Повторно запустите ConsumerApp-2
повторный показ ConsumerApp-2
с той же командой, которую вы использовали ранее. Точно так же, когда ConsumerApp-2
достигает своей квоты, fetch-throttle-time-avg
и fetch-throttle-time-max client
значение показателя будет выше 0.0. Значение выше 0.0 указывает, что ConsumerApp-2
задушен. Позволять ConsumerApp-2
для запуска в течение нескольких секунд, а затем остановить его, нажав Ctrl + C.
Показатели клиентских квот в Amazon CloudWatch
In Часть 1, мы объяснили, что клиентские метрики — это метрики, предоставляемые клиентами, подключающимися к кластерам Kafka. Давайте рассмотрим клиентские метрики в CloudWatch.
- В консоли CloudWatch выберите Все показатели.
- Под Пользовательские пространства имен, выберите пространство имен, которое вы указали при запуске клиентских приложений.
- Выберите имя измерения и выберите
produce-throttle-time-max
,produce-throttle-time-avg
,fetch-throttle-time-max
иfetch-throttle-time-avg metrics
для всех приложений.
Эти показатели указывают на поведение регулирования для ProducerApp-1
, ConsumerApp-1
и ConsumerApp-2
приложения, протестированные с конфигурациями квот, описанными в предыдущем разделе. На следующих снимках экрана показано дросселирование ProducerApp-1
, ConsumerApp-1
и ConsumerApp-2
на основе квот пропускной способности сети. ProducerApp-1
, ConsumerApp-1
и ConsumerApp-2
приложения передают свои соответствующие клиентские метрики в CloudWatch. Вы можете найти исходный код на GitHub для справки.
Безопасный идентификатор клиента и имя сеанса роли
Мы обсудили, как настроить квоты Kafka с помощью ID клиента и аутентифицированный пользователь главный. Когда клиентское приложение принимает роль IAM для доступа к темам Kafka в кластере MSK с включенной аутентификацией IAM, его аутентифицированный пользователь принципал представлен в следующем формате (дополнительную информацию см. IAM-идентификаторы):
arn:aws:sts::111111111111:assumed-role/Topic-B-Write-Role/producerapp-1-role-session
Он содержит имя сеанса роли (в этом случае, producerapp-1-role-session
) используется в клиентском приложении при принятии роли IAM через SDK AWS STS. Клиентское приложение исходный код доступен для справки. ID клиента является логической строкой имени (например, producerapp-1-client-id
), который настраивается в коде приложения командой приложения. Таким образом, приложение может олицетворять другое приложение, если оно получает ID клиента и имя сеанса роли другого приложения и имеет ли оно разрешение на использование той же роли IAM.
Как показано на схеме архитектуры, ConsumerApp-1
и ConsumerApp-2
два отдельных клиентских приложения с соответствующими квотами. Поскольку у обоих есть разрешение на использование одной и той же роли IAM (Topic-B-Read-Role
) в демо-счете им разрешено получать сообщения от Topic-B
. Таким образом, кластерные брокеры MSK различают их по идентификаторы клиентов и пользователей (которые содержат соответствующие имя сеанса роли ценности). Если ConsumerApp-2
каким-то образом получает ConsumerApp-1
имя сеанса роли и ID клиента, он может олицетворять ConsumerApp-1
указав ConsumerApp-1
имя сеанса роли и ID клиента в коде приложения.
Предположим ConsumerApp-1
использования consumerapp-1-client-id
и consumerapp-1-role-session
как его ID клиента и имя сеанса роли, соответственно. Следовательно, ConsumerApp-1's
подлинности пользователь принцип будет выглядеть следующим образом, когда он принимает Topic-B-Read-Role
Роль ИАМ:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Кроме того, ConsumerApp-2
использования consumerapp-2-client-id
и consumerapp-2-role-session
как его ID клиента и имя сеанса роли, соответственно. Следовательно, ConsumerApp-2's
подлинности пользователь принцип будет выглядеть следующим образом, когда он принимает Topic-B-Read-Role
Роль ИАМ:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-2-role-session
If ConsumerApp-2
Получает ConsumerApp-1's
ID клиента и имя сеанса роли и указывает их в своем коде приложения, брокеры кластера MSK будут рассматривать его как ConsumerApp-1
и просмотреть его ID клиента as consumerapp-1-client-id
, и аутентифицированный пользователь основной следующим образом:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
Это позволяет ConsumerApp-2
потреблять данные из кластера MSK с максимальной скоростью 5120 байт в секунду, а не 1024 байта в секунду в соответствии с исходной квотой. Следовательно, ConsumerApp-1's
пропускная способность отрицательно повлияет, если ConsumerApp-2
работает одновременно.
Усовершенствованная архитектура
Вы можете представить Менеджер секретов AWS и Служба управления ключами AWS (AWS KMS) в архитектуре для защиты приложений. идентификаторы клиентов и имена сеансов роли. Чтобы обеспечить более надежное управление, идентификатор клиента приложения и имя сеанса роли должны храниться в виде зашифрованных секретов в диспетчере секретов. Политики ресурсов IAM, связанные с зашифрованными секретами и ключом, управляемым клиентом (CMK) KMS, позволят приложениям получать доступ и расшифровывать только их соответствующий идентификатор клиента и имя сеанса роли. Таким образом, приложения не смогут получить доступ к идентификатору клиента и имени сеанса роли друг друга и олицетворять друг друга. На следующем изображении показана улучшенная архитектура.
Обновленный поток имеет следующие этапы:
- P1 –
ProducerApp-1
получает своеclient-id
иrole-session-name
секреты от менеджера секретов - P2 –
ProducerApp-1
настраивает секретclient-id
asCLIENT_ID_CONFIG
в коде приложения и предполагаетTopic-B-Write-Role
(через егоProducerApp-1-Role
роль IAM), передав секретrole-session-name
в SDK AWS STSassumeRole
вызов функции - P3 - с
Topic-B-Write-Role
Предполагается роль IAM,ProducerApp-1
начинает отправлять сообщения наTopic-B
- C1 –
ConsumerApp-1
иConsumerApp-2
получить соответствующиеclient-id
иrole-session-name
секреты от менеджера секретов - C2 –
ConsumerApp-1
иConsumerApp-2
настроить их соответствующий секретclient-id
asCLIENT_ID_CONFIG
в своем коде приложения и предположим,Topic-B-Write-Role
(черезConsumerApp-1-Role
иConsumerApp-2-Role
роли IAM соответственно), передав их секретrole-session-name
в SDK AWS STSassumeRole
вызов функции - C3 - с
Topic-B-Read-Role
Предполагается роль IAM,ConsumerApp-1
иConsumerApp-2
начать получать сообщения отTopic-B
Обратитесь к документации для Менеджер секретов AWS и АМС КМС чтобы лучше понять, как они вписываются в архитектуру.
Очистить ресурсы
Перейдите в консоль CloudFormation и удалите MSKStack
куча. Все ресурсы, созданные во время этого поста, будут удалены.
Заключение
В этом посте мы подробно рассмотрели шаги по настройке квот Amazon MSK и продемонстрировали их действие на примерах клиентских приложений. Кроме того, мы обсудили, как можно использовать клиентские метрики, чтобы определить, регулируется ли клиентское приложение. Мы также выявили потенциальную проблему с идентификаторами клиентов в виде открытого текста и именами сеансов ролей. Мы рекомендуем реализовать квоты Kafka с Amazon MSK, используя Secrets Manager и AWS KMS, в соответствии с пересмотренной схемой архитектуры, чтобы обеспечить архитектуру с нулевым доверием.
Если у вас есть отзывы или вопросы по этому сообщению, включая пересмотренную архитектуру, мы будем рады услышать от вас. Мы надеемся, что вам понравилось читать этот пост.
Об авторе
Викас Баджай является старшим менеджером архитекторов решений финансовых услуг в Amazon Web Services. Обладая более чем двадцатилетним опытом работы в сфере финансовых услуг и работы с цифровыми компаниями, он консультирует клиентов по вопросам дизайна продуктов, технологических планов и архитектур приложений.
- SEO-контент и PR-распределение. Получите усиление сегодня.
- ЭВМ Финанс. Единый интерфейс для децентрализованных финансов. Доступ здесь.
- Квантум Медиа Групп. ИК/PR усиление. Доступ здесь.
- ПлатонАйСтрим. Анализ данных Web3. Расширение знаний. Доступ здесь.
- Источник: https://aws.amazon.com/blogs/big-data/multi-tenancy-apache-kafka-clusters-in-amazon-msk-with-iam-access-control-and-kafka-quotas-part-2/
- :имеет
- :является
- :нет
- :куда
- $UP
- 1
- 10
- 11
- 30
- 7
- 70
- 8
- 9
- a
- в состоянии
- О нас
- выше
- Принять
- принимающий
- доступ
- Учетная запись
- признавать
- через
- Добавить
- дополнение
- дополнительный
- Дополнительно
- После
- снова
- Все
- распределение
- ассигнования
- позволять
- позволяет
- причислены
- Amazon
- Amazon EC2
- Amazon Web Services
- an
- и
- Другой
- любой
- апаш
- Апач Кафка
- появиться
- Применение
- Приложения
- примерно
- архитектура
- МЫ
- AS
- связанный
- предполагается,
- At
- подлинности
- Аутентификация
- доступен
- AWS
- AWS CloudFormation
- Пропускная способность
- основанный
- BE
- , так как:
- было
- до
- не являетесь
- Лучшая
- заблокировал
- Начальная загрузка
- изоферменты печени
- Дно
- Коробка
- брокер
- Брокеры
- браузер
- буфер
- бизнес
- бизнес
- но
- by
- призывают
- под названием
- вызова
- CAN
- случаев
- КПП
- Привлекайте
- Причинение
- CD
- центральный
- изменение
- изменения
- проверка
- Выберите
- класс
- клиент
- клиентов
- Кластер
- код
- Общий
- полный
- Вычисление
- понятия
- Конфигурация
- настроить
- Соединительный
- вследствие этого
- Консоли
- потреблять
- потребитель
- содержит
- продолжать
- продолжается
- продолжающийся
- контроль
- покрытый
- Создайте
- создали
- Создающий
- Текущий
- клиент
- Клиенты
- данным
- Платформа данных
- десятилетия
- Decrypt
- По умолчанию
- задерживать
- Демо
- убивают
- в зависимости
- описывать
- описано
- Проект
- подробный
- подробнее
- Определять
- определяет
- Размеры
- обсуждается
- Дисплей
- выделить
- документации
- скачать
- два
- в течение
- каждый
- Ранее
- эхо
- эффект
- или
- включить
- включен
- позволяет
- зашифрованный
- Конечная точка
- обеспечивать соблюдение
- расширение
- обеспечивать
- Enter
- Окружающая среда
- ошибки
- Эфир (ETH)
- со временем
- исследовать
- пример
- превышать
- Кроме
- опыт
- объяснены
- объяснение
- экспорт
- подвергаться
- Обратная связь
- несколько
- фигура
- Файл
- Файлы
- финансовый
- финансовые услуги
- Найдите
- Во-первых,
- соответствовать
- поток
- после
- следующим образом
- Что касается
- формат
- 4
- от
- функция
- Более того
- получить
- идти
- GitHub
- управление
- большой
- группы
- Группы
- счастливый
- Есть
- he
- слышать
- на высшем уровне
- Выделенные
- надежды
- кашель
- хостов
- Как
- How To
- HTML
- HTTP
- HTTPS
- IAM
- ID
- Личность
- идентификаторы
- if
- иллюстрирует
- изображение
- влияние
- реализация
- Осуществляющий
- in
- В том числе
- указывать
- указывает
- с указанием
- individual
- информация
- пример
- рефлексологии
- в
- вводить
- выпустили
- мобильной
- вопрос
- IT
- ЕГО
- Java
- JPG
- Кафка
- Основные
- известный
- ОГРАНИЧЕНИЯ
- линия
- линий
- Список
- логический
- сделать
- управляемого
- управление
- менеджер
- максимальный
- Май..
- измеренный
- Память
- Сообщения
- Метрика
- минут
- режим
- изменять
- монитор
- БОЛЕЕ
- MS
- много
- с разными
- должен
- имя
- имена
- Откройте
- Навигация
- Необходимость
- отрицательно
- сеть
- Новые
- следующий
- нет
- отметил,
- Уведомление..
- номер
- Получает
- происходящий
- of
- on
- ONE
- только
- Откроется
- работать
- Операционный отдел
- Опция
- Опции
- or
- заказ
- оригинал
- Другое
- внешний
- за
- в упаковке
- страница
- хлеб
- параметр
- параметры
- часть
- Прошло
- Прохождение
- путь
- процент
- выполнять
- производительность
- разрешение
- Простой текст
- Платформа
- Платон
- Платон Интеллектуальные данные
- ПлатонДанные
- Точка
- пунктов
- сборах
- политика
- После
- потенциал
- прессование
- предотвращать
- предыдущий
- предварительно
- Основной
- частная
- обработка
- производит
- производитель
- Продукт
- дизайн продукта
- свойства
- обеспечивать
- при условии
- что такое варган?
- публиковать
- Вопросы
- Обменный курс
- скорее
- доходит до
- Читать
- Reading
- рекомендовать
- Управление по борьбе с наркотиками (DEA)
- назвало
- область
- помнить
- удаление
- замещать
- хранилище
- представленный
- запросить
- Запросы
- обязательный
- ресурс
- Полезные ресурсы
- те
- соответственно
- ОТДЫХ
- Дорожные карты
- Роли
- роли
- Run
- Бег
- s
- то же
- довольный
- доволен
- скриншоты
- SDK
- Во-вторых
- секунды
- Secret
- Раздел
- безопасный
- безопасность
- маркер безопасности
- посмотреть
- Отправить
- отправка
- старший
- отдельный
- Серии
- Услуги
- Сессия
- набор
- установка
- настройки
- должен
- показанный
- Шоу
- аналогичный
- Аналогичным образом
- с
- Решения
- Источник
- исходный код
- Space
- конкретный
- указанный
- стек
- этапы
- Начало
- и политические лидеры
- Шаг
- Шаги
- Stop
- хранить
- потоковый
- строка
- сильнее
- подсеть
- последующее
- Успешно
- такие
- достаточный
- поставляется
- Поддержка
- взять
- команда
- Технологии
- шаблон
- шаблоны
- Терминал
- тестXNUMX
- проверенный
- Тестирование
- чем
- который
- Ассоциация
- Источник
- их
- Их
- тогда
- следовательно
- они
- этой
- три
- Через
- пропускная способность
- время
- в
- знак
- тема
- Темы
- лечить
- Доверие
- два
- напишите
- Типы
- понимание
- Обновление ПО
- обновление
- обновление
- использование
- используемый
- Информация о пользователе
- пользователей
- использования
- через
- ценностное
- Наши ценности
- проверить
- с помощью
- Вид
- законопроект
- Путь..
- we
- Web
- веб-сервисы
- ЧТО Ж
- когда
- будь то
- который
- в то время как
- будете
- без
- работает
- записывать
- еще
- являетесь
- ВАШЕ
- зефирнет