VPC에서 리소스에 액세스하도록 Lambda 함수 구성 - AWS Lambda

VPC에서 리소스에 액세스하도록 Lambda 함수 구성

사용자는 본인의 계정에서 VPC(Virtual Private Cloud)의 프라이빗 서브넷에 연결되도록 함수를 구성할 수 있습니다. Amazon Virtual Private Cloud(Amazon VPC)를 사용하여 데이터베이스, 캐시 인스턴스, 내부 서비스 등과 같은 리소스에 대해 프라이빗 네트워크를 생성하십시오. 함수를 VPC에 연결하여 실행 중 프라이빗에 리소스에 액세스합니다.

함수를 VPC에 연결하려면

  1. Lambda 콘솔을 엽니다.

  2. 함수를 선택합니다.

  3. VPC에서 편집을 선택합니다.

  4. 사용자 지정 VPC를 선택합니다.

  5. VPC, 서브넷 및 보안 그룹을 선택합니다.

    참고

    함수를 프라이빗 서브넷에 연결하여 프라이빗 리소스에 액세스합니다. 함수에 인터넷 액세스가 필요한 경우 NAT를 사용합니다. 함수를 퍼블릭 서브넷에 연결해도 인터넷 액세스 또는 퍼블릭 IP 주소는 제공되지 않습니다.

  6. 저장을 선택합니다.

함수를 VPC에 연결하면 Lambda는 함수의 VPC 구성에서 보안 그룹과 서브넷의 각 조합에 대해 탄력적 네트워크 인터페이스를 생성합니다. 이 프로세스는 1분 정도 걸릴 수 있습니다. 이 시간 동안에는 버전 생성 또는 함수 코드 업데이트와 같이 함수를 대상으로 하는 추가 작업을 수행할 수 없습니다. 새 함수의 경우 상태가 Pending에서 Active로 전환될 때까지 함수를 호출할 수 없습니다. 기존 함수의 경우 업데이트가 진행 중인 동안에도 이전 버전을 호출할 수 있습니다. 함수 상태에 대한 자세한 내용은 Lambda API를 사용하여 함수 상태 모니터링 단원을 참조하십시오.

동일한 서브넷에 연결된 여러 함수가 네트워크 인터페이스를 공유하므로, Lambda 관리형 네트워크 인터페이스가 이미 있는 서브넷에 추가 함수를 연결하는 것이 훨씬 더 빠릅니다. 하지만 함수가 많이 있거나 사용량이 매우 많은 함수가 있는 경우 Lambda는 추가 네트워크 인터페이스를 생성할 수 있습니다.

함수가 장기간 동안 활성 상태가 아니면 Lambda는 네트워크 인터페이스를 회수하고 함수는 Idle 상태가 됩니다. 유휴 함수를 호출하여 함수를 다시 활성화합니다. 첫 번째 호출이 실패하고 네트워크 인터페이스가 사용 가능할 때까지 함수가 다시 보류 상태로 바뀝니다.

Lambda 함수는 전용 인스턴스 테넌시를 사용하여 VPC에 직접 연결할 수 없습니다. 전용 VPC의 리소스에 연결하려면, 기본 테넌시를 사용하여 두 번째 VPC에 피어로 연결합니다.

실행 역할 및 사용자 권한

Lambda는 함수의 권한을 사용하여 네트워크 인터페이스를 생성하고 관리합니다. VPC로의 연결을 위해서는 함수의 실행 역할에 다음 권한이 주어져야 합니다.

실행 역할 권한

  • ec2:CreateNetworkInterface

  • ec2:DescribeNetworkInterfaces

  • ec2:DeleteNetworkInterface

이러한 권한은 AWSLambdaVPCAccessExecutionRole 관리형 정책에 포함됩니다.

VPC 연결을 구성할 때 Lambda는 사용자의 권한을 사용하여 네트워크 리소스를 확인합니다. VPC에 연결하도록 함수를 구성하려면 IAM 사용자는 다음 권한이 필요합니다.

사용자 권한

  • ec2:DescribeSecurityGroups

  • ec2:DescribeSubnets

  • ec2:DescribeVpcs

Lambda API를 사용한 Amazon VPC 액세스 구성

다음 API를 사용하여 함수를 VPC에 연결할 수 있습니다.

AWS CLI를 사용하여 생성하는 동안 VPC에 함수를 연결하려면 프라이빗 서브넷 ID 및 보안 그룹 목록과 함께 vpc-config 옵션을 사용합니다. 다음 예제에서는 두 개의 서브넷과 하나의 보안 그룹이 있는 VPC에 연결하여 함수를 생성합니다.

$ aws lambda create-function --function-name my-function \ --runtime nodejs12.x --handler index.js --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/lambda-role \ --vpc-config SubnetIds=subnet-071f712345678e7c8,subnet-07fd123456788a036,SecurityGroupIds=sg-085912345678492fb

기존 함수에 연결하려면 update-function-configuration 명령과 함께 vpc-config 옵션을 사용하십시오.

$ aws lambda update-function-configuration --function-name my-function \ --vpc-config SubnetIds=subnet-071f712345678e7c8,subnet-07fd123456788a036,SecurityGroupIds=sg-085912345678492fb

VPC에서 함수를 연결 해제하려면 서브넷 및 보안 그룹의 빈 목록을 사용하여 함수 구성을 업데이트하십시오.

$ aws lambda update-function-configuration --function-name my-function \ --vpc-config SubnetIds=[],SecurityGroupIds=[]

VPC 연결 함수의 인터넷 및 서비스 액세스

기본적으로 Lambda은 AWS 서비스 액세스 및 인터넷을 통해 안전한 VPC에서 함수를 실행합니다. VPC는 Lambda가 소유하며 계정의 기본 VPC에 연결되지 않습니다. 계정에서 VPC에 함수를 연결할 때 VPC가 액세스 권한을 제공하지 않으면 함수는 인터넷에 액세스할 수 없습니다.

참고

일부 서비스에서는 VPC 엔드포인트를 제공합니다. VPC 엔드포인트를 사용하면 VPC 내에서 인터넷 액세스 없이 AWS 서비스에 연결할 수 있습니다.

프라이빗 서브넷에서의 인터넷 액세스에는 NAT(Network Address Translation)가 필요합니다. 함수에 인터넷 액세스 권한을 부여하려면 아웃바운드 트래픽을 퍼블릭 서브넷의 NAT 게이트웨이로 라우팅합니다. NAT 게이트웨이는 퍼블릭 IP 주소가 있으므로 VPC의 인터넷 게이트웨이를 통해 인터넷에 연결할 수 있습니다. 자세한 내용은 Amazon VPC 사용 설명서NAT 게이트웨이를 참조하십시오.

샘플 VPC 구성

이 설명서의 GitHub 리포지토리에서 Lambda 함수에 사용할 수 있는 VPC 구성에 대한 샘플 AWS CloudFormation 템플릿을 사용할 수 있습니다. 다음과 같은 두 개의 템플릿이 있습니다.

  • vpc-private.yaml – Amazon Simple Storage Service 및 Amazon DynamoDB에 대한 두 개의 프라이빗 서브넷과 VPC 엔드포인트가 있는 VPC입니다. 이 템플릿을 사용하면 인터넷 액세스가 필요하지 않은 함수에 대한 VPC를 만들 수 있습니다. 이 구성은 AWS SDK에서의 Amazon S3 및 DynamoDB 사용을 지원하며, 로컬 네트워크 연결을 통해 동일한 VPC에 있는 데이터베이스 리소스에 대한 액세스를 지원합니다.

  • vpc-privatepublic.yaml – 두 개의 프라이빗 서브넷, VPC 엔드포인트, NAT 게이트웨이가 포함된 퍼블릭 서브넷 및 인터넷 게이트웨이가 있는 VPC입니다. 프라이빗 서브넷의 함수에서 발생하는 인터넷 바인딩된 트래픽은 라우팅 테이블을 통해 NAT 게이트웨이로 라우팅됩니다.

템플릿을 사용하여 VPC를 만들려면 AWS CloudFormation 콘솔에서 스택 생성을 선택하고 지침에 따르십시오.