Configuración del clúster Apache Kafka autoadministrado y de la red para Lambda
Para conectar la función de Lambda al clúster de Apache Kafka autoagestionado, debe configurar correctamente tanto el clúster como la red en la que reside. En esta página se describe cómo configurar el clúster y la red. Si el clúster y la red ya están configurados correctamente, consulte Configuración de Apache Kafka autoadministrado como origen de eventos para Lambda para configurar la asignación de orígenes de eventos.
Temas
Configuración de clúster de Apache Kafka autoadministrado.
Puede alojar su clúster Apache Kafka autoadministrado con proveedores de nube como Confluent Cloud
Configuración de la seguridad de la red
Para que Lambda tenga acceso completo a Apache Kafka autoadministrado a través de su asignación de orígenes de eventos, debe proporcionar acceso a la instancia de Amazon VPC en la que creó el clúster o este debe utilizar un punto de conexión público (dirección IP pública).
Cuando utilice Apache Kafka autoadministrado con Lambda, recomendamos que cree puntos de conexión de VPC AWS PrivateLink que proporcionen a su función acceso a los recursos de su Amazon VPC.
nota
Los puntos de conexión de VPC de AWS PrivateLink son necesarios para las funciones con asignaciones de orígenes de eventos que utilizan el modo predeterminado (bajo demanda) para los sondeos de eventos. Si la asignación de orígenes de eventos utiliza el modo aprovisionado, no es necesario configurar los puntos de conexión de VPC de AWS PrivateLink.
Cree un punto de conexión para proporcionar acceso a los siguientes recursos:
-
Lambda: cree un punto de conexión para la entidad principal del servicio de Lambda.
-
AWS STS: cree un punto de conexión para AWS STS con el objetivo de que la entidad principal del servicio asuma un rol en su nombre.
-
Secrets Manager: si el clúster usa Secrets Manager para almacenar las credenciales, cree un punto de conexión para Secrets Manager.
Como alternativa, configure una puerta de enlace de NAT en cada subred pública de la Amazon VPC. Para obtener más información, consulte Habilitación del acceso a Internet para funciones de Lambda conectadas a VPC.
Al crear una asignación de orígenes de eventos para Apache Kafka autoadministrado, Lambda comprueba si las interfaces de red elásticas (ENI) ya están presentes en las subredes y los grupos de seguridad configurados para la Amazon VPC. Si Lambda encuentra ENI existentes, intenta reutilizarlos. De lo contrario, Lambda crea nuevos ENI para conectarse al origen de eventos e invocar la función.
nota
Las funciones de Lambda siempre se ejecutan dentro de VPC propiedad del servicio de Lambda. La configuración de VPC de la función no afecta la asignación de orígenes de eventos. Solo la configuración de red del origen de eventos determina cómo se conecta Lambda al origen de eventos.
Configure los grupos de seguridad para la Amazon VPC que contiene el clúster. De forma predeterminada, Apache Kafka autoadministrado utiliza los siguientes puertos: 9092.
-
Reglas de entrada: permiten todo el tráfico en el puerto del agente predeterminado para el grupo de seguridad asociado al origen de eventos. Como alternativa, puede usar una regla de grupo de seguridad con autorreferencia para permitir el acceso desde instancias que pertenecen al mismo grupo de seguridad.
-
Reglas de salida: permiten que todo el tráfico en el puerto
443vaya a destinos externos en caso de que su función necesite comunicarse con servicios de AWS. Como alternativa, también puede usar una regla de grupo de seguridad con autorreferencia para limitar el acceso al agente en caso de que no necesite comunicarse con otros servicios de AWS. -
Reglas de entrada del punto de conexión de Amazon VPC: si usa un punto de conexión de Amazon VPC, el grupo de seguridad asociado al punto de conexión de Amazon VPC debe permitir el tráfico entrante en el puerto
443desde el grupo de seguridad del clúster.
Si el clúster utiliza la autenticación, también puede restringir la política del punto de conexión para el punto de conexión de Secrets Manager. Para llamar a la API de Secrets Manager, Lambda usa su rol de función, no la entidad principal de servicio de Lambda.
ejemplo Política de punto de conexión de VPC: punto de conexión de Secrets Manager
{ "Statement": [ { "Action": "secretsmanager:GetSecretValue", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws::iam::123456789012:role/my-role" ] }, "Resource": "arn:aws::secretsmanager:us-west-2:123456789012:secret:my-secret" } ] }
Cuando utiliza los puntos de conexión de VPC de Amazon, AWS enruta las llamadas a la API para invocar una función mediante la interfaz de red elástica (ENI) del punto de conexión. La entidad principal del servicio de Lambda debe llamar a lambda:InvokeFunction en cualquier rol y función que utilicen esas ENI.
De forma predeterminada, los puntos de conexión de VPC de Amazon tienen políticas de IAM abiertas que permiten un amplio acceso a los recursos. La práctica recomendada es restringir estas políticas para realizar las acciones necesarias mediante ese punto de conexión. Para garantizar que la asignación de orígenes de eventos pueda invocar la función de Lambda, la política de punto de conexión de VPC debe permitir que la entidad principal del servicio de Lambda llame a sts:AssumeRole y lambda:InvokeFunction. Restringir las políticas de punto de conexión de VPC para permitir únicamente las llamadas a la API que se originen en su organización impide que la asignación de orígenes de eventos funcione correctamente, por lo que en estas políticas es necesario "Resource": "*".
En el siguiente ejemplo de políticas de puntos de conexión de VPC, se muestra cómo conceder el acceso necesario a las entidades principales del servicio de Lambda para AWS STS y los puntos de conexión de Lambda.
ejemplo Política de punto de conexión de VPC: punto de conexión de AWS STS
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }
ejemplo Política de punto de conexión de VPC: punto de conexión de Lambda
{ "Statement": [ { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }