Flujos de Apache Kafka como origen de las canalizaciones de EventBridge. - Amazon EventBridge

Flujos de Apache Kafka como origen de las canalizaciones de EventBridge.

Apache Kafka es una plataforma de secuencia de eventos de código abierto que admite cargas de trabajo como canalizaciones de datos y análisis de streaming. Puede utilizar Amazon Managed Streaming para Apache Kafka (Amazon MSK) o un clúster de Apache Kafka autoadministrado. En terminología de AWS, un clúster autoadministrado se refiere a cualquier clúster de Apache Kafka que no esté alojado por AWS. Esto incluye tanto los clústeres que gestione usted mismo como los alojados por un proveedor externo, como Confluent Cloud, CloudKarafka o Redpanda.

Para obtener más información sobre otras opciones de alojamiento de AWS para su clúster, consulte Prácticas recomendadas para ejecutar Apache Kafka en AWS en el blog de macrodatos de AWS.

Apache Kafka como origen funciona de manera similar a utilizar Amazon Simple Queue Service (Amazon SQS) o Amazon Kinesis. EventBridge sondea internamente nuevos mensajes del origen y luego invoca sincrónicamente el destino. EventBridge lee los mensajes en lotes y los proporciona a su función como carga de eventos. El tamaño máximo del lote es configurable. (El valor predeterminado es 100 mensajes).

Para los orígenes basados en Apache Kafka, EventBridge admite parámetros de control de procesamiento, como los plazos de procesamiento por lotes y el tamaño del lote.

EventBridge envía el lote de mensajes en el parámetro de evento cuando invoca su canalización. La carga de eventos contiene una matriz de mensajes. Cada elemento de la matriz contiene detalles del tema Apache Kafka y el identificador de partición de Apache Kafka, junto con una marca de tiempo y un mensaje codificado en base64.

Eventos de ejemplo

En el siguiente evento de ejemplo se muestra la información que recibe la canalización. Puede usar este evento para crear y filtrar sus patrones de eventos o para definir la transformación de entrada. No todos los campos se pueden filtrar. Para obtener más información sobre los campos que puede filtrar, consulte Filtrado de eventos de las canalizaciones de Amazon EventBridge.

[ { "eventSource": "SelfManagedKafka", "bootstrapServers": "b-2.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092,b-1.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092", "eventSourceKey": "mytopic-0", "topic": "mytopic", "partition": 0, "offset": 15, "timestamp": 1545084650987, "timestampType": "CREATE_TIME", "key":"abcDEFghiJKLmnoPQRstuVWXyz1234==", "value":"SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==", "headers": [ { "headerKey": [ 104, 101, 97, 100, 101, 114, 86, 97, 108, 117, 101 ] } ] } ]

Autenticación de clústeres de Apache Kafka

EventBridge admite varios métodos para autenticarse con su clúster de Apache Kafka autoadministrado. Asegúrese de configurar el clúster de Apache Kafka para que utilice uno de estos métodos de autenticación admitidos. Para obtener más información acerca de la seguridad de Apache Kafka, consulte la sección Seguridad de la documentación de Apache Kafka.

Acceso mediante VPC

Si utiliza un entorno de Apache Kafka autoadministrado en el que solo los usuarios de Apache Kafka de su VPC acceden a sus agentes de Apache Kafka, debe configurar Amazon Virtual Private Cloud (Amazon VPC) como origen de Apache Kafka.

Autenticación SASL/SCRAM

Las canalizaciones de EventBridge admiten autenticación simple y autenticación de capa de seguridad/mecanismo de autenticación de respuesta por desafío saltado (SASL/SCRAM) con cifrado de seguridad de la capa de transporte (TLS). EventBridge envía las credenciales cifradas para autenticarse con el clúster. Para obtener más información acerca de la autenticación SASL/SCRAM, consulte RFC 5802.

EventBridge admite la autenticación SASL/PLAIN con cifrado TLS. Con la autenticación SASL/PLAIN, las canalizaciones de EventBridge envían las credenciales como texto (sin cifrar) al servidor.

Para la autenticación SASL, almacene las credenciales de inicio de sesión como secreto en AWS Secrets Manager.

Autenticación TLS mutua

TLS mutua (mTLS) proporciona autenticación bidireccional entre el cliente y el servidor. El cliente envía un certificado al servidor para que el servidor verifique el cliente, mientras que el servidor envía un certificado al cliente para que el cliente verifique el servidor.

En Apache Kafka autoadministrado, EventBridge actúa como cliente. Puede configurar un certificado de cliente (como secreto en Secrets Manager) para autenticar las canalizaciones de EventBridge con los agentes de Apache Kafka. El certificado de servidor debe estar firmado por una entidad de certificación que esté en el almacén de confianza del servidor.

El clúster de Apache Kafka envía un certificado de servidor a las canalizaciones de EventBridge para autenticar a los agentes de Apache Kafka las canalizaciones de EventBridge. El certificado de servidor puede ser un certificado de entidad de certificación pública o un certificado autofirmado o de entidad de certificación privada. El certificado de entidad de certificación debe estar firmado por una entidad de certificación que se encuentre en el almacén de confianza de las canalizaciones de EventBridge. Para un certificado autofirmado o de entidad de certificación privada, configure el certificado de entidad de certificación raíz del servidor (como secreto en Secrets Manager). Las canalizaciones de EventBridge utilizan el certificado raíz para verificar los agentes de Apache Kafka.

Para obtener más información acerca de mTLS, consulte Presentación de la autenticación de TLS mutua para Amazon MSK como origen.

Configuración del secreto de certificado de cliente

El secreto CLIENT_CERTIFICATE_TLS_AUTH requiere un campo de certificado y un campo de clave privada. Para una clave privada cifrada, el secreto requiere una contraseña de clave privada. El certificado y la clave privada deben estar en formato PEM.

nota

Las canalizaciones de EventBridge admiten los algoritmos de cifrado de claves privadas PBES1 (pero no PBES2).

El campo de certificado debe contener una lista de certificados y debe comenzar por el certificado de cliente, seguido de cualquier certificado intermedio, y finalizar con el certificado raíz. Cada certificado debe comenzar en una nueva línea con la siguiente estructura:

-----BEGIN CERTIFICATE----- <certificate contents> -----END CERTIFICATE-----

Secrets Manager admite secretos de hasta 65 536 bytes, que supone suficiente espacio para cadenas de certificados largas.

El formato de la clave privada debe ser PKCS #8, con la siguiente estructura:

-----BEGIN PRIVATE KEY----- <private key contents> -----END PRIVATE KEY-----

Para una clave privada cifrada, utilice la siguiente estructura:

-----BEGIN ENCRYPTED PRIVATE KEY----- <private key contents> -----END ENCRYPTED PRIVATE KEY-----

El siguiente ejemplo muestra el contenido de un secreto para la autenticación de mTLS mediante una clave privada cifrada. Para una clave privada cifrada, incluya la contraseña de la clave privada en el secreto.

{ "privateKeyPassword": "testpassword", "certificate": "-----BEGIN CERTIFICATE----- MIIE5DCCAsygAwIBAgIRAPJdwaFaNRrytHBto0j5BA0wDQYJKoZIhvcNAQELBQAw ... j0Lh4/+1HfgyE2KlmII36dg4IMzNjAFEBZiCRoPimO40s1cRqtFHXoal0QQbIlxk cmUuiAii9R0= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFgjCCA2qgAwIBAgIQdjNZd6uFf9hbNC5RdfmHrzANBgkqhkiG9w0BAQsFADBb ... rQoiowbbk5wXCheYSANQIfTZ6weQTgiCHCCbuuMKNVS95FkXm0vqVD/YpXKwA/no c8PH3PSoAaRwMMgOSA2ALJvbRz8mpg== -----END CERTIFICATE-----", "privateKey": "-----BEGIN ENCRYPTED PRIVATE KEY----- MIIFKzBVBgkqhkiG9w0BBQ0wSDAnBgkqhkiG9w0BBQwwGgQUiAFcK5hT/X7Kjmgp ... QrSekqF+kWzmB6nAfSzgO9IaoAaytLvNgGTckWeUkWn/V0Ck+LdGUXzAC4RxZnoQ zp2mwJn2NYB7AZ7+imp0azDZb+8YG2aUCiyqb6PnnA== -----END ENCRYPTED PRIVATE KEY-----" }

Configuración del secreto de certificado de entidad de certificación raíz del servidor

Cree este secreto si sus agentes de Apache Kafka utilizan cifrado TLS con certificados firmados por una entidad de certificación privada. Puede utilizar el cifrado TLS para autenticación VPC, SASL/SCRAM, SASL/PLAIN o mTLS.

El secreto de certificado de entidad de certificación raíz del servidor requiere un campo que contenga el certificado de entidad de certificación raíz del agente de Apache Kafka en formato PEM. La estructura del secreto se muestra en el ejemplo siguiente.

{ "certificate": "-----BEGIN CERTIFICATE----- MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dG... -----END CERTIFICATE-----"

Configuración de red

Si utiliza un entorno de Apache Kafka autoadministrado que utiliza conectividad de VPC privada, EventBridge debe tener acceso a los recursos de Amazon Virtual Private Cloud (Amazon VPC) asociados a sus agentes de Apache Kafka.

  • Para acceder a la VPC de su clúster de Apache Kafka, EventBridge puede usar el acceso saliente a Internet para las subredes de su origen. Para las subredes privadas, puede ser una puerta de enlace NAT o su propia NAT. Asegúrese de que la NAT tiene una dirección IP pública y puede conectarse a Internet. Para las subredes públicas, debe usar puntos de conexión de VPC (se explica a continuación).

  • La canalizaciones de EventBridge también admiten la entrega directa de eventos mediante AWS PrivateLink, lo que le permite enviar eventos desde un origen de eventos ubicado en Amazon Virtual Private Cloud (Amazon VPC) a un destino de canalizaciones sin tener que atravesar la red pública de Internet. Puede usar las canalizaciones para sondear desde Amazon Managed Streaming for Apache Kafka (Amazon MSK), Apache Kafka autoadministrado y orígenes de Amazon MQ que residen en una subred privada sin necesidad de implementar una puerta de enlace de Internet, configurar reglas de firewall o configurar servidores proxy. También puede usar puntos de conexión de VPC para admitir la entrega desde clústeres de Kafka en subredes públicas.

    Para configurar un punto de conexión de VPC, consulte Crear un punto de conexión de VPC en la Guía del usuario de AWS PrivateLink. En Nombre del servicio, seleccione com.amazonaws.region.pipes-data.

Configure sus grupos de seguridad de Amazon VPC con las siguientes reglas (como mínimo):

  • Reglas de entrada: permiten todo el tráfico en el puerto del agente de Apache Kafka para los grupos de seguridad especificados para su origen.

  • Reglas de salida: permiten todo el tráfico en el puerto 443 para todos los destinos. Permiten todo el tráfico en el puerto del agente de Apache Kafka para los grupos de seguridad especificados para su origen.

    Los puertos del agente incluyen:

    • 9092 para texto sin formato

    • 9094 para TLS

    • 9096 para SASL

    • 9098 para IAM

Escalado automático de los consumidores con orígenes de Apache Kafka

Al crear inicialmente un origen de Apache Kafka, EventBridge asigna un consumidor para procesar todas las particiones en el tema de Kafka. Cada consumidor tiene varios procesadores que se ejecutan en paralelo para gestionar el aumento de las cargas de trabajo. Además, EventBridge reduce o escala verticalmente de manera automática el número de consumidores, en función de la carga de trabajo. Para conservar el orden de mensajes en cada partición, el número máximo de consumidores es un consumidor por partición en el tema.

En intervalos de un minuto, EventBridge evalúa el retraso de compensación del consumidor de todas las particiones del tema. Si el retraso es demasiado alto, la partición recibe mensajes más rápido de lo que EventBridge puede procesarlos. Si es necesario, EventBridge agrega o elimina a los consumidores del tema. El proceso de escalado para agregar o eliminar consumidores se produce dentro de los tres minutos posteriores a la evaluación.

Si su destino está sobrecargado, EventBridge reduce el número de consumidores. Esta acción reduce la carga de trabajo de la función al reducir el número de mensajes que los consumidores pueden recuperar y enviar a la función.