Lambda용 자체 관리형 Apache Kafka 클러스터 및 네트워크 구성
Lambda용 자체 관리형 Apache Kafka 클러스터 및 네트워크 구성 (Configuring your self-managed Apache Kafka cluster and network for Lambda)
Lambda 함수를 자체 관리형(self-managed) Apache Kafka 클러스터에 연결하려면 클러스터와 그 클러스터가 있는 네트워크를 올바르게 구성해야 합니다. 이 페이지는 클러스터와 네트워크를 구성하는 방법을 설명합니다. 클러스터와 네트워크가 이미 올바르게 구성되어 있다면 Lambda용 자체 관리형 Apache Kafka 이벤트 소스 구성을 참조해 이벤트 소스 매핑을 구성하세요.
본문
자체 관리형 Apache Kafka 클러스터 설정
Confluent Cloud나 Redpanda 같은 클라우드 공급자로 자체 관리형 Apache Kafka 클러스터를 호스팅하거나 자체 인프라에서 실행할 수 있습니다. Lambda 이벤트 소스 매핑이 연결하는 네트워크에서 클러스터가 올바르게 구성되고 액세스 가능한지 확인하세요.
네트워크 보안 구성
이벤트 소스 매핑을 통해 Lambda에 자체 관리형 Apache Kafka에 대한 전체 액세스 권한을 부여하려면 클러스터가 공개 엔드포인트(공개 IP 주소)를 사용하거나, 클러스터를 만든 Amazon VPC에 대한 액세스를 제공해야 합니다.
Lambda와 함께 자체 관리형 Apache Kafka를 사용할 때는 함수가 Amazon VPC의 리소스에 액세스할 수 있게 하는 AWS PrivateLink VPC 엔드포인트를 만드세요.
참고
AWS PrivateLink VPC 엔드포인트는 이벤트 폴러에 기본(온디맨드) 모드를 사용하는 이벤트 소스 매핑이 있는 함수에 필요합니다. 이벤트 소스 매핑이 프로비저닝 모드를 사용하면 AWS PrivateLink VPC 엔드포인트를 구성할 필요가 없습니다.
다음 리소스에 액세스할 수 있게 엔드포인트를 만드세요:
- Lambda — Lambda 서비스 보안 주체에 대한 엔드포인트를 만듭니다.
- AWS STS — 서비스 보안 주체가 사용자를 대신해 역할을 수임할 수 있도록 AWS STS에 대한 엔드포인트를 만듭니다.
- Secrets Manager — 클러스터가 자격 증명을 저장하는 데 Secrets Manager를 사용하면 Secrets Manager에 대한 엔드포인트를 만듭니다.
또는 Amazon VPC의 각 공용 서브넷에 NAT 게이트웨이를 구성하세요. 자세한 내용은 VPC 연결 Lambda 함수에 대한 인터넷 액세스 활성화를 참조하세요.
자체 관리형 Apache Kafka에 대한 이벤트 소스 매핑을 만들 때 Lambda는 Amazon VPC에 대해 구성된 서브넷과 보안 그룹에 탄력적 네트워크 인터페이스(ENI)가 이미 있는지 확인합니다. Lambda가 기존 ENI를 찾으면 재사용하려고 시도합니다. 그렇지 않으면 Lambda는 새 ENI를 만들어 이벤트 소스에 연결하고 함수를 호출합니다.
참고
Lambda 함수는 항상 Lambda 서비스가 소유한 VPC 안에서 실행됩니다. 함수의 VPC 구성은 이벤트 소스 매핑에 영향을 주지 않습니다. Lambda가 이벤트 소스에 연결하는 방식을 결정하는 것은 이벤트 소스의 네트워킹 구성뿐입니다.
클러스터가 포함된 Amazon VPC의 보안 그룹을 구성하세요. 기본적으로 자체 관리형 Apache Kafka는 9092 포트를 사용합니다.
- 인바운드 규칙 — 이벤트 소스와 연결된 보안 그룹에 대해 기본 브로커 포트에서 모든 트래픽을 허용합니다. 또는 자체 참조 보안 그룹 규칙을 사용해 같은 보안 그룹 내 인스턴스의 액세스를 허용할 수 있습니다.
- 아웃바운드 규칙 — 함수가 AWS 서비스와 통신해야 하면 외부 대상에 대해
443포트의 모든 트래픽을 허용합니다. 또는 다른 AWS 서비스와 통신할 필요가 없으면 자체 참조 보안 그룹 규칙을 사용해 브로커에 대한 액세스를 제한할 수 있습니다. - Amazon VPC 엔드포인트 인바운드 규칙 — Amazon VPC 엔드포인트를 사용하는 경우 Amazon VPC 엔드포인트와 연결된 보안 그룹이 클러스터 보안 그룹에서
443포트의 인바운드 트래픽을 허용해야 합니다.
클러스터가 인증을 사용하면 Secrets Manager 엔드포인트의 엔드포인트 정책도 제한할 수 있습니다. Secrets Manager API를 호출할 때 Lambda는 Lambda 서비스 보안 주체가 아니라 함수 역할을 사용합니다.
예시 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"
}
]
}
Amazon VPC 엔드포인트를 사용하면 AWS는 엔드포인트의 탄력적 네트워크 인터페이스(ENI)를 사용해 함수를 호출하는 API 호출을 라우팅합니다. Lambda 서비스 보안 주체는 이러한 ENI를 사용하는 모든 역할과 함수에서 lambda:InvokeFunction을 호출할 수 있어야 합니다.
기본적으로 Amazon VPC 엔드포인트는 리소스에 대한 광범위한 액세스를 허용하는 개방형 IAM 정책을 갖습니다. 모범 사례는 이러한 정책을 제한해 해당 엔드포인트로 필요한 작업만 수행하는 것입니다. 이벤트 소스 매핑이 Lambda 함수를 호출할 수 있게 하려면 VPC 엔드포인트 정책이 Lambda 서비스 보안 주체가 sts:AssumeRole 및 lambda:InvokeFunction을 호출하도록 허용해야 합니다. VPC 엔드포인트 정책을 조직 내에서 시작된 API 호출만 허용하도록 제한하면 이벤트 소스 매핑이 제대로 작동하지 않으므로 이러한 정책에는 "Resource": "*"가 필요합니다.
다음 예제 VPC 엔드포인트 정책은 AWS STS 및 Lambda 엔드포인트에 대해 Lambda 서비스 보안 주체에 필요한 액세스 권한을 부여하는 방법을 보여줍니다.
예시 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": "*"
}
]
}
더 알아보기 (Learn more)
- 자체 관리형 Apache Kafka 이벤트 소스 구성
- Lambda VPC 연결
- AWS PrivateLink VPC 엔드포인트