VPC에서 Lambda 함수에 인터넷 액세스 권한을 부여하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 3월 11일

Amazon Virtual Private Cloud(Amazon VPC)에 연결된 AWS Lambda 함수에 인터넷 액세스를 제공하려고 합니다. 이를 위해 Amazon VPC를 구성하려면 어떻게 해야 합니까?

간략한 설명

Relational Database Service(Amazon RDS) DB 인스턴스 또는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 등의 프라이빗 Amazon VPC 리소스에 액세스하려면 Amazon VPC의 Lambda 함수를 하나 이상의 프라이빗 서브넷과 연결하십시오.

함수에 인터넷 액세스 권한을 부여하려면 연결된 VPC의 퍼블릭 서브넷에 NAT 게이트웨이(또는 NAT 인스턴스)가 있어야 합니다.

참고: 서브넷이 프라이빗인지 아니면 퍼블릭인지 여부는 해당 라우팅 테이블에 따라 달라집니다. 퍼블릭 서브넷에는 인터넷 게이트웨이를 가리키는 경로가 있지만, 프라이빗 서브넷에는 해당 경로가 없습니다.

해결 방법

기존 Amazon VPC를 사용하는 경우 VPC 구성 요소 생성부터 시작하여 NAT 게이트웨이를 포함하는 하나의 퍼블릭 서브넷과 하나 이상의 프라이빗 서브넷을 생성합니다. 기존 VPC에 이미 NAT 게이트웨이를 포함하는 하나의 퍼블릭 서브넷과 하나 이상의 프라이빗 서브넷이 있으면 VPC에 대한 Lambda 실행 역할 생성 단계로 건너뜁니다.

이 설정을 위해 새 VPC를 생성하려면 VPC 마법사를 사용하고 퍼블릭 및 프라이빗 서브넷을 포함하는 VPC를 선택합니다. 자세한 내용은 퍼블릭 서브넷과 프라이빗 서브넷이 있는 VPC(NAT)를 참조하십시오. (Amazon VPC 콘솔에서 서브넷 이름은 상황에 따라 "Public subnet" 및 "Private subnet"입니다.) 그런 다음, VPC에 대한 Lambda 실행 역할 생성 단계로 건너뜁니다.

VPC 구성 요소 생성

  1. VPC에서 둘 이상의 새 서브넷을 생성합니다. 생성 중 [이름 태그]에 서브넷이 퍼블릭인지, 프라이빗인지를 식별하는 데 도움이 되는 이름을 추가합니다. 예를 들어, 하나는 Public Subnet으로, 다른 서브넷은 Private Lambda(또는 프라이빗 서브넷이 여러 개인 경우 Private Lambda 1, Private Lambda 2 등)로 이름을 지정합니다.
    참고: 중복 제거를 위해 서로 다른 가용 영역에서 여러 개의 프라이빗 서브넷을 생성하는 것이 모범 사례이며, 이 경우 Lambda는 함수에 대한 고가용성을 보장할 수 있습니다.
  2. 인터넷 게이트웨이를 생성하여 VPC에 연결합니다.
  3. NAT 게이트웨이를 생성합니다. 생성 중 [서브넷]에서 퍼블릭으로 설정할 서브넷을 선택합니다. (예: 이전에 이름을 지정한 경우 Public Subnet)
    참고: 생성 후 NAT 게이트웨이 테스트에 대한 도움말은 NAT 게이트웨이 테스트를 참조하십시오.

서브넷에 대한 라우팅 테이블 생성 및 수정

참고: Amazon VPC 연결 Lambda 함수는 요청 시 연결된 서브넷을 임의로 선택합니다. 함수가 사용하는 모든 서브넷은 잘못 구성된 서브넷을 사용하는 Lambda로 인해 발생하는 임의의 오류를 방지하기 위해 동일한 구성을 가져야 합니다.

  1. Amazon VPC 콘솔의 [Route Tables] 창에서 VPC에 대한 두 개의 사용자 지정 라우팅 테이블을 생성합니다.
    팁: 생성 중 [Name tag]에 라우팅 테이블이 연결된 서브넷을 식별하는 데 도움이 되는 이름을 추가합니다. 예를 들어, 하나는 Public Subnet으로, 다른 서브넷은 Private Lambda로 이름을 지정합니다.
  2. 퍼블릭 서브넷 라우팅 테이블(Public Subnet)을 퍼블릭으로 설정할 서브넷에 연결합니다.
  3. 이 라우팅 테이블에 새 경로를 추가합니다. 다음을 지정합니다.
    [Destination]에 [0.0.0.0/0]을 입력합니다.
    [Target]에서 [Internet Gateway]를 선택한 다음, 생성한 인터넷 게이트웨이의 ID(igw-123example)를 선택합니다.
    [Save routes]를 선택합니다. 이제 연결된 서브넷은 퍼블릭 서브넷이 됩니다.
  4. 다른 라우팅 테이블(Private Lambda)을 프라이빗 서브넷에 연결합니다.
  5. 이 라우팅 테이블에 새 경로를 추가합니다. 다음을 지정합니다.
    [Destination]에 [0.0.0.0/0]을 입력합니다.
    [Target]에서 [NAT gateway]를 선택한 다음, 생성한 NAT 게이트웨이의 ID(nat-123example)를 선택합니다. (NAT 인스턴스를 사용하는 경우 [Network Interface] 선택)
    [Save routes]를 선택합니다.

참고: NAT 게이트웨이에 대한 경로가 활성 상태여야 합니다. NAT 게이트웨이가 삭제되고 라우팅을 업데이트하지 않은 경우에는 블랙홀 상태가 됩니다. 자세한 내용은 라우팅 테이블 업데이트를 참조하십시오.

네트워크 ACL 구성

Amazon VPC의 기본 네트워크 액세스 제어 목록(ACL)은 모든 인바운드 및 아웃바운드 트래픽을 허용합니다. 네트워크 ACL 규칙을 변경한 경우(또는 변경할 계획인 경우) 여전히 Lambda 함수의 아웃바운드 요청을 허용해야 합니다. 또한 필요에 따라 VPC 구성에 인바운드 트래픽을 허용해야 합니다.

자세한 내용은 Amazon VPC의 Internetwork Traffic Privacy를 참조하십시오.

VPC에 대한 Lambda 실행 역할 생성

  1. AWS Identity and Access Management(IAM) 콘솔의 [Roles] 창에 있는 왼쪽 탐색 창에서 [Create role]을 선택합니다.
  2. [Create role] 페이지에서 다음을 수행합니다.
    [Select type of trusted entity]에서 [AWS service]가 선택되어 있는지 확인합니다.
    [Choose a use case]에서 [Lambda]를 선택합니다.
    [Next: Permissions]를 선택합니다.
  3. [권한 정책 연결]에서 AWSLambdaVPCAccessExecutionRole을 검색합니다. 해당 이름의 정책을 선택하고 [다음: 태그]를 선택합니다.
  4. 선택적으로, 원하는 경우 태그를 추가하고 [Next: Review]를 선택합니다.
  5. [검토]에서 다음을 수행합니다.
    [역할 이름]에서 이 Lambda 실행 역할의 이름을 입력합니다. 예를 들어, lambda_vpc_basic_execution과 같습니다.
    (선택 사항) [역할 설명]에서 기본 설정에 대한 설명을 편집합니다.
    [역할 만들기]를 선택합니다.

자세한 내용은 AWS Lambda 실행 역할을 참조하십시오.

Lambda 함수 구성

  1. Lambda 콘솔의 [Functions] 창에서 Amazon VPC에 연결할 함수의 이름을 선택합니다.
  2. [Configuration] 창의 [Execution role] 아래 [Existing role]에서, 생성한 IAM 실행 역할을 선택합니다. (예: lambda_vpc_basic_execution)
  3. [Configuration] 창의 [VPC]에서 다음을 수행합니다.
    [Virtual Private Cloud(VPC)]에서 VPC를 선택합니다.
    [서브넷]에서 생성한 프라이빗 서브넷을 선택합니다. 서브넷 ID 및 이름을 지정한 경우 서브넷 ID 및 이름으로 서브넷을 식별합니다.
    [보안 그룹]에서 보안 그룹을 선택합니다.
    참고: 기본 보안 그룹을 사용해도 모든 아웃바운드 인터넷 트래픽을 허용하며, 대부분의 경우에 충분합니다. 자세한 내용은 VPC의 보안 그룹을 참조하십시오.
  4. [저장]을 선택합니다.