Lambda를 위한 Amazon MSK 클러스터 및 Amazon VPC 네트워크 구성
AWS Lambda 함수를 Amazon MSK 클러스터에 연결하려면 클러스터와 해당 클러스터가 상주하는 Amazon Virtual Private Cloud(VPC)를 올바르게 구성해야 합니다. 이 페이지에서는 클러스터와 VPC를 구성하는 방법을 설명합니다. 클러스터와 VPC가 이미 올바르게 구성된 경우 Lambda용 Amazon MSK 이벤트 소스 구성 섹션을 참조하여 이벤트 소스 매핑을 구성합니다.
주제
Lambda 및 MSK 통합을 위한 네트워크 구성 요구 사항 개요
Lambda와 MSK 통합에 필요한 네트워킹 구성은 애플리케이션의 네트워크 아키텍처에 따라 다릅니다. 이 통합에는 Amazon MSK 클러스터, Lambda 함수, Lambda 이벤트 소스 매핑이라는 3개의 주요 리소스가 관련되어 있습니다. 이러한 각 리소스는 서로 다른 VPC에 있습니다.
-
Amazon MSK 클러스터는 일반적으로 사용자가 관리하는 VPC의 프라이빗 서브넷에 상주합니다.
-
Lambda 함수는 Lambda가 소유한 AWS 관리형 VPC에 상주합니다.
-
Lambda 이벤트 소스 매핑은 함수가 포함된 VPC와는 별도로 Lambda가 소유한 다른 AWS 관리형 VPC에 상주합니다.
이벤트 소스 매핑은 MSK 클러스터와 Lambda 함수 사이의 중간 리소스입니다. 이벤트 소스 매핑에는 두 가지 기본 작업이 있습니다. 먼저 MSK 클러스터에서 새로운 메시지를 폴링합니다. 그런 다음 해당 메시지와 함께 Lambda 함수를 간접적으로 호출합니다. 이들 3개의 리소스는 서로 다른 VPC에 있으므로 폴링 및 간접 호출 작업 모두 VPC 간 네트워크 직접 호출이 필요합니다.
이벤트 소스 매핑에 대한 네트워크 구성 요구 사항은 다음 다이어그램과 같이 프로비저닝된 모드와 온디맨드 모드 중 무엇을 사용하는지에 따라 다릅니다.

Lambda 이벤트 소스 매핑이 MSK 클러스터에서 새로운 메시지를 폴링하는 방식은 두 모드 모두에서 동일합니다. 이벤트 소스 매핑과 MSK 클러스터 간의 연결을 설정하기 위해 Lambda는 프라이빗 서브넷에 하이퍼플레인 ENI를 생성하거나 기존 ENI가 있는 경우 이를 재사용하여 보안 연결을 설정합니다. 다이어그램에 나와 있듯이 이 하이퍼플레인 ENI는 Lambda 함수가 아닌 MSK 클러스터의 서브넷과 보안 그룹 구성을 사용합니다.
클러스터에서 메시지를 폴링한 후 Lambda가 함수를 간접적으로 호출하는 방법은 각 모드에서 다릅니다.
-
프로비저닝된 모드에서 Lambda는 이벤트 소스 매핑 VPC와 함수 VPC 간의 연결을 자동으로 처리합니다. 따라서 함수를 간접적으로 호출하기 위해 추가적인 네트워킹 구성 요소가 필요하지 않습니다.
-
온디맨드 모드에서 Lambda 이벤트 소스 매핑은 고객 관리형 VPC를 통한 경로를 통해 함수를 간접적으로 호출합니다. 이러한 이유로 VPC의 퍼블릭 서브넷에 NAT 게이트웨이를 구성하거나 Lambda, AWS Security Token Service(STS), AWS Secrets Manager(선택 사항)에 대한 액세스를 제공하는 VPC의 프라이빗 서브넷에 AWS PrivateLink 엔드포인트를 구성해야 합니다. 이러한 옵션 중 하나를 올바르게 구성하면 함수를 간접적으로 호출하는 데 필요한 VPC와 Lambda 관리형 런타임 VPC 간 연결이 허용됩니다.
NAT 게이트웨이를 사용하면 프라이빗 서브넷의 리소스가 퍼블릭 인터넷에 액세스할 수 있습니다. 이 구성을 사용하면 Lambda 함수를 간접적으로 호출하기 전에 트래픽이 인터넷을 통과하게 됩니다. AWS PrivateLink 엔드포인트를 사용하면 프라이빗 서브넷이 퍼블릭 인터넷을 통과하지 않고도 AWS 서비스 또는 기타 프라이빗 VPC 리소스에 안전하게 연결할 수 있습니다. 이러한 리소스를 구성하는 방법에 대한 자세한 내용은 MSK 이벤트 소스에 대한 NAT 게이트웨이 구성 또는 MSK 이벤트 소스에 대한 AWS PrivateLink 엔드포인트 구성 섹션을 참조하세요.
지금까지는 MSK 클러스터가 VPC 내의 프라이빗 서브넷에 상주한다고 가정했는데, 이는 더 일반적인 경우입니다. 그러나 MSK 클러스터가 VPC 내의 퍼블릭 서브넷에 있더라도 보안 연결을 활성화하도록 AWS PrivateLink 엔드포인트를 구성해야 합니다. 다음 표에는 MSK 클러스터와 Lambda 이벤트 소스 매핑을 구성하는 방법에 따른 네트워킹 구성 요구 사항이 요약되어 있습니다.
MSK 클러스터 위치(고객 관리형 VPC 내) | Lambda 이벤트 소스 매핑 스케일링 모드 | 필수 네트워킹 구성 |
---|---|---|
Private subnet |
온디맨드 모드 |
Lambda, AWS STS 및 Secrets Manager(선택 사항)에 대한 액세스를 활성화하기 위한 NAT 게이트웨이(VPC의 퍼블릭 서브넷 내) 또는 AWS PrivateLink 엔드포인트(VPC의 프라이빗 서브넷 내) |
[Public subnet] |
온디맨드 모드 |
Lambda, AWS STS 및 Secrets Manager(선택 사항)에 대한 액세스를 활성화하기 위한 AWS PrivateLink 엔드포인트(VPC의 퍼블릭 서브넷 내) |
Private subnet |
프로비저닝된 모드 |
없음 |
[Public subnet] |
프로비저닝된 모드 |
없음 |
또한 MSK 클러스터와 연결된 보안 그룹이 올바른 포트를 통해 트래픽을 허용해야 합니다. 다음 보안 그룹 규칙이 구성되어 있는지 확인합니다.
-
인바운드 규칙 - 기본 브로커 포트의 모든 트래픽을 허용합니다. MSK가 사용하는 포트는 클러스터의 인증 유형에 따라 다릅니다. IAM 인증의 경우
9098
, SASL/SCRAM의 경우9096
, TLS의 경우9094
입니다. 또는 자체 참조 보안 그룹 규칙을 사용하여 동일한 보안 그룹 내의 인스턴스에서 액세스를 허용할 수 있습니다. -
아웃바운드 규칙 - 함수가 다른 AWS 서비스와 통신해야 하는 경우 외부 대상에 대한 포트
443
의 모든 트래픽을 허용합니다. 다른 AWS 서비스와 통신할 필요가 없는 경우 자체 참조 보안 그룹 규칙을 사용하여 브로커에 대한 액세스를 제한할 수도 있습니다. -
Amazon VPC 엔드포인트 인바운드 규칙 - Amazon VPC 엔드포인트를 사용하는 경우 엔드포인트와 연결된 보안 그룹이 클러스터의 보안 그룹에서 포트
443
의 인바운드 트래픽을 허용해야 합니다.
MSK 이벤트 소스에 대한 NAT 게이트웨이 구성
이벤트 소스 매핑이 클러스터에서 메시지를 폴링하도록 허용하도록 NAT 게이트웨이를 구성하고 VPC를 통한 경로를 통해 함수를 간접적으로 호출할 수 있습니다. 이는 이벤트 소스 매핑이 온디맨드 모드를 사용하고 클러스터가 VPC의 프라이빗 서브넷 내에 상주하는 경우에만 필요합니다. 클러스터가 VPC의 퍼블릭 서브넷에 상주하거나 이벤트 소스 매핑이 프로비저닝된 모드를 사용하는 경우 NAT 게이트웨이를 구성할 필요가 없습니다.
NAT 게이트웨이를 사용하면 프라이빗 서브넷의 리소스가 퍼블릭 인터넷에 액세스할 수 있습니다. Lambda에 대한 프라이빗 연결이 필요한 경우 MSK 이벤트 소스에 대한 AWS PrivateLink 엔드포인트 구성 섹션을 대신 참조하세요.
NAT 게이트웨이를 구성한 후 적절한 라우팅 테이블을 구성해야 합니다. 이렇게 하면 프라이빗 서브넷의 트래픽이 NAT 게이트웨이를 통해 퍼블릭 인터넷으로 라우팅될 수 있습니다.

다음 단계에서는 콘솔을 사용하여 NAT 게이트웨이를 구성하는 방법을 안내합니다. 각 가용 영역(AZ)에 대해 필요에 따라 이 단계를 반복합니다.
NAT 게이트웨이와 적절한 라우팅을 구성하려면 다음을 수행하세요(콘솔).
-
다음 사항에 유의하여 NAT 게이트웨이 생성의 단계를 따릅니다.
-
NAT 게이트웨이는 항상 퍼블릭 서브넷에 상주해야 합니다. 퍼블릭 연결이 있는 NAT 게이트웨이를 생성합니다.
-
MSK 클러스터가 여러 AZ에 복제되는 경우 AZ당 하나의 NAT 게이트웨이를 생성합니다. 예를 들어, 각 AZ에서 클러스터를 포함하는 프라이빗 서브넷 1개와 NAT 게이트웨이를 포함하는 퍼블릭 서브넷 1개가 VPC에 있어야 합니다. 3개의 AZ를 사용하는 설정의 경우 3개의 프라이빗 서브넷, 3개의 퍼블릭 서브넷, 3개의 NAT 게이트웨이를 갖게 됩니다.
-
-
NAT 게이트웨이를 생성한 후 Amazon VPC 콘솔
을 열고 왼쪽 메뉴에서 라우팅 테이블을 선택합니다. -
라우팅 테이블 생성을 선택합니다.
-
이 라우팅 테이블을 MSK 클러스터가 포함된 VPC와 연결합니다. 선택 사항으로 라우팅 테이블의 이름을 입력합니다.
-
라우팅 테이블 생성을 선택합니다.
-
방금 생성한 라우팅 테이블을 선택합니다.
-
서브넷 연결 탭에서 서브넷 연결 편집을 선택합니다.
-
이 라우팅 테이블을 MSK 클러스터가 포함된 프라이빗 서브넷과 연결합니다.
-
-
라우팅 편집(Edit routes)을 선택합니다.
-
라우팅 추가를 선택합니다.
-
Destination(대상)에
0.0.0.0/0
을 선택합니다. -
대상에서 NAT 게이트웨이를 선택합니다.
-
검색 상자에서 1단계에서 생성한 NAT 게이트웨이를 선택합니다. MSK 클러스터가 포함된 프라이빗 서브넷(6단계에서 이 라우팅 테이블과 연결한 프라이빗 서브넷)과 동일한 AZ의 NAT 게이트웨이여야 합니다.
-
-
변경 사항 저장을 선택합니다.
MSK 이벤트 소스에 대한 AWS PrivateLink 엔드포인트 구성
클러스터에서 메시지를 폴링하도록 허용하도록 AWS PrivateLink 엔드포인트를 구성하고 VPC를 통한 경로를 통해 함수를 간접적으로 호출할 수 있습니다. 이러한 엔드포인트는 MSK 클러스터가 다음에 액세스할 수 있도록 허용해야 합니다.
-
Lambda 서비스
-
AWS Secrets Manager 서비스(선택 사항). 클러스터 인증에 필요한 보안 암호가 Secrets Manager에 저장되어 있는 경우 필수입니다.
이벤트 소스 매핑이 온디맨드 모드를 사용하는 경우에만 PrivateLink 엔드포인트 구성이 필요합니다. 이벤트 소스 매핑이 프로비저닝된 모드를 사용하는 경우 Lambda가 필요한 연결을 설정합니다.
PrivateLink 엔드포인트는 AWS PrivateLink를 통해 AWS 서비스에 대한 보안 프라이빗 액세스를 허용합니다. 또는 MSK 클러스터에 퍼블릭 인터넷에 대한 액세스 권한을 부여하도록 NAT 게이트웨이를 구성하려면 MSK 이벤트 소스에 대한 NAT 게이트웨이 구성 섹션을 참조하세요.
VPC 엔드포인트를 구성한 후 MSK 클러스터에 Lambda, STS 및 Secrets Manager(선택 사항)에 대한 직접 및 프라이빗 액세스 권한이 있어야 합니다.

다음 단계에서는 콘솔을 사용하여 PrivateLink 엔드포인트를 구성하는 방법을 안내합니다. 각 엔드포인트(Lambda, STS, Secrets Manager)에 대해 필요에 따라 다음 단계를 반복합니다.
VPC PrivateLink 엔드포인트를 구성하려면 다음을 수행하세요(콘솔).
-
Amazon VPC 콘솔
을 열고 왼쪽 메뉴에서 엔드포인트를 선택합니다. -
Create endpoint(엔드포인트 생성)을 선택합니다.
-
선택 사항으로 엔드포인트의 이름을 입력합니다.
-
유형에서 AWS 서비스를 선택합니다.
-
서비스에서 서비스 이름 입력을 시작합니다. 예를 들어 Lambda에 연결할 엔드포인트를 생성하려면 검색 상자에
lambda
를 입력합니다. -
결과에 현재 리전의 서비스 엔드포인트가 표시되어야 합니다. 예를 들어, 미국 동부(버지니아 북부) 리전에서는
com.amazonaws.us-east-2.lambda
가 표시되어야 합니다. 이 서비스를 선택합니다. -
네트워크 설정에서 MSK 클러스터가 포함된 VPC를 선택합니다.
-
서브넷에서 MSK 클러스터가 있는 AZ를 선택합니다.
-
각 AZ의 서브넷 ID에서 MSK 클러스터가 포함된 프라이빗 서브넷을 선택합니다.
-
-
보안 그룹에서 MSK 클러스터와 연결된 보안 그룹을 선택합니다.
-
Create endpoint(엔드포인트 생성)을 선택합니다.
기본적으로 Amazon VPC 엔드포인트에는 리소스에 대한 광범위한 액세스를 허용하는 개방형 IAM 정책이 있습니다. 모범 사례는 해당 엔드포인트를 사용하여 필요한 작업을 수행하도록 이러한 정책을 제한하는 것입니다. 예를 들어 Secrets Manager 엔드포인트의 경우 함수의 실행 역할만 보안 암호에 액세스할 수 있도록 정책을 수정할 수 있습니다.
예 VPC 엔드포인트 정책 – Secrets Manager 엔드포인트
{ "Statement": [ { "Action": "secretsmanager:GetSecretValue", "Effect": "Allow", "Principal": { "AWS": [
"arn:aws::iam::123456789012:role/my-role"
] }, "Resource":"arn:aws::secretsmanager:us-west-2:123456789012:secret:my-secret"
} ] }
AWS STS 및 Lambda 엔드포인트의 경우 직접 호출 위탁자를 Lambda 서비스 위탁자로 제한할 수 있습니다. 그러나 이러한 정책에서는 "Resource": "*"
를 사용해야 합니다.
예 VPC 엔드포인트 정책 - AWS STS 엔드포인트
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }
예 VPC 엔드포인트 정책 - Lambda 엔드포인트
{ "Statement": [ { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }