Configurar o cluster do Apache Kafka autogerenciado e a rede do Lambda - AWS Lambda

Configurar o cluster do Apache Kafka autogerenciado e a rede do Lambda

Para conectar a função do Lambda ao cluster do Apache Kafka autogerenciado, é preciso configurar corretamente o cluster e a rede em que ele reside. Esta página descreve como configurar o cluster e a rede. Se o cluster e a rede já estiverem configurados corretamente, consulte Configurar origens de eventos do Apache Kafka autogerenciado para o Lambda para configurar o mapeamento da origem do evento.

Configuração do cluster do Apache Kafka autogerenciado

Você pode hospedar seu cluster do Apache Kafka autogerenciado com provedores de nuvem, como Confluent Cloud ou Redpanda, ou executá-lo em sua própria infraestrutura. Certifique-se de que seu cluster esteja devidamente configurado e acessível a partir da rede à qual seu mapeamento da origem do evento Lambda se conectará.

Configuração da segurança de rede

Para conceder ao Lambda acesso total ao Apache Kafka autogerenciado por meio do mapeamento da origem do evento, seu cluster deve usar um endpoint público (endereço IP público) ou você deve fornecer acesso à Amazon VPC na qual o cluster foi criado.

Ao usar o Apache Kafka autogerenciado com o Lambda, recomendamos a criação de endpoints de VPC do AWS PrivateLink para conceder acesso da sua função aos recursos na sua Amazon VPC.

nota

Os endpoints de VPC do AWS PrivateLink são necessários para funções com mapeamentos da origem de eventos que usam o modo padrão (sob demanda) para pesquisadores de eventos. Se o mapeamento da origem do evento usa o modo provisionado, você não precisa configurar endpoints de VPC do AWS PrivateLink.

Crie um endpoint para fornecer acesso aos seguintes recursos:

  • Lambda: crie um endpoint para a entidade principal de serviço do Lambda.

  • AWS STS: crie um endpoint para o AWS STS com a finalidade de possibilitar que uma entidade principal de serviço assuma um perfil em seu nome.

  • Secrets Manager: caso o seu cluster use o Secrets Manager para armazenar credenciais, crie um endpoint específico para o Secrets Manager.

Como alternativa, configure um gateway NAT em cada sub-rede pública da Amazon VPC. Para obter mais informações, consulte Habilitar o acesso à Internet para funções do Lambda conectadas à VPC.

Ao criar um mapeamento da origem do evento para o Apache Kafka autogerenciado, o Lambda verifica se as interfaces de rede elástica (ENIs) já estão presentes nas sub-redes e nos grupos de segurança configurados para a Amazon VPC. Se o Lambda encontrar ENIs existentes, ele tentará reutilizá-las. Caso contrário, o Lambda criará novas ENIs para se conectar à origem do evento e invocar sua função.

nota

As funções do Lambda sempre são executadas em VPCs de propriedade do serviço Lambda. A configuração de VPC da sua função não afetará o mapeamento da origem do evento. Somente a configuração de rede da origem dos eventos determina como o Lambda estabelece conexão com a origem dos eventos.

Configure os grupos de segurança para a Amazon VPC que contém o cluster. Por padrão, o Apache Kafka autogerenciado usa a seguinte porta: 9092.

  • Regras de entrada: permitem todo o tráfego na porta padrão do agente para o grupo de segurança associado à origem dos eventos. Como alternativa, é possível usar uma regra de grupo de segurança autorreferenciada para permitir o acesso de instâncias dentro do mesmo grupo de segurança.

  • Regras de saída: permitir todo o tráfego na porta 443 para destinos externos se sua função precisar se comunicar com serviços da AWS. Como alternativa, você também poderá usar uma regra de grupo de segurança autorreferenciada para limitar o acesso ao operador se não precisar se comunicar com outros serviços AWS.

  • Regras de entrada para o endpoint da Amazon VPC: caso você esteja usando um endpoint da Amazon VPC, o grupo de segurança associado ao endpoint da Amazon VPC deve permitir o tráfego de entrada na porta 443 usando o grupo de segurança do cluster.

Caso o cluster use autenticação, é possível restringir a política de endpoint para o endpoint do Secrets Manager. Para chamar a API do Secrets Manager, o Lambda usa seu perfil de função, e não a entidade principal de serviço do Lambda.

exemplo Política de endpoint da VPC: endpoint do 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" } ] }

Quando você usa os endpoints da Amazon VPC, a AWS roteia suas chamadas de API para invocar sua função usando a interface de rede elástica (ENI) do endpoint. A entidade principal do serviço Lambda precisa chamar lambda:InvokeFunction para quaisquer perfis e funções que usem essas ENIs.

Por padrão, os endpoints da Amazon VPC têm políticas do IAM abertas que permitem amplo acesso aos recursos. A prática recomendada é restringir essas políticas para executar as ações necessárias usando esse endpoint. Para garantir que seu mapeamento da origem do evento seja capaz de invocar sua função do Lambda, a política de endpoint da VPC deve permitir que a entidade principal do serviço Lambda chame sts:AssumeRole e lambda:InvokeFunction. A restrição de suas políticas de endpoint da VPC para permitir apenas chamadas de API originadas em sua organização impedirá o funcionamento adequado do mapeamento da origem do evento; portanto, "Resource": "*" é necessário nessas políticas.

O seguinte exemplo de políticas de endpoint da VPC mostra como conceder o acesso necessário à entidade principal do serviço Lambda para os endpoints do AWS STS e Lambda.

exemplo Política de endpoint da VPC: endpoint do AWS STS
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }
exemplo Política de endpoint da VPC: endpoint do Lambda
{ "Statement": [ { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }