소스로서의 아파치 카프카 스트림 - 아마존 EventBridge

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

소스로서의 아파치 카프카 스트림

Apache Kafka는 데이터 파이프라인 및 스트리밍 분석과 같은 워크로드를 지원하는 오픈 소스 이벤트 스트리밍 플랫폼입니다. Apache Kafka용 아마존 매니지드 스트리밍 (Amazon MSK) 또는 자체 관리형 아파치 Kafka 클러스터를 사용할 수 있습니다. 자체 관리형 클러스터는 AWS 용어로 호스팅되지 않은 모든 Apache Kafka 클러스터를 말합니다. AWS여기에는 직접 관리하는 클러스터와 타사 공급자가 호스팅하는 클러스터 (예:, 또는) 가 모두 포함됩니다. Confluent CloudCloudKarafkaRedpanda

클러스터의 다른 AWS 호스팅 옵션에 대한 자세한 내용은 AWS 빅데이터 블로그의 Apache Kafka 실행 모범 사례를 참조하십시오. AWS

소스로서의 아파치 카프카는 아마존 심플 큐 서비스 (Amazon SQS) 또는 아마존 키네시스를 사용하는 것과 비슷하게 작동합니다. EventBridge소스의 새 메시지를 내부적으로 폴링한 다음 대상을 동기적으로 호출합니다. EventBridge 메시지를 일괄적으로 읽고 이를 함수에 이벤트 페이로드로 제공합니다. 최대 배치 크기는 구성 가능합니다. (기본값은 100개의 메시지입니다.)

Apache Kafka 기반 소스의 경우 배치 창 및 EventBridge 배치 크기와 같은 처리 제어 매개 변수를 지원합니다.

EventBridge 파이프를 호출할 때 이벤트 매개 변수로 메시지 배치를 전송합니다. 이벤트 페이로드에는 메시지 배열이 포함됩니다. 각 배열 항목에는 Apache Kafka 주제 및 Apache Kafka 파티션 식별자에 대한 세부 정보와 함께 타임스탬프 및 base64로 인코딩된 메시지가 포함됩니다.

이벤트 예제

다음 샘플 이벤트는 파이프가 수신한 정보를 보여줍니다. 이 이벤트를 사용하여 이벤트 패턴을 생성 및 필터링하거나 입력 변환을 정의할 수 있습니다. 모든 필드를 필터링할 수 있는 것은 아닙니다. 필터링할 수 있는 필드에 대한 자세한 내용은 아마존 EventBridge 파이프 필터링 섹션을 참조하세요.

[ { "eventSource": "SelfManagedKafka", "bootstrapServers": "b-2.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092,b-1.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092", "eventSourceKey": "mytopic-0", "topic": "mytopic", "partition": 0, "offset": 15, "timestamp": 1545084650987, "timestampType": "CREATE_TIME", "key":"abcDEFghiJKLmnoPQRstuVWXyz1234==", "value":"SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==", "headers": [ { "headerKey": [ 104, 101, 97, 100, 101, 114, 86, 97, 108, 117, 101 ] } ] } ]

Apache Kafka 클러스터 인증

EventBridge Pipes는 자체 관리형 Apache Kafka 클러스터를 사용하여 인증하는 몇 가지 방법을 지원합니다. 지원되는 인증 방법 중 하나를 사용하도록 Apache Kafka 클러스터를 구성해야 합니다. Apache Kafka 보안에 대한 자세한 내용은 Apache Kafka 설명서의 보안 섹션을 참조하세요.

VPC 액세스

VPC 내의 Apache Kafka 사용자만 Apache Kafka 브로커에 액세스할 수 있는 자체 관리형 Apache Kafka 환경을 사용하는 경우 Apache Kafka 소스에서 Amazon VPC (가상 사설 클라우드) 를 구성해야 합니다.

SASL/SCRAM 인증

EventBridge Pipes는 전송 계층 보안 (TLS) 암호화를 통한 단순 인증 및 보안 계층/솔티드 챌린지 응답 인증 메커니즘 (SASL/SCRAM) 인증을 지원합니다. EventBridge Pipes는 암호화된 자격 증명을 전송하여 클러스터에서 인증합니다. SASL/SCRAM 인증에 관한 자세한 내용은 RFC 5802를 참조하세요.

EventBridge 파이프는 TLS 암호화를 통한 SASL/PLAIN 인증을 지원합니다. SASL/PLAIN 인증을 사용하면 Pipes는 자격 증명을 EventBridge 암호화되지 않은 일반 텍스트 (암호화되지 않은) 로 서버에 보냅니다.

SASL 인증의 경우 로그인 자격 증명을 AWS Secrets Manager에 보안 암호로 저장합니다.

상호 TLS 인증

상호 TLS(mTLS)는 클라이언트와 서버 간의 양방향 인증을 제공합니다. 클라이언트는 서버가 클라이언트를 확인할 수 있도록 서버에 인증서를 보내고, 서버는 클라이언트가 서버를 확인할 수 있도록 클라이언트에 인증서를 보냅니다.

자체 관리형 Apache Kafka에서는 파이프가 클라이언트 역할을 합니다. EventBridge Apache Kafka 브로커를 사용하여 EventBridge 파이프를 인증하려면 클라이언트 인증서 (Secrets Manager에서 암호로) 를 구성합니다. 클라이언트 인증서는 서버의 신뢰 저장소에 있는 인증 기관(CA)에서 서명해야 합니다.

Apache Kafka 클러스터는 Pipes로 Apache Kafka 브로커를 인증하기 위해 서버 인증서를 EventBridge Pipes로 전송합니다. EventBridge 서버 인증서는 퍼블릭 CA 인증서 또는 프라이빗 CA/자체 서명 인증서일 수 있습니다. 공개 CA 인증서는 Pipes 신뢰 저장소에 있는 CA에서 서명해야 합니다. EventBridge 사설 CA/자체 서명 인증서의 경우 서버 루트 CA 인증서를 Secrets Manager에서 암호로 구성합니다. EventBridge 파이프는 루트 인증서를 사용하여 Apache Kafka 브로커를 확인합니다.

mTLS에 대한 자세한 내용은 소스로 Amazon MSK에 대한 상호 TLS 인증 도입을 참조하세요.

클라이언트 인증서 비밀 정보 구성

CLIENT_CERTIFICATE_TLS_AUTH 비밀 정보에 인증서 필드와 프라이빗 키 필드가 필요합니다. 암호화된 프라이빗 키의 경우 비밀 정보에 프라이빗 키 암호가 필요합니다. 인증서와 프라이빗 키는 모두 PEM 형식이어야 합니다.

참고

EventBridge Pipes는 PBES1 (PBES2 제외) 개인 키 암호화 알고리즘을 지원합니다.

인증서 필드에는 클라이언트 인증서부터 시작하여 중간 인증서가 이어지고 루트 인증서로 끝나는 인증서 목록이 포함되어야 합니다. 각 인증서는 다음 구조의 새 줄에서 시작해야 합니다.

-----BEGIN CERTIFICATE----- <certificate contents> -----END CERTIFICATE-----

Secrets Manager는 최대 65,536바이트의 보안 정보를 지원하므로 긴 인증서 체인을 위한 충분한 공간입니다.

프라이빗 키는 다음 구조의 PKCS #8 형식이어야 합니다.

-----BEGIN PRIVATE KEY----- <private key contents> -----END PRIVATE KEY-----

암호화된 프라이빗 키의 경우 다음 구조를 사용합니다.

-----BEGIN ENCRYPTED PRIVATE KEY----- <private key contents> -----END ENCRYPTED PRIVATE KEY-----

다음 예제에서는 암호화된 프라이빗 키를 사용한 mTLS 인증용 비밀 정보 콘텐츠를 표시합니다. 암호화된 프라이빗 키의 경우 비밀 정보에 프라이빗 키 암호를 포함합니다.

{ "privateKeyPassword": "testpassword", "certificate": "-----BEGIN CERTIFICATE----- MIIE5DCCAsygAwIBAgIRAPJdwaFaNRrytHBto0j5BA0wDQYJKoZIhvcNAQELBQAw ... j0Lh4/+1HfgyE2KlmII36dg4IMzNjAFEBZiCRoPimO40s1cRqtFHXoal0QQbIlxk cmUuiAii9R0= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFgjCCA2qgAwIBAgIQdjNZd6uFf9hbNC5RdfmHrzANBgkqhkiG9w0BAQsFADBb ... rQoiowbbk5wXCheYSANQIfTZ6weQTgiCHCCbuuMKNVS95FkXm0vqVD/YpXKwA/no c8PH3PSoAaRwMMgOSA2ALJvbRz8mpg== -----END CERTIFICATE-----", "privateKey": "-----BEGIN ENCRYPTED PRIVATE KEY----- MIIFKzBVBgkqhkiG9w0BBQ0wSDAnBgkqhkiG9w0BBQwwGgQUiAFcK5hT/X7Kjmgp ... QrSekqF+kWzmB6nAfSzgO9IaoAaytLvNgGTckWeUkWn/V0Ck+LdGUXzAC4RxZnoQ zp2mwJn2NYB7AZ7+imp0azDZb+8YG2aUCiyqb6PnnA== -----END ENCRYPTED PRIVATE KEY-----" }

서버 루트 CA 인증서 비밀 정보 구성

Apache Kafka 브로커가 프라이빗 CA에서 서명한 인증서로 TLS 암호화를 사용하는 경우 이 비밀 정보를 생성합니다. VPC, SASL/SCRAM, SASL/PLAIN 또는 mTLS 인증에 TLS 암호화를 사용할 수 있습니다.

서버 루트 CA 인증서 비밀 정보에는 PEM 형식의 Apache Kafka 브로커의 루트 CA 인증서가 포함된 필드가 필요합니다. 다음 예제는 비밀 정보의 구조를 보여줍니다.

{ "certificate": "-----BEGIN CERTIFICATE----- MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dG... -----END CERTIFICATE-----"

네트워크 구성

프라이빗 VPC 연결을 사용하는 자체 관리형 Apache Kafka 환경을 사용하는 경우 Apache Kafka 브로커와 연결된 Amazon VPC (가상 사설 클라우드) 리소스에 액세스할 수 EventBridge 있어야 합니다.

  • Apache Kafka 클러스터의 VPC에 액세스하려면 소스의 서브넷에 대한 아웃바운드 인터넷 액세스를 사용할 EventBridge 수 있습니다. 퍼블릭 서브넷의 경우 이는 관리형 NAT 게이트웨이여야 합니다. 프라이빗 서브넷의 경우 이는 NAT 게이트웨이 또는 자체 NAT일 수 있습니다. NAT에 퍼블릭 IP 주소가 있고 인터넷에 연결할 수 있는지 확인합니다.

  • EventBridge 또한 Pipes는 를 통한 AWS PrivateLink이벤트 전달을 지원하므로 공용 인터넷을 통과하지 않고도 Amazon Virtual Private Cloud (Amazon VPC) 에 있는 이벤트 소스에서 Pipes 대상으로 이벤트를 보낼 수 있습니다. 인터넷 게이트웨이를 배포하거나, 방화벽 규칙을 구성하거나, 프록시 서버를 설정할 필요 없이 Pipes를 사용하여 Amazon Managed Streaming for Apache Kafka (Amazon MSK), 자체 관리형 Apache Kafka 및 프라이빗 서브넷에 있는 Amazon MQ 소스에서 폴링할 수 있습니다.

    VPC 엔드포인트를 설정하려면 사용 설명서의 VPC 엔드포인트 만들기를 참조하십시오.AWS PrivateLink 서비스 이름에서 을 선택합니다. com.amazonaws.region.pipes-data

다음 규칙(최소)으로 Amazon VPC 보안 그룹을 구성합니다.

  • 인바운드 규칙 - 소스에 지정된 보안 그룹에 대한 Apache Kafka 브로커 포트의 모든 트래픽을 허용합니다.

  • 아웃바운드 규칙 - 모든 대상에 대해 포트 443의 모든 트래픽을 허용합니다. 소스에 지정된 보안 그룹에 대한 Apache Kafka 브로커 포트의 모든 트래픽을 허용합니다.

    브로커 포트에는 다음이 포함됩니다.

    • 일반 텍스트의 경우 9092

    • TLS의 경우 9094

    • SASL의 경우 9096

    • IAM의 경우 9098

Apache Kafka 소스를 사용한 소비자 자동 스케일링

Apache Kafka 소스를 처음 생성할 때 Kafka 주제의 모든 파티션을 처리하도록 한 명의 EventBridge 소비자를 할당합니다. 각 소비자는 증가한 워크로드를 처리하기 위해 여러 프로세서를 병렬로 실행합니다. 또한 EventBridge 워크로드에 따라 소비자 수를 자동으로 늘리거나 줄입니다. 각 파티션에서 메시지 순서를 유지하기 위해 최대 소비자 수는 주제의 파티션당 하나의 소비자입니다.

1분 간격으로 주제에 있는 모든 파티션의 소비자 오프셋 지연을 EventBridge 평가합니다. 지연이 너무 높으면 파티션이 처리할 수 있는 속도보다 EventBridge 더 빨리 메시지를 수신하는 것입니다. 필요한 경우 주제에 소비자를 EventBridge 추가하거나 제거합니다. 소비자를 추가 또는 제거하는 크기 조정 프로세스는 평가 후 3분 이내에 진행됩니다.

대상에 과부하가 걸리면 소비자 수를 EventBridge 줄이십시오. 이 동작은 소비자가 검색하고 함수에 보낼 수 있는 메시지 수를 줄임으로써 함수의 워크로드를 줄입니다.