Configuration de votre cluster Apache Kafka autogéré, de votre VPC et de votre réseau Lambda
Pour connecter votre fonction Lambda à votre cluster Apache Kafka autogéré, vous devez configurer correctement votre cluster et le réseau dans lequel il réside. Cette page décrit comment configurer votre cluster et votre réseau. Si votre cluster et votre réseau sont déjà correctement configurés, consultez Configuration de sources d’événements Apache Kafka autogérées pour Lambda pour configurer le mappage des sources d’événements.
Configuration de cluster Apache Kafka autogéré
Vous pouvez héberger votre cluster Apache Kafka autogéré auprès de fournisseurs de cloud comme Confluent Cloud
Configurer la sécurité réseau
Pour donner à Lambda un accès complet à Apache Kafka autogéré via votre mappage des sources d’événements, soit votre cluster doit utiliser un point de terminaison public (adresse IP publique), soit vous devez fournir un accès au VPC Amazon dans lequel vous avez créé le cluster.
Lorsque vous utilisez Apache Kafka autogéré avec Lambda, créez des points de terminaison de VPC AWS PrivateLink qui permettent à votre fonction d’accéder aux ressources de votre Amazon VPC.
Note
Les points de terminaison de VPC AWS PrivateLink sont requis pour les fonctions avec des mappages de sources d’événements qui utilisent le mode par défaut (à la demande) pour les interrogateurs d’événements. Si le mappage de votre source d’événements utilise le mode provisionné, vous n’avez pas besoin de configurer les points de terminaison de VPC AWS PrivateLink.
Créez un point de terminaison pour accéder aux ressources suivantes :
-
Lambda — Créez un point de terminaison pour le principal de service Lambda.
-
AWS STS — Créez un point de terminaison pour l’AWS STS afin qu’un principal de service assume un rôle en votre nom.
-
Secrets Manager : si votre cluster utilise Secrets Manager pour stocker les informations d’identification, créez un point de terminaison pour Secrets Manager.
Vous pouvez également configurer une passerelle NAT sur chaque sous-réseau public d’Amazon VPC. Pour de plus amples informations, consultez Activation de l’accès Internet pour les fonctions Lambda connectées à un VPC.
Lorsque vous créez un mappage des sources d’événements pour Apache Kafka autogéré, Lambda vérifie si des interfaces réseau Elastic (ENI) sont déjà présentes pour les sous-réseaux et les groupes de sécurité configurés pour votre VPC Amazon. Si Lambda trouve des ENI existantes, il tente de les réutiliser. Sinon, Lambda crée de nouvelles ENI pour se connecter à la source d’événement et invoquer votre fonction.
Note
Les fonctions Lambda sont toujours exécutées dans des VPC appartenant au service Lambda. La configuration VPC de votre fonction n’affecte pas le mappage des sources d’événements. Seule la configuration réseau des sources d’événements détermine la manière dont Lambda se connecte à votre source d’événements.
Configurez les groupes de sécurité pour le VPC Amazon contenant votre cluster. Par défaut, Apache Kafka autogéré utilise les ports suivants : 9092.
-
Règles entrantes – Autorisent tout le trafic sur le port de l’agent par défaut pour le groupe de sécurité associé à votre source d’événement. Vous pouvez également utiliser une règle de groupe de sécurité avec référence circulaire pour autoriser l’accès à partir d’instances appartenant au même groupe de sécurité.
-
Règles sortantes : autorisent tout le trafic sur le port
443pour des destinations externes si votre fonction doit communiquer avec des services AWS. Vous pouvez également utiliser une règle de groupe de sécurité avec référence circulaire pour limiter l’accès à l’agent si vous n’avez pas besoin de communiquer avec d’autres services AWS. -
Règles entrantes relatives au point de terminaison Amazon VPC – Si vous utilisez un point de terminaison Amazon VPC, le groupe de sécurité associé à votre point de terminaison Amazon VPC doit autoriser le trafic entrant sur le port
443en provenance du groupe de sécurité du cluster.
Si votre cluster utilise l’authentification, vous pouvez également restreindre la politique de point de terminaison pour le point de terminaison Secrets Manager. Pour appeler l’API Secrets Manager, Lambda utilise votre rôle de fonction, et non le principal de service Lambda.
Exemple Politique de point de terminaison de VPC — Point de terminaison 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" } ] }
Lorsque vous utilisez des points de terminaison Amazon VPC, AWS achemine vos appels d’API pour invoquer votre fonction à l’aide de l’interface réseau Elastic (ENI) du point de terminaison. Le principal de service Lambda doit appeler lambda:InvokeFunction pour tous les rôles et fonctions utilisant ces ENI.
Par défaut, les points de terminaison Amazon VPC disposent de politiques IAM ouvertes qui permettent un accès étendu aux ressources. La meilleure pratique consiste à restreindre ces politiques pour effectuer les actions nécessaires à l’aide de ce point de terminaison. Pour garantir que votre mappage des sources d’événements est en mesure d’invoquer votre fonction Lambda, la politique de point de terminaison de VPC doit autoriser le principal de service Lambda à appeler sts:AssumeRole et lambda:InvokeFunction. Le fait de restreindre vos politiques de point de terminaison de VPC pour autoriser uniquement les appels d’API provenant de votre organisation empêche le mappage des sources d’événements de fonctionner correctement. C’est pourquoi "Resource": "*" est requis dans ces politiques.
Les exemples de politiques de point de terminaison de VPC suivants montrent comment accorder l’accès requis au principal de service Lambda pour les points de terminaison AWS STS et Lambda.
Exemple Politique de point de terminaison de VPC — Point de terminaison AWS STS
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }
Exemple Politique de point de terminaison de VPC — Point de terminaison Lambda
{ "Statement": [ { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }