Lambda용 인바운드 인터페이스 VPC 엔드포인트 연결 - AWS Lambda

Lambda용 인바운드 인터페이스 VPC 엔드포인트 연결

Amazon Virtual Private Cloud(Amazon VPC)를 사용하여 AWS 리소스를 호스팅하는 경우, VPC와 Lambda 간에 연결을 설정할 수 있습니다. 이 연결을 사용하여 공용 인터넷을 통과하지 않고 Lambda 함수를 호출할 수 있습니다.

VPC와 Lambda 간에 프라이빗 연결을 설정하려면 인터페이스 VPC 엔드포인트를 생성합니다. 인터페이스 엔드포인트는 인터넷 게이트웨이, NAT 디바이스, VPN 연결 또는 AWS Direct Connect 연결 없이 비공개로 Lambda API에 액세스할 수 있도록 지원하는 AWS PrivateLink에 의해 구동됩니다. VPC의 인스턴스는 Lambda API와 통신하는 데 퍼블릭 IP 주소가 필요하지 않습니다. VPC와 Lambda 간의 트래픽은 AWS 네트워크를 벗어나지 않습니다.

각 인터페이스 엔드포인트는 서브넷에서 하나 이상의 탄력적 네트워크 인터페이스로 표현됩니다. 네트워크 인터페이스는 트래픽에 대한 진입점 역할을 하는 프라이빗 IP 주소를 Lambda에 제공합니다.

Lambda 인터페이스 엔드포인트의 고려 사항

Lambda에 대한 인터페이스 엔드포인트를 설정하기 전에 Amazon VPC 사용 설명서에서 인터페이스 엔드포인트 속성 및 제한 사항을 검토해야 합니다.

VPC에서 모든 Lambda API 작업을 호출할 수 있습니다. 예를 들어 VPC 내에서 Invoke API를 호출하여 Lambda 함수를 호출할 수 있습니다. Lambda API의 전체 목록은 Lambda API 참조의 작업을 참조하세요.

use1-az3은 Lambda VPC 함수를 위한 제한된 용량 리전입니다. 이 가용 영역의 서브넷을 Lambda 함수와 함께 사용해서는 안 됩니다. 이렇게 하면 운영 중단 시 영역 중복성이 감소할 수 있기 때문입니다.

지속적인 연결을 위한 연결 유지

Lambda는 시간이 지남에 따라 유휴 연결을 제거하므로 지속적인 연결을 유지하려면 연결 유지 지시문을 사용해야 합니다. 함수를 호출할 때 유휴 연결을 재사용하려고 하면 연결 오류가 발생합니다. 지속적인 연결을 유지하려면 런타임과 관련된 연결 유지 지시문을 사용하세요. 예를 들어 AWS SDK for JavaScript 개발자 안내서Node.js에서 연결 유지로 연결 재사용을 참조하세요.

청구 고려 사항

인터페이스 엔드포인트를 통해 Lambda 함수에 액세스하는 데는 추가 비용이 발생하지 않습니다. Lambda 요금에 대한 자세한 내용은 AWS Lambda 요금을 참조하세요.

AWS PrivateLink의 표준 요금이 Lambda의 인터페이스 엔드포인트에 적용됩니다. 각 가용 영역에서 인터페이스 엔드포인트가 프로비저닝된 각 시간과 인터페이스 엔드포인트를 통해 처리된 데이터에 대해 AWS 계정에 요금이 청구됩니다. 인터페이스 엔드포인트 요금에 대한 자세한 내용은 AWS PrivateLink 요금을 참조하세요.

VPC 피어링 고려 사항

VPC 피어링을 사용하여 인터페이스 엔드포인트가 있는 VPC에 다른 VPC를 연결할 수 있습니다. VPC 피어링은 두 VPC 간의 네트워킹 연결입니다. 사용자의 자체 두 VPC 간에 또는 다른 AWS 계정의 VPC와 VPC 피어링 연결을 설정할 수 있습니다. VPC는 두 개의 서로 다른 AWS 리전에 있을 수도 있습니다.

피어링된 VPC 간의 트래픽은 AWS 네트워크에 유지되며 공용 인터넷을 통과하지 않습니다. VPC가 피어링되면 두 VPC의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스, Amazon Relational Database Service(Amazon RDS) 인스턴스 또는 VPC 지원 Lambda 함수와 같은 리소스는 VPC 중 하나에서 생성된 인터페이스 엔드포인트를 통해 Lambda API에 액세스할 수 있습니다.

Lambda에 대한 인터페이스 엔드포인트 생성

Amazon VPC 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 Lambda에 대한 인터페이스 엔드포인트를 생성할 수 있습니다. 자세한 내용은 Amazon VPC 사용 설명서인터페이스 엔드포인트 생성을 참조하세요.

Lambda에 대한 인터페이스 엔드포인트를 생성하려면(콘솔)
  1. Amazon VPC 콘솔의 엔드포인트 페이지를 엽니다.

  2. 엔드포인트 생성을 선택합니다.

  3. [서비스 카테고리(Service category)]에서 AWS 서비스가 선택되어 있는지 확인합니다.

  4. 서비스 이름com.amazonaws.region.lambda를 선택합니다. 유형인터페이스인지 확인합니다.

  5. VPC와 서브넷을 선택합니다.

  6. 인터페이스 엔드포인트에 대한 프라이빗 DNS를 활성화하려면 DNS 이름 활성화 확인란을 선택합니다. AWS 서비스용 VPC 엔드포인트에 프라이빗 DNS 이름을 사용하는 것이 좋습니다. 이렇게 하면 AWS SDK를 통해 이루어진 요청과 같이 퍼블릭 서비스 엔드포인트를 사용하는 요청이 VPC 엔드포인트로 확인됩니다.

  7. 보안 그룹에서 하나 이상의 보안 그룹을 선택합니다.

  8. Create endpoint(엔드포인트 생성)을 선택합니다.

프라이빗 DNS 옵션을 사용하려면 VPC의 enableDnsHostnamesenableDnsSupportattributes를 설정해야 합니다. 자세한 내용은 Amazon VPC 사용 설명서VPC에 대한 DNS 지원 보기 및 업데이트를 참조하세요. 인터페이스 엔드포인트에 프라이빗 DNS를 사용하도록 설정하는 경우, 리전에 대한 기본 DNS 이름(예: lambda.us-east-1.amazonaws.com)을 사용하여 Lambda에 API 요청을 할 수 있습니다. 서비스 엔드포인트에 대한 자세한 내용은 AWS 일반 참조서비스 엔드포인트 및 할당량을 참조하세요.

자세한 내용은 Amazon VPC 사용 설명서인터페이스 엔드포인트를 통해 서비스 액세스를 참조하세요.

AWS CloudFormation을 사용하여 엔드포인트를 생성하고 구성하는 방법에 대한 자세한 내용은 AWS CloudFormation 사용 설명서AWS::EC2::VPCEndpoint 리소스를 참조하세요.

Lambda에 대한 인터페이스 엔드포인트를 생성하려면(AWS CLI)

create-vpc-endpoint 명령을 사용하여 엔드포인트 네트워크 인터페이스와 연결할 VPC ID, VPC 엔드포인트 유형(인터페이스), 서비스 이름, 엔드포인트를 사용할 서브넷 및 보안 그룹을 지정합니다. 예:

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

Lambda에 대한 인터페이스 엔드포인트 정책 생성

인터페이스 엔드포인트를 사용할 수 있는 사용자와 사용자가 액세스할 수 있는 Lambda 함수를 제어하기 위해 엔드포인트에 엔드포인트 정책을 연결할 수 있습니다. 이 정책은 다음 정보를 지정합니다.

  • 작업을 수행할 수 있는 보안 주체.

  • 보안 주체가 수행할 수 있는 작업입니다.

  • 보안 주체가 작업을 수행할 수 있는 리소스입니다.

자세한 내용은 Amazon VPC 사용 설명서VPC 엔드포인트를 통해 서비스에 대한 액세스 제어를 참조하세요.

예: Lambda 작업에 대한 인터페이스 엔드포인트 정책

다음은 Lambda에 대한 엔드포인트 정책의 예입니다. 엔드포인트에 연결된 경우 이 정책을 통해 사용자 MyUsermy-function 함수를 호출할 수 있습니다.

참고

리소스에 정규화된 함수 ARN과 정규화되지 않은 함수 ARN을 모두 포함해야 합니다.

{ "Statement":[ { "Principal": { "AWS": "arn:aws:iam::111122223333:user/MyUser" }, "Effect":"Allow", "Action":[ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:us-east-2:123456789012:function:my-function", "arn:aws:lambda:us-east-2:123456789012:function:my-function:*" ] } ] }