View a markdown version of this page

Redes - AWS Lambda

Redes

Você configura o acesso à rede para seu AWS Lambda MicroVMs associando recursos do Network Connector à sua MicroVM em runtime. Os conectores de rede são especificados quando você chama run-microvm e não podem ser alterados enquanto uma microVM está em execução.

Visão geral

Cada microVM pode ter configurações de rede independentes de entrada e saída.

  • Os conectores de rede de entrada permitem a conectividade de entrada. Os clientes se conectam a um endpoint HTTPS gerenciado pelo serviço e o Lambda encaminha o tráfego para as portas que você configurar na microVM. Os conectores de entrada são gerenciados pela AWS: você faz referência a eles pelo ARN ao executar uma microVM.

  • Os conectores de rede de saída permitem o tráfego de saída. Por padrão, as microVMs têm acesso público à internet. Em vez disso, você pode criar um conector de saída de VPC gerenciado pelo cliente para rotear o tráfego de saída pela sua VPC.

Um único conector pode ser reutilizado em várias microVMs. Esse é o padrão de uso pretendido.

Conectividade de entrada

Cada Lambda MicroVM pode ser acessada em um URL de endpoint HTTPS exclusivo, atribuído quando você chama run-microvm. Os clientes enviam solicitações para esse endpoint por HTTPS. O Lambda faz o roteamento de cada solicitação para uma porta dentro da sua microVM, onde sua aplicação a recebe.

Por padrão, as solicitações recebidas no endpoint são roteadas para a porta 8080 dentro da microVM. Para rotear para uma porta diferente, consulte Roteamento de portas.

Os seguintes protocolos são compatíveis com o endpoint de entrada:

  • HTTP/1.1

  • HTTP/2

  • WebSockets

  • gRPC

  • Eventos enviados pelo servidor (Server-Sent Events, SSE)

nota

O tráfego entre seu cliente e o endpoint da microVM é sempre criptografado com TLS. Sua aplicação pode atender a solicitações por HTTP ou HTTPS internamente.

Roteamento de portas

O Lambda seleciona a porta de destino dentro da sua microVM usando a seguinte ordem de prioridade:

  1. Cabeçalho X-aws-proxy-port: para solicitações HTTP padrão, inclua esse cabeçalho com o número da porta de destino.

  2. Subprotocolo WebSocket: se seu cliente WebSocket não puder definir cabeçalhos personalizados, especifique a porta de destino como um subprotocolo chamado lambda-microvms.port.N,em que N é o número da porta. Você fornece subprotocolos ao abrir a conexão WebSocket. Para ver um exemplo, consulte Protocolos.

  3. Padrão (8080): se nenhum padrão for especificado, as solicitações serão roteadas para a porta 8080.

Importante

A porta de destino deve estar dentro das allowedPorts definidas no token de autenticação. Solicitações para portas não autorizadas recebem uma resposta 403 Forbidden.

Autenticação

Todas as solicitações ao endpoint de uma microVM exigem um token de autenticação válido no cabeçalho X-aws-proxy-auth. Você gera tokens usando create-microvm-auth-token. Cada token é uma string JWE (JSON Web Encryption) criptografada com o escopo definido para:

  • Uma microVM específica (identificada por ID).

  • Um conjunto de portas permitidas (porta única, intervalo ou todas as portas).

  • Um tempo de expiração (configurado na criação do token).

O exemplo a seguir cria um token e o usa para enviar uma solicitação autenticada:

aws lambda-microvms create-microvm-auth-token \ --microvm-identifier microvm-id \ --expiration-in-minutes 30 \ --allowed-ports '[{"port":8080}]'
curl 'https://microvm-endpoint' \ -H 'X-aws-proxy-auth: TOKEN' \ -H 'X-aws-proxy-port: 8080'

Para obter uma explicação completa sobre como criar tokens e se conectar a uma microVM, inclusive conexões WebSocket, consulte Conexão a uma microVM.

Respostas de erro

Os seguintes códigos de status HTTP são retornados pelo endpoint da microVM quando ele não consegue processar ou entregar uma solicitação à sua aplicação. Essas respostas vêm do endpoint, não da sua aplicação.

Código Status Causa e resolução
400 Solicitação inválida Solicitação malformada ou cabeçalho de porta ou subprotocolo WebSocket inválido. Verifique o formato.
403 Proibido Token ausente, expirado ou inválido ou a porta solicitada não está em allowedPorts do token. Gere um novo token ou use uma porta permitida.
429 Muitas solicitações Limite de taxa excedido (na conta ou por microVM). Novas tentativas com recuo exponencial.
500 Internal Server Error Ocorreu um erro interno. Repetir a solicitação.
502 Gateway inválido A aplicação não está respondendo ou a retomada automática não foi bem-sucedida no número máximo de novas tentativas de repetição. Consulte Retomada automática.

Cabeçalhos de solicitação

O namespace do cabeçalho X-aws-proxy-* é reservado pelo Lambda para os metadados da solicitação, como o token de autenticação (X-aws-proxy-auth) e a porta de destino (X-aws-proxy-port). O Lambda remove os cabeçalhos X-aws-proxy-* antes de encaminhar a solicitação para a aplicação.

Largura de banda de solicitação/resposta

Cada Lambda MicroVM tem uma largura de banda de solicitação/resposta que escala linearmente com seu tamanho. Essa largura de banda se aplica a todo o tráfego realizado por meio do endpoint da microVM, tanto as solicitações de entrada quanto as respostas de saída.

Tamanho da microVM (referência) Largura de banda máxima
0,5 GB, 0,25 vCPU 1 MB/s (8 Mbps)
1 GB, 0,5 vCPU 2 MB/s (16 Mbps)
2 GB, 1 vCPU 4 MB/s (32 Mbps)
4 GB, 2 vCPU 8 MB/s (64 Mbps)
8 GB, 4 vCPU 16 MB/s (128 Mbps)

Se houver maior latência de solicitações devido à saturação da rede, reduza a simultaneidade da solicitação ou o tamanho da carga útil ou selecione um tamanho maior de microVM para aumentar a largura de banda disponível.

Suporte a HTTP/2

O Lambda MicroVMs oferece suporte a HTTP/2 no endpoint de entrada. O Lambda negocia o protocolo por meio de ALPN (Application-Layer Protocol Negotiation) durante o handshake TLS, dá preferência para HTTP/2 e volta para HTTP/1.1. Um cliente compatível com HTTP/2 o usa automaticamente.

Para usar HTTP/2 entre o endpoint e sua aplicação dentro da microVM:

  • Sua aplicação fornece TLS: o Lambda negocia HTTP/2 com sua aplicação por meio do ALPN, voltando para HTTP/1.1 se o HTTP/2 não for compatível.

  • Sua aplicação fornece HTTP em texto simples: inclua o cabeçalho X-aws-proxy-force-h2: true em sua solicitação para usar HTTP/2 na conexão com sua aplicação.

Conectividade de saída

Por padrão, o Lambda MicroVMs tem acesso público à internet no caminho de saída. Para conectar microVMs com recursos em suas VPCs privadas, como RDS, ElastiCache, APIs internas e sistemas on-premises por meio do Direct Connect ou VPN, crie um Lambda Network Connector com sua configuração de VPC.

Ao usar a saída da VPC, o tráfego de saída está sujeito às regras do grupo de segurança e às ACLs de rede que regem o tráfego na sua VPC.

Trabalho com conectores de rede de saída

Os conectores de rede de saída fazem o roteamento do tráfego de saída de sua MicroVM pela sua VPC. Você cria um conector uma vez e, em seguida, faz referência a ele pelo ARN ao iniciar microVMs por meio do comando run-microvm.

Pré-requisitos

Antes de criar um conector de rede, você precisa de um perfil do IAM que permita ao Lambda criar interfaces de rede elásticas (ENIs) em sua VPC. A função requer as seguintes permissões:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateENI", "Effect": "Allow", "Action": "ec2:CreateNetworkInterface", "Resource": [ "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:security-group/*" ] }, { "Sid": "TagENI", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*:*:network-interface/*", "Condition": { "StringEquals": { "ec2:ManagedResourceOperator": "network-connectors.lambda.amazonaws.com" } } } ] }

Como criar um conector de rede

Crie um conector especificando as sub-redes da VPC, os grupos de segurança e o protocolo de rede (IPv4 ou DualStack):

aws lambda-core create-network-connector \ --name my-connector \ --configuration '{ "VpcEgressConfiguration": { "SubnetIds": ["subnet-xxx"], "SecurityGroupIds": ["sg-xxx"], "NetworkProtocol": "IPv4", "AssociatedComputeResourceTypes": ["MicroVm"] } }' \ --operator-role arn:aws:iam::123456789012:role/NetworkConnectorOperatorRole

Estados do conector de rede

Um conector deve estar no estado ACTIVE antes que você possa fazer referência a ele em run-microvm.

Estado Descrição
PENDING O conector está sendo criado (as ENIs subjacentes estão sendo provisionadas).
ACTIVE O conector está pronto para uso.
INACTIVE O conector está temporariamente inativo.
FAILED Falha no provisionamento ou na atualização. Verificar StateReason.
DELETING O conector está sendo excluído; as ENIs estão sendo limpas.
DELETE_FAILED Falha na exclusão.

Executando uma microVM com um conector de rede

Faça referência ao ARN do conector ao executar uma microVM:

aws lambda-microvms run-microvm \ --image-identifier arn:aws:lambda:us-east-1:123456789012:microvm-image:my-microvm-image \ --egress-network-connectors connector-arn \ --idle-policy '{"maxIdleDurationSeconds":900,"suspendedDurationSeconds":1800,"autoResumeEnabled":false}'
nota

Antes de atualizar ou excluir um conector, certifique-se de que todas as microVMs que o usam tenham sido finalizadas. A modificação de um conector que esteja ativamente em uso pode causar problemas de conectividade de rede na execução de microVMs.

Você pode usar o AWS PrivateLink para conectividade privada na rede da AWS entre os recursos da VPC e o Lambda MicroVMs, sem atravessar a internet pública. O MicroVMs oferece suporte a dois endpoints da VPC, dependendo do destino desejado para o tráfego:

  • APIs de gerenciamento do MicroVM (compilar imagens, executar, suspender, encerrar): usam o endpoint da VPC do Lambda existente (com.amazonaws.region.lambda).

  • Conectividade com o MicroVMs (tráfego HTTPS para as aplicações em execução): usa um endpoint separado (com.amazonaws.region.lambda-microvm).

O Lambda MicroVMs compartilha o mesmo serviço de endpoint da VPC que o Lambda (com.amazonaws.region.lambda). Para obter instruções completas, consulte Criar um endpoint de interface para Lambda.

Para controlar quem pode usar o endpoint de interface e quais ações da API do Lambda MicroVMs ele pode realizar, vincule uma política de endpoint. A política especifica a entidade principal que pode executar ações, quais ações ela pode executar e os recursos no qual ela pode ser executada. As ações do Lambda MicroVMs usam o prefixo de ação lambda: IAM.

Para mais informações, consulte Controlar o acesso a serviços com VPC endpoints no Guia do usuário da Amazon VPC.

O exemplo de política a seguir permite que o usuário MyUser liste e obtenha imagens da microVM por meio do endpoint:

{ "Statement": [ { "Principal": { "AWS": "arn:aws:iam::111122223333:user/MyUser" }, "Effect": "Allow", "Action": [ "lambda:ListMicrovmImages", "lambda:GetMicrovmImage" ], "Resource": "*" } ] }

Para manter privado o tráfego HTTPS em suas microVMs em execução, crie um endpoint de interface para o serviço com.amazonaws.region.lambda-microvm. Esse endpoint manipula as conexões com os URLs do endpoint da microVM (por exemplo, abc123def456.lambda-microvm.us-east-1.on.aws).

Para saber mais sobre as propriedades do endpoint de interface, consulte o guia de endpoints de interface na documentação da Amazon VPC.

Para criar um endpoint de interface para conectividade de microVM (console)

  1. Abra a página Endpoints no console da Amazon VPC.

  2. Escolha Criar endpoint.

  3. Em Categoria de serviço, verifique se a opção Serviços da AWS está selecionada.

  4. Em Nome do serviço, escolha com.amazonaws.region.lambda-microvm. Verifique se o Type (Tipo) é Interface.

  5. Escolher uma VPC e sub-redes

  6. Para habilitar o DNS privado para o endpoint de interface, marque a caixa de seleção Habilitar nome de DNS (recomendado). Isso garante que as solicitações que usarem o nome do host público do endpoint da microVM sejam automaticamente resolvidas no endpoint da interface, sem a necessidade de alterações por parte do cliente.

  7. Em Security group (Grupo de segurança), selecione um ou mais grupos de segurança. O grupo de segurança deve permitir o tráfego TCP de saída na porta 443 para as interfaces de rede do endpoint.

  8. Escolha Criar endpoint.

Para usar a opção de DNS privado, é necessário definir os recursos enableDnsHostnames e enableDnsSupport da sua VPC. Para obter mais informações, consulte Viewing and updating DNS support for your VPC no Guia do usuário da Amazon VPC.

Para criar um endpoint de interface para a conectividade da microVM (CLI da AWS)

aws ec2 create-vpc-endpoint \ --vpc-id vpc-ec43eb89 \ --vpc-endpoint-type Interface \ --service-name com.amazonaws.us-east-1.lambda-microvm \ --subnet-id subnet-abababab \ --security-group-id sg-1a2b3c4d \ --private-dns-enabled

Para verificar se o endpoint está disponível e se o DNS privado está em vigor:

aws ec2 describe-vpc-endpoints \ --vpc-endpoint-ids vpce-1a2b3c4d5e6f7g8h9 \ --query 'VpcEndpoints[0].{State:State,PrivateDns:PrivateDnsEnabled,Dns:DnsEntries[*].DnsName}'

Quando o DNS privado está habilitado: o endpoint gerencia a resolução de DNS para *.lambda-microvm.region.on.aws dentro da sua VPC. Os nomes de host de endpoint atuais da microVM (por exemplo, abc123def456.lambda-microvm.us-east-1.on.aws) são resolvidos para os endereços IP privados das interfaces de rede do endpoint. Nenhuma alteração por parte do cliente é necessária.

Quando o DNS privado está desabilitado: o Amazon VPC gera um nome de DNS específico do endpoint para seu endpoint no formato vpce-id-hash.lambda-microvm.region.vpce.amazonaws.com. Para rotear o tráfego por esse endpoint enquanto ainda acessa a microVM correta, você precisa preservar o nome do host original da microVM em dois lugares:

  • Indicação de nome do servidor do TLS (SNI): o handshake do TLS usa esse valor para identificar para qual microVM a conexão se destina.

  • Cabeçalho do HTTP Host: o proxy usa esse valor para rotear a solicitação para a microVM correta.

Se um dos valores for definido como nome do host do endpoint da VPC em vez do nome do host da microVM, a conexão não poderá ser roteada para a microVM correta.

Exemplo: conexão por meio de um nome de DNS específico do endpoint

O exemplo a seguir usa curl com o sinalizador --connect-to para redirecionar a conexão TCP para endpoint da VPC, enquanto mantém o nome do host da microVM nos cabeçalhos do URL, SNI e Host:

ENDPOINT_HOST=abc123def456.lambda-microvm.us-east-1.on.aws VPCE_HOST=vpce-0a1b2c3d4e5f67890-a1b2c3d4.lambda-microvm.us-east-1.vpce.amazonaws.com curl --connect-to "$ENDPOINT_HOST:443:$VPCE_HOST:443" \ -H "x-aws-proxy-auth: $MICROVM_AUTH_TOKEN" \ -H "x-aws-proxy-port: 8080" \ "https://$ENDPOINT_HOST/"

O sinalizador --connect-to instrui o curl a abrir a conexão TCP com o endereço do endpoint da VPC, enquanto o cabeçalho do URL, TLS SNI e Host permanece definido como o nome do host da microVM.

Para mais informações, consulte Acessar um serviço por um endpoint de interface no Guia do usuário da Amazon VPC.

É possível anexar uma política de endpoint para controlar quais microVMs podem ser acessadas por meio do endpoint da VPC do lambda-microvm. Uma política de endpoint no serviço do lambda-microvm permite que você defina o escopo das conexões com contas ou organizações específicas. Por padrão, o endpoint permite conexões com microVMs em qualquer conta da AWS. (Observação: o cliente que estabelece a conexão ainda precisa ter um token de autenticação de microVM válido para receber acesso).

Por padrão, o endpoint da VPC tem uma política de acesso total que permite todo o tráfego. Quando você substitui a política padrão por uma política personalizada, o Lambda MicroVMs avalia essa política em relação à ação lambda:ConnectMicrovm em cada conexão feita por meio do endpoint. Se a política não permitir a conexão com microVMs, a conexão será rejeitada com uma resposta HTTP 403 Forbidden. Uma política que não concede lambda:ConnectMicrovm nega todas as conexões por meio do endpoint.

nota

A ação lambda:ConnectMicrovm autoriza uma conexão com um endpoint da microVM por meio do endpoint da interface. Essa não é uma operação de API do Lambda e não pode ser usada em políticas baseadas em identidade ou recursos do IAM. Ela é válida somente em uma política de endpoint da VPC.

Entidade principal e recurso

As conexões com um endpoint da microVM são autenticadas com um token de autenticação de microVM, em vez do AWS Signature Versão 4. Por esse motivo, nenhuma entidade principal do IAM está associada à conexão. Em vez disso, o Lambda MicroVMs avalia a política de endpoint com uma entidade principal anônima. Isso significa que:

  • Principal deve ser "*". Uma política que nomeia uma entidade principal específica não corresponde a nada e nega todas as conexões.

  • As chaves de condição que dependem da identidade do solicitante (como aws:PrincipalArn, aws:PrincipalOrgID e aws:userid) não são preenchidas e não serão correspondentes.

  • O Resource também tem de ser "*". O Lambda MicroVMs não define o escopo da avaliação de políticas de endpoints para ARNs de recursos individuais de microVM. Para restringir quais microVMs o endpoint pode acessar, use a chave de condição aws:ResourceAccount em vez do elemento Resource.

Chaves de condição compatíveis

Chave de condição Descrição
aws:ResourceAccount A conta AWS que possui a microVM à qual está sendo conectada.
aws:ResourceOrgID O ID da organização da AWS Organizations da conta proprietária da microVM.
aws:SourceVpce O ID do endpoint da interface pelo qual a conexão passou.
aws:SourceVpc O ID da VPC da qual a conexão se originou.
aws:VpcSourceIp O endereço IP privado do cliente que fez a conexão.

Exemplo: permitir conexões somente com microVMs em sua própria conta

A política de endpoint a seguir permite conexões por meio do endpoint somente para as microVMs pertencentes à conta 111122223333. As conexões com as microVMs pertencentes a qualquer outra conta são negadas.

{ "Statement": [ { "Principal": "*", "Effect": "Allow", "Action": "lambda:ConnectMicrovm", "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceAccount": "111122223333" } } } ] }