Come posso usare le funzioni Lambda in un Amazon VPC per recuperare i segreti di Secrets Manager?
La mia funzione AWS Lambda in un Amazon Virtual Private Cloud (Amazon VPC) non può accedere ad AWS Secrets Manager.
Breve descrizione
Le funzioni Lambda vengono eseguite in un Amazon VPC sicuro con accesso ai servizi AWS e a Internet. Il servizio Lambda possiede questo Amazon VPC e non è connesso al tuo Amazon VPC predefinito.
Le funzioni Lambda connesse al tuo Amazon VPC possono accedere a Internet solo quando configuri Amazon VPC per fornire l'accesso. Le interfacce di rete create da Lambda all'interno di Amazon VPC utilizzano indirizzi IP privati e non possono connettersi a Internet utilizzando un gateway Internet.
Per ulteriori informazioni, consulta Accesso a Internet e ai servizi per funzioni connesse a un VPC.
Nota: È consigliabile non inserire funzioni Lambda in un Amazon VPC a meno che la funzione non debba accedere ad altre risorse in Amazon VPC.
Soluzione
Configurazione della rete Lambda
Per consentire a una funzione Lambda connessa a un Amazon VPC di accedere a Secrets Manager, segui uno dei metodi seguenti:
Collega un gateway NAT a una sottorete privata
Fornisci alla tua funzione l'accesso a Internet. Posiziona la funzione in sottoreti private e indirizza il traffico in uscita verso un gateway NAT in una sottorete pubblica. Il gateway NAT ha un indirizzo IP pubblico e si connette a Internet tramite il gateway Internet del VPC.
Usa un endpoint di interfaccia Amazon VPC
Configura un endpoint di interfaccia Amazon VPC per Secrets Manager. Il tuo Amazon VPC collega quindi Secrets Manager alla tua funzione Lambda senza accesso a Internet. Verifica che il gruppo di sicurezza degli endpoint Amazon VPC consenta il traffico in entrata della porta 443 dal gruppo di sicurezza o dall'intervallo di indirizzi IP Lambda. Verifica anche che il gruppo di sicurezza Lambda consenta il traffico in uscita della porta 443 verso il gruppo di sicurezza degli endpoint Amazon VPC o l'intervallo di indirizzi IP.
**Nota:**Se utilizzi endpoint VPC di AWS PrivateLink, assicurati di configurare le opzioni DHCP con Amazon VPC per sistema dei nomi di dominio (DNS). Per ulteriori informazioni, consulta gli attributi DNS per Amazon VPC.
Ad esempio, il seguente modello di AWS CloudFormation stabilisce una funzione Lambda all'interno della sottorete privata di un VPC. Ciò consente l'accesso privato ad AWS Secrets Manager tramite endpoint 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": "*" } ] }
Autorizzazioni per i ruoli di esecuzione Lambda
Concedi le autorizzazioni al ruolo di esecuzione di Lambda per accedere ai segreti di Secrets Manager. Usa la chiamata all'API GetSecretValue per ottenere il segreto di Secrets Manager. Per ulteriori informazioni, consulta Esempio: Autorizzazione a recuperare valori segreti.
(Facoltativo) Autorizzazioni del Sistema AWS di gestione delle chiavi
Se il segreto di Secrets Manager è crittografato con una chiave gestita dal cliente di AWS KMS anziché con la chiave gestita aws/secretsmanager, è necessaria una configurazione aggiuntiva. Assicurati di consentire l'autorizzazione all'azione dell'API Decrypt come ruolo di esecuzione Lambda o come policy chiave di AWS KMS.
Informazioni correlate
Come posso risolvere i problemi relativi alle autorizzazioni con Lambda?
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa