Amazon Managed Streaming for Apache Kafka (Amazon MSK) - це послуга, яка повністю керується, сприяючи розробці та виконанню додатків, що обробляють потокові дані через Apache Kafka. Операції управління площадкою, включаючи створення, оновлення та видалення кластерів, пропонуються Amazon MSK. Послуга дозволяє використовувати операції площадки обробки даних Apache Kafka, включаючи виробництво та споживання даних. Вона працює на відкритих версіях Apache Kafka, забезпечуючи сумісність з існуючими додатками, інструментами та плагінами як від партнерів, так і від спільноти Apache Kafka, уникнення необхідності внесення змін у код додатка.
З точки зору надійності Amazon MSK призначений для автоматичного виявлення та відновлення від поширених сценаріїв відмов кластера, забезпечуючи, що додатки виробника та споживача продовжують свою діяльність з запису та читання даних з мінімальними перешкодами. Крім того, він спрямований на оптимізацію процесів реплікації даних, намагаючись перевикористовувати сховище замінених брокерів, тим самим мінімізуючи обсяг даних, які потрібно реплікувати Apache Kafka.
Типи
Існують 2 типи кластерів Kafka, які дозволяє створювати AWS: Provisioned та Serverless.
З точки зору атакуючого вам потрібно знати, що:
Serverless не може бути безпосередньо публічним (він може працювати лише в VPN без будь-якої публічної IP-адреси). Однак Provisioned може бути налаштований для отримання публічної IP-адреси (за замовчуванням цього не відбувається) та налаштувати групу безпеки для викладення відповідних портів.
Serverless підтримує лише IAM як метод аутентифікації. Provisioned підтримує аутентифікацію SASL/SCRAM (пароль), аутентифікацію IAM, аутентифікацію AWS Certificate Manager (ACM) та Неаутентифікований доступ.
Зверніть увагу, що неможливо публічно викласти Provisioned Kafka, якщо увімкнено неаутентифікований доступ
Enumeration
#Get clustersawskafkalist-clustersawskafkalist-clusters-v2# Check the supported authenticationawskafkalist-clusters|jq-r".ClusterInfoList[].ClientAuthentication"# Get Zookeeper endpointsaws kafka list-clusters | jq -r ".ClusterInfoList[].ZookeeperConnectString, .ClusterInfoList[].ZookeeperConnectStringTls"
# Get nodes and node enspointsawskafkakafkalist-nodes--cluster-arn<cluster-arn>aws kafka kafka list-nodes --cluster-arn <cluster-arn> | jq -r ".NodeInfoList[].BrokerNodeInfo.Endpoints" # Get endpoints
# Get used kafka configsawskafkalist-configurations#Get Kafka config fileawskafkadescribe-configuration--arn<config-arn># Get version of configawskafkadescribe-configuration-revision--arn<config-arn>--revision<version># Get content of config version# If using SCRAN authentication, get used AWS secret name (not secret value)awskafkalist-scram-secrets--cluster-arn<cluster-arn>
Доступ IAM до Kafka (у безсерверному режимі)
# Guide from https://docs.aws.amazon.com/msk/latest/developerguide/create-serverless-cluster.html# Download Kafkawgethttps://archive.apache.org/dist/kafka/2.8.1/kafka_2.12-2.8.1.tgztar-xzfkafka_2.12-2.8.1.tgz# In kafka_2.12-2.8.1/libs download the MSK IAM JAR file.cdkafka_2.12-2.8.1/libswgethttps://github.com/aws/aws-msk-iam-auth/releases/download/v1.1.1/aws-msk-iam-auth-1.1.1-all.jar# Create file client.properties in kafka_2.12-2.8.1/binsecurity.protocol=SASL_SSLsasl.mechanism=AWS_MSK_IAMsasl.jaas.config=software.amazon.msk.auth.iam.IAMLoginModule required;sasl.client.callback.handler.class=software.amazon.msk.auth.iam.IAMClientCallbackHandler# Export endpoints addressexport BS=boot-ok2ngypz.c2.kafka-serverless.us-east-1.amazonaws.com:9098## Make sure you will be able to access the port 9098 from the EC2 instance (check VPS, subnets and SG)# Create a topic called msk-serverless-tutorialkafka_2.12-2.8.1/bin/kafka-topics.sh --bootstrap-server $BS --command-config client.properties --create --topic msk-serverless-tutorial --partitions 6
# Send message of every new linekafka_2.12-2.8.1/bin/kafka-console-producer.sh --broker-list $BS --producer.config client.properties --topic msk-serverless-tutorial
# Read messageskafka_2.12-2.8.1/bin/kafka-console-consumer.sh --bootstrap-server $BS --consumer.config client.properties --topic msk-serverless-tutorial --from-beginning
Якщо ви маєте доступ до VPC, де знаходиться Provisioned Kafka, ви можете увімкнути несанкціонований доступ, якщо аутентифікація SASL/SCRAM, прочитайте пароль з секрету, надайте деякі інші керовані дозволи IAM користувачам (якщо використовується IAM або serverless) або зберігайте з сертифікатами.