Como posso usar as funções do Lambda em uma Amazon VPC para recuperar segredos do Secrets Manager?
Minha função do AWS Lambda em uma Amazon Virtual Private Cloud (Amazon VPC) não pode acessar o AWS Secrets Manager.
Breve descrição
As funções do Lambda são executadas em uma Amazon VPC segura com acesso aos serviços da AWS e à Internet. O serviço do Lambda é proprietário dessa Amazon VPC e não está conectado à sua Amazon VPC padrão.
As funções do Lambda que estão conectadas à sua Amazon VPC podem acessar a Internet somente quando você configura sua Amazon VPC para fornecer acesso. As interfaces de rede que o Lambda cria na sua Amazon VPC usam endereços IP privados e não podem se conectar à Internet usando um gateway da internet.
Para obter mais informações, consulte Acesso aos serviços e à Internet para funções conectadas à VPC.
Observação: é uma prática recomendada não colocar funções do Lambda em uma Amazon VPC, a menos que a função precise acessar outros recursos na Amazon VPC.
Resolução
Configuração de rede do Lambda
Para permitir que uma função do Lambda conectada a uma Amazon VPC acesse o Secrets Manager, execute uma das seguintes ações:
**Anexe um gateway NAT a uma sub-rede privada **
Dê à sua função acesso à Internet. Coloque a função em sub-redes privadas e direcione o tráfego de saída para um gateway NAT em uma sub-rede pública. O gateway NAT tem um endereço IP público e se conecta à Internet por meio do gateway da internet da VPC.
Use um endpoint de interface da Amazon VPC
Configure um endpoint de interface da Amazon VPC para o Secrets Manager. Em seguida, seu Amazon VPC conecta o Secrets Manager a partir da sua função do Lambda sem acesso à Internet. Certifique-se de que o grupo de segurança do endpoint da Amazon VPC permita o tráfego de entrada da porta 443 do grupo de segurança ou do intervalo de endereços IP do Lambda. Além disso, verifique se o grupo de segurança do Lambda permite o tráfego de saída da porta 443 para o grupo de segurança ou intervalo de endereços IP do endpoint da Amazon VPC.
Observação: se você usa endpoints da VPC do AWS PrivateLink, certifique-se de configurar as opções de DHCP com sua Amazon VPC para Sistema de Nomes de Domínio (DNS). Para obter mais informações, consulte Atributos de DNS para sua VPC.
Por exemplo, o seguinte modelo do AWS CloudFormation estabelece uma função do Lambda dentro da sub-rede privada de uma VPC. Isso permite acesso privado ao AWS Secrets Manager por meio de endpoints da VPC:
AWSTemplateFormatVersion: "2010-09-09" Description: "Lambda Secrets Manager" Resources: EC2SecurityGroup: Type: "AWS::EC2::SecurityGroup" Properties: GroupDescription: "launch-wizard-19 created 2022-03-23T11:10:16.721+05:30" GroupName: "launch-wizard-19" VpcId: !Ref EC2VPC SecurityGroupIngress: - CidrIp: "10.0.0.0/16" FromPort: 443 IpProtocol: "tcp" ToPort: 443 SecurityGroupEgress: - CidrIp: "10.0.0.0/16" FromPort: 443 IpProtocol: "tcp" ToPort: 443 LambdaFunction: Type: "AWS::Lambda::Function" Properties: Description: "AWS Lambda to AWS Secrets Manager" FunctionName: "SecretsManagerLambda" Handler: "index.lambda_handler" Architectures: - "x86_64" Code: ZipFile: | import json import boto3 client = boto3.client('secretsmanager') def lambda_handler(event, context): response = client.get_secret_value( SecretId='string', VersionId='string', VersionStage='string' ) print(response) # TODO implement return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') } MemorySize: 128 Role: !GetAtt IAMRole.Arn Runtime: "python3.11" Timeout: 30 TracingConfig: Mode: "PassThrough" EphemeralStorage: Size: 512 VpcConfig: SecurityGroupIds: - !Ref EC2SecurityGroup SubnetIds: - !Ref EC2Subnet EC2VPC: Type: "AWS::EC2::VPC" Properties: CidrBlock: "10.0.0.0/16" EnableDnsSupport: true EnableDnsHostnames: true InstanceTenancy: "default" EC2Subnet: Type: "AWS::EC2::Subnet" Properties: AvailabilityZone: !Sub "${AWS::Region}b" CidrBlock: "10.0.7.0/24" VpcId: !Ref EC2VPC MapPublicIpOnLaunch: false Tags: - Key: "Name" Value: "Private-new-availability" EC2VPCEndpoint: Type: "AWS::EC2::VPCEndpoint" Properties: VpcEndpointType: "Interface" VpcId: !GetAtt EC2Subnet.VpcId ServiceName: !Sub "com.amazonaws.${AWS::Region}.secretsmanager" PolicyDocument: | { "Statement": [ { "Action": "*", "Effect": "Allow", "Principal": "*", "Resource": "*" } ] } SubnetIds: - !Ref EC2Subnet PrivateDnsEnabled: true SecurityGroupIds: - !Ref EC2SecurityGroup IAMRole: Type: "AWS::IAM::Role" Properties: Path: "/" RoleName: "Lambdapermissions" AssumeRolePolicyDocument: "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}" ManagedPolicyArns: - !Ref IAMManagedPolicy Description: "Allows Lambda functions to call AWS services on your behalf." IAMManagedPolicy: Type: "AWS::IAM::ManagedPolicy" Properties: ManagedPolicyName: "LambdaSecretsPolicy" Path: "/" PolicyDocument: | { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "ec2:CreateNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DeleteNetworkInterface" ], "Resource": "*" } ] }
Permissões de perfil de execução do Lambda
Conceda permissões ao perfil de execução do Lambda para acessar os segredos do Secrets Manager. Use a chamada da API GetSecretValue para obter o segredo do Secrets Manager. Para obter mais informações, consulte Exemplo: permissão para recuperar valores de segredos.
(Opcional) Permissões do AWS Key Management Service (AWS KMS)
Se o segredo do Secrets Manager for criptografado com uma chave gerenciada pelo cliente do AWS KMS em vez da chave gerenciada aws/secretsmanager, será necessária uma configuração adicional. Certifique-se de autorizar a permissão de ação da API Decrypt como perfil de execução do Lambda ou política de chaves do AWS KMS.
Informações relacionadas
Conteúdo relevante
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 3 anos