Configurar o cluster do Amazon MSK e a rede do Amazon VPC para o Lambda - AWS Lambda

Configurar o cluster do Amazon MSK e a rede do Amazon VPC para o Lambda

Para conectar a função do AWS Lambda ao cluster do Amazon MSK, é preciso configurar corretamente o cluster e a Amazon Virtual Private Cloud (VPC) em que ele reside. Esta página descreve como configurar o cluster e a VPC. Se o cluster e a VPC já estiverem configurados corretamente, consulte Configurar as origens de eventos do Amazon MSK para o Lambda para configurar o mapeamento da origem do evento.

Visão geral dos requisitos de configuração de rede para integrações entre o Lambda e o MSK

A configuração de rede necessária para uma integração entre o Lambda e o MSK depende da arquitetura de rede da aplicação. Há três recursos principais envolvidos nessa integração: o cluster do Amazon MSK, a função do Lambda e o mapeamento da origem do evento do Lambda. Cada um desses recursos reside em uma VPC diferente:

  • O cluster do Amazon MSK normalmente reside em uma sub-rede privada de uma VPC que você gerencia.

  • A função do Lambda reside em uma VPC gerenciada pela AWS e cujo proprietário é o Lambda.

  • O mapeamento da origem do evento do Lambda reside em outra VPC gerenciada pela AWS, cujo proprietário é o Lambda, em separado da VPC que contém a função.

O mapeamento da origem do evento é o recurso intermediário entre o cluster do MSK e a função do Lambda. O mapeamento da origem do evento tem duas tarefas principais. Primeiro, ele pesquisa novas mensagens no cluster do MSK. Depois, ele invoca a função do Lambda com essas mensagens. Como esses três recursos estão em VPCs diferentes, as operações de pesquisa e invocação exigem chamadas de rede entre VPCs.

Os requisitos de configuração de rede para o mapeamento da origem do evento variam conforme o uso do modo provisionado ou do modo sob demanda, conforme indicado no seguinte diagrama:

Comparação de chamadas de rede para ESMs do Kafka no modo sob demanda versus no modo provisionado

A maneira como o mapeamento da origem do evento do Lambda pesquisa novas mensagens no cluster do MSK é igual em ambos os modos. Para estabelecer uma conexão entre o mapeamento da origem do evento e o cluster do MSK, o Lambda cria uma ENI de hiperplano (ou reutiliza uma existente, se disponível) em a sub-rede privada para estabelecer uma conexão segura. Como ilustrado no diagrama, essa ENI de hiperplano usa a configuração de sub-rede e de grupo de segurança do cluster do MSK, não da função do Lambda.

Após pesquisar a mensagem do cluster, a maneira como o Lambda invoca a função é diferente em cada modo:

  • No modo provisionado, o Lambda processa automaticamente a conexão entre a VPC do mapeamento da origem do evento e a VPC da função. Assim, não é preciso nenhum componente de rede adicional para invocar a função.

  • No modo sob demanda, o mapeamento da origem do evento do Lambda invoca a função por um caminho através da VPC gerenciada pelo cliente. Por isso, você precisa configurar um gateway NAT na sub-rede pública da VPC ou endpoints AWS PrivateLink na sub-rede privada da VPC que forneçam acesso ao Lambda, ao AWS Security Token Service (STS) e, opcionalmente, ao AWS Secrets Manager. A configuração correta dessas opções permite uma conexão entre a sua VPC e a VPC de runtime gerenciada pelo Lambda, que é necessária para invocar a função.

Um gateway NAT permite que recursos na sub-rede privada acessem a Internet pública. Usar essa configuração significa que o tráfego atravessa a Internet antes da invocação da função do Lambda. Os endpoints AWS PrivateLink permitem que as sub-redes privadas se conectem com segurança aos serviços da AWS ou a outros recursos da VPC privada sem atravessar a Internet pública. Consulte Configurar um gateway NAT para uma origem de eventos do MSK ou Configurar endpoints AWS PrivateLink para uma origem de eventos do MSK para obter detalhes sobre como configurar esses recursos.

Até agora, o pressuposto é que o cluster do MSK reside em uma sub-rede privada dentro da VPC, que é o caso mais comum. Porém, mesmo que o cluster do MSK esteja em uma sub-rede pública dentro da VPC, você deve configurar endpoints AWS PrivateLink para permitir uma conexão segura. A tabela a seguir resume os requisitos de configuração de rede com base em como você configura o cluster do MSK e o mapeamento da origem do evento do Lambda:

Localização do cluster do MSK (em VPC gerenciada pelo cliente) Modo de escalação do mapeamento da origem do evento do Lambda Configuração de rede exigida

Sub-rede privada

Modo sob demanda

Gateway NAT (na sub-rede pública da VPC) ou endpoints AWS PrivateLink (na sub-rede privada da VPC) para permitir o acesso ao Lambda, ao AWS STS e, opcionalmente, ao Secrets Manager.

Sub-rede pública

Modo sob demanda

Endpoints AWS PrivateLink (na sub-rede pública da VPC) para permitir o acesso ao Lambda, ao AWS STS e, opcionalmente, ao Secrets Manager.

Sub-rede privada

Modo provisionado

Nenhum

Sub-rede pública

Modo provisionado

Nenhum

Além disso, os grupos de segurança associados ao cluster do MSK devem permitir tráfego nas portas corretas. Configure as seguintes regras de grupo de segurança:

  • Regras de entrada: permitir todo o tráfego na porta padrão do agente. A porta que o MSK usa depende do tipo de autenticação no cluster: 9098 para autenticação do IAM, 9096 para SASL/SCRAM e 9094 para TLS. 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 a função precisar se comunicar com outros serviços da AWS. Como alternativa, você também pode usar uma regra de grupo de segurança autorreferenciada para limitar o acesso ao agente se não precisar se comunicar com outros serviços da 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 deve permitir tráfego de entrada na porta 443 vindo do grupo de segurança do cluster.

Configurar um gateway NAT para uma origem de eventos do MSK

Você pode configurar um gateway NAT para permitir que o mapeamento da origem do evento pesquise mensagens do cluster e invoque a função por um caminho via VPC. Isso é necessário apenas se o mapeamento da origem do evento usar o modo sob demanda e o cluster residir em uma sub-rede privada da VPC. Se o cluster residir em uma sub-rede pública da VPC ou se o mapeamento da origem do evento usar o modo provisionado, não será necessário configurar um gateway NAT.

Um gateway NAT permite que os recursos de uma sub-rede privada acessem a Internet pública. Se você precisar de conectividade privada com o Lambda, consulte Configurar endpoints AWS PrivateLink para uma origem de eventos do MSK.

Depois de configurar o gateway NAT, configure as tabelas de rotas apropriadas. Isso permite que o tráfego da sub-rede privada seja roteado para a Internet pública via gateway NAT.

Diagrama de uma VPC gerenciada pelo cliente usando um gateway NAT para rotear o tráfego da sub-rede privada para a Internet pública.

As etapas a seguir guiam você pela configuração de um gateway NAT usando o console. Repita essas etapas conforme necessário para cada zona de disponibilidade (AZ).

Para configurar um gateway NAT e o roteamento adequado (console)
  1. Siga as etapas em Criar um gateway NAT, observando o seguinte:

    • Os gateways NAT sempre devem residir em uma sub-rede pública. Crie gateways NAT com conectividade pública.

    • Se o cluster do MSK for replicado em várias AZs, crie apenas um gateway NAT por AZ. Por exemplo, em cada AZ, a VPC deve ter uma sub-rede privada contendo o cluster e uma sub-rede pública contendo o gateway NAT. Para uma configuração com três AZs, você terá três sub-redes privadas, três sub-redes públicas e três gateways NAT.

  2. Depois de criar o gateway NAT, abra o console da Amazon VPC e escolha Tabelas de rotas no menu à esquerda.

  3. Escolha Create Route Table (Criar tabela de rotas).

  4. Associe essa tabela de rotas à VPC que contém o cluster do MSK. Opcionalmente, insira um nome para a tabela de rotas.

  5. Escolha Create Route Table (Criar tabela de rotas).

  6. Escolha a tabela de rotas que acabou de criar.

  7. Na guia Associações da sub-rede selecione Editar associações da sub-rede.

    • Associe essa tabela de rotas à sub-rede privada que contém o cluster do MSK.

  8. Escolha Edit routes (Editar rotas).

  9. Selecione Adicionar rota:

    1. Em Destination (Destino), selecione 0.0.0.0/0.

    2. Em Destino, escolha Gateway NAT.

    3. Na caixa de pesquisa, escolha o gateway NAT que você criou na etapa 1. Esse deve ser o gateway NAT da mesma AZ que a sub-rede privada que contém o cluster do MSK (a sub-rede privada que você associou a essa tabela de rotas na etapa 6).

  10. Escolha Salvar alterações.

Você pode configurar endpoints AWS PrivateLink para pesquisar mensagens do cluster e invocar a função por um caminho via VPC. Esses endpoints devem permitir que o cluster do MSK acesse o seguinte:

A configuração dos endpoints PrivateLink será necessária apenas se o mapeamento da origem do evento usar o modo sob demanda. Se o mapeamento da origem do evento usar o modo provisionado, o Lambda estabelecerá as conexões necessárias para você.

Os endpoints PrivateLink permitem acesso privado seguro aos serviços da AWS por AWS PrivateLink. Como alternativa, para configurar um gateway NAT para conceder ao cluster do MSK acesso à Internet pública, consulte Configurar um gateway NAT para uma origem de eventos do MSK.

Após a configuração dos endpoints da VPC, o cluster do MSK deverá ter acesso direto e privado ao Lambda, ao STS e, opcionalmente, ao Secrets Manager.

Diagrama de uma VPC gerenciada pelo cliente usando endpoints AWS PrivateLink para acessar os serviços da AWS.

As etapas a seguir guiam você pela configuração de um endpoint PrivateLink usando o console. Repita essas etapas conforme necessário para cada endpoint (Lambda, STS, Secrets Manager).

Para configurar um endpoints PrivateLink da VPC (console)
  1. Abra o console da Amazon VPC e escolha Endpoints no menu à esquerda.

  2. Escolha Criar endpoint.

  3. Opcionalmente, insira um nome para o endpoint.

  4. Em Tipo, escolha Serviços da AWS.

  5. Em Serviços, comece a digitar o nome do serviço. Por exemplo, para criar um endpoint para se conectar ao Lambda, digite lambda na caixa de pesquisa.

  6. Nos resultados, você deve ver o endpoint do serviço na região atual. Por exemplo, na região Leste dos EUA (Norte da Virgínia), você deve ver com.amazonaws.us-east-2.lambda. Selecione este serviço.

  7. Em Configurações de rede, selecione a VPC que contém o cluster do MSK.

  8. Em Sub-redes, selecione as AZs em que seu cluster do MSK está.

    • Para cada AZ, em ID da sub-rede, escolha a sub-rede privada que contém o cluster do MSK.

  9. Em grupos de segurança selecione o grupo de segurança associado ao cluster do MSK.

  10. Escolha Criar endpoint.

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. Por exemplo, para o endpoint do Secrets Manager, você pode modificar a política para que permita apenas que o perfil de execução da função acesse o segredo.

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" } ] }

Para os endpoints do AWS STS e do Lambda, você pode restringir a entidade principal chamadora à entidade principal do serviço Lambda. Porém, certifique-se de usar "Resource": "*" nessas políticas.

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": "*" } ] }