시나리오 2: 보안 팀을 위한 실시간에 가까운 데이터
ABC2Badge는 기업이나 AWS re:Invent
예정된 이벤트의 참석자 수가 많기 때문에 이벤트 보안 팀은 ABC2Badge에 15분마다 캠퍼스에서 사람이 가장 많이 모이는 영역에 대한 데이터를 수집하도록 요청했습니다. 이를 통해 보안 팀은 상황에 대응하고 밀집도에 따라 보안 인력을 분산시킬 충분한 시간을 확보할 수 있습니다. 보안 팀의 새로운 이 요구 사항과 거의 실시간으로 날짜를 처리하는 스트리밍 솔루션을 구축한 경험이 부족하다는 점을 감안하여 ABC2Badge는 간단하면서도 확장 가능하고 신뢰할 수 있는 솔루션을 찾고 있습니다.
이 회사가 현재 사용하는 데이터 웨어하우스 솔루션은 Amazon Redshift
Amazon Kinesis Data Firehose를 사용한 새로운 솔루션
Amazon Kinesis Data Firehose
Amazon Kinesis Data Firehose
Kinesis Data Firehose는 이미 사용 중인 기존 비즈니스 인텔리전스 도구 및 대시보드를 통해 실시간에 가까운 분석을 지원합니다. 또한 완전관리형 서버리스 서비스이므로 데이터 처리량에 대응하여 자동으로 확장되며 지속적인 관리가 필요 없습니다. Kinesis Data Firehose는 데이터를 로드하기 전에 배치, 압축 및 암호화하여 대상 스토리지의 사용량을 최소화하고 보안을 강화할 수 있습니다. AWS Lambda를 사용하여 소스 데이터를 변환하고 변환된 데이터를 대상으로 전달할 수도 있습니다. 데이터를 Kinesis Data Firehose에 전송하도록 데이터 생산자를 구성하면 Amazon Kinesis Data Firehose에서 자동으로 데이터를 사용자가 지정한 대상으로 전송합니다.
Firehose 전송 스트림으로 데이터 전송
전송 스트림으로 데이터를 전송하기 위한 몇 가지 옵션이 있습니다. AWS는 널리 사용되는 여러 프로그래밍 언어에 대한 SDK를 제공하며, 각 SDK는 Amazon Kinesis Data Firehose
Amazon Kinesis 에이전트 사용
Amazon Kinesis 에이전트는 전송 스트림으로 전송될 새 데이터에 대한 로그 파일 세트를 지속적으로 모니터링하는 독립형 소프트웨어 애플리케이션입니다. 에이전트는 파일 교체, 체크포인트 수행, 실패 시 재시도를 자동으로 처리하고 전송 스트림에 대한 모니터링 및 문제 해결을 위해 Amazon CloudWatch 지표를 내보냅니다. 데이터 사전 처리, 여러 파일 디렉터리 모니터링 및 여러 전송 스트림에 쓰기 등의 추가 구성을 에이전트에 적용할 수 있습니다.
에이전트는 Linux 또는 Windows 기반 서버(예: 웹 서버, 로그 서버 및 데이터베이스 서버)에 설치할 수 있습니다. 에이전트를 설치했으면 모니터링할 로그 파일과 에이전트가 전송할 전송 스트림을 지정하기만 하면 됩니다. 에이전트는 새 데이터를 전송 스트림으로 지속적이고 안정적으로 전송합니다.
AWS SDK 및 AWS 서비스와 함께 API를 소스로 사용
Kinesis Data Firehose API는 전송 스트림으로 데이터를 전송하기 위한 두 가지 작업을 제공합니다. PutRecord는 호출 한 번으로 데이터 레코드 하나를 전송합니다. PutRecordBatch는 호출 한 번으로 여러 데이터 레코드를 전송할 수 있으며 생산자당 더 높은 처리량을 달성할 수 있습니다. 이 메서드를 사용할 때는 각 메서드에서 전송 스트림의 이름과 데이터 레코드 또는 데이터 레코드 배열을 지정해야 합니다. Kinesis Data Firehose API 작업에 대한 자세한 내용과 샘플 코드는 Writing to a Firehose Delivery Stream Using the AWS SDK(AWS SDK를 사용하여 Firehose 전송 스트림에 쓰기) 단원을 참조하세요.
Kinesis Data Firehose는 Kinesis Data Firehose, CloudWatch Logs, CloudWatch Events, Amazon Simple Notification Service
대상으로 전송되기 전에 데이터 처리
경우에 따라 스트리밍 데이터가 대상으로 전송되기 전에 스트리밍 데이터를 변환하거나 보완할 수 있습니다. 예를 들어 데이터 생산자가 각 데이터 레코드에서 비정형 텍스트를 보낼 수 있으며, 이러한 데이터는 OpenSearch Service
Kinesis Data Firehose에는 데이터 형식 변환 기능이 내장되어 있습니다. 이를 통해 JSON 데이터 스트림을 Apache Parquet 또는 Apache ORC 파일 형식으로 쉽게 변환할 수 있습니다.
데이터 변환 흐름
스트리밍 데이터 변환을 지원하기 위해 Kinesis Data Firehose는 사용자가 생성한 Lambda 함수를 사용하여 데이터를 변환합니다. Kinesis Data Firehose는 수신 데이터를 함수에 대해 지정된 버퍼 크기로 버퍼링한 다음 지정된 Lambda 함수를 비동기식으로 호출합니다. 변환된 데이터는 Lambda에서 Kinesis Data Firehose로 전송되고, Kinesis Data Firehose는 해당 데이터를 대상으로 전송합니다.
데이터 형식 변환
Kinesis Data Firehose 데이터 형식 변환을 사용하여 JSON 데이터 스트림을 Apache Parquet 또는 Apache ORC로 변환할 수도 있습니다. 이 기능은 JSON만 Apache Parquet 또는 Apache ORC로 변환할 수 있습니다. 데이터가 CSV 형식인 경우 Lambda 함수를 통해 해당 데이터를 JSON으로 변환한 다음 데이터 형식 변환을 적용할 수 있습니다.
데이터 전송
실시간에 가까운 전송 스트림인 Kinesis Data Firehose는 수신 데이터를 버퍼링합니다. 전송 스트림의 버퍼링 임계값에 도달하면 데이터가 구성한 대상으로 전송됩니다. Kinesis Data Firehose가 각 대상으로 데이터를 전송하는 방법에는 몇 가지 차이가 있으며 이 백서의 다음 단원에서 이러한 차이를 검토합니다.
Amazon S3
Amazon S3
Amazon S3으로 데이터 전송
Amazon S3으로 데이터를 전송하는 경우 Kinesis Data Firehose는 전송 스트림의 버퍼링 구성에 따라 수신 레코드 여러 개를 연결한 다음 이를 S3 객체로 Amazon S3에 전송합니다. S3으로의 데이터 전송 빈도는 S3 버퍼 크기(1MB~128MB) 또는 버퍼 간격(60초~900초) 중 먼저 도달하는 값에 따라 결정됩니다.
S3 버킷으로의 데이터 전송은 여러 가지 이유로 실패할 수 있습니다. 예를 들어 버킷이 더 이상 존재하지 않거나 Kinesis Data Firehose에서 수임하는 AWS Identity and Access Management
Amazon Redshift
Amazon Redshift
Amazon Redshift로 데이터 전송
Amazon Redshift로 데이터를 전송하는 경우 Kinesis Data Firehose는 먼저 앞서 설명한 형식으로 수신 데이터를 S3 버킷으로 전송합니다. 그런 다음 Kinesis Data Firehose는 Amazon Redshift COPY 명령을 실행하여 S3 버킷에서 Amazon Redshift 클러스터로 데이터를 로드합니다.
S3에서 Amazon Redshift로의 데이터 COPY 작업의 빈도는 Amazon Redshift 클러스터가 COPY 명령을 완료하는 속도에 따라 다릅니다. Amazon Redshift 대상의 경우 데이터 전송 실패를 처리하기 위해 전송 스트림을 생성할 때 재시도 시간(0초~7,200초)을 지정할 수 있습니다. Kinesis Data Firehose는 지정된 시간 동안 재시도하고 실패한 경우 특정 S3 객체 배치를 건너뜁니다. 건너뛴 객체의 정보는 errors/ 폴더의 매니페스트 파일로 S3 버킷으로 전송되며, 이를 수동 백필에 사용할 수 있습니다.
다음은 Kinesis Data Firehose에서 Amazon Redshift로의 데이터 흐름에 대한 아키텍처 다이어그램입니다. 이 데이터 흐름은 Amazon Redshift에 고유하지만 Kinesis Data Firehose는 다른 대상의 경우에도 유사한 패턴을 따릅니다.
Kinesis Data Firehose에서 Amazon Redshift로의 데이터 흐름
Amazon OpenSearch Service(OpenSearch Service)
OpenSearch Service
OpenSearch Service로 데이터 전송
OpenSearch Service로 데이터를 전송하기 위해 Kinesis Data Firehose는 전송 스트림의 버퍼링 구성에 따라 수신 레코드를 버퍼링한 후 OpenSearch 클러스터로 여러 레코드를 인덱싱하기 위한 OpenSearch 대량 요청을 생성합니다. OpenSearch Service로의 데이터 전송 빈도는 OpenSearch 버퍼 크기(1MB~100MB) 또는 버퍼 간격(60초~900초) 중 먼저 도달하는 값에 따라 결정됩니다.
OpenSearch Service 대상에 대해 전송 스트림 생성 시 재시도 시간(0초~7,200초)을 지정할 수 있습니다. Kinesis Data Firehose는 지정된 시간 동안 재시도한 다음 이 특정 인덱스 요청을 건너뜁니다. 건너뛴 문서는 elasticsearch_failed/ 폴더로 S3 버킷으로 전송되며, 이를 수동 백필에 사용할 수 있습니다.
Amazon Kinesis Data Firehose는 시간을 기준으로 OpenSearch Service 인덱스를 교체할 수 있습니다. 선택한 교체 옵션(NoRotation, OneHour, OneDay, OneWeek 또는 OneMonth)에 따라 Kinesis Data Firehose는 UTC(협정 세계 표준시) 도착 타임스탬프의 일부를 지정된 인덱스 이름에 추가합니다.
사용자 정의 HTTP 엔드포인트 또는 지원되는 서드 파티 서비스 공급자
Kinesis Data Firehose는 사용자 정의 HTTP 엔드포인트 또는 Datadog, Dynatrace, LogicMonitor, MongoDB, New Relic, Splunk, Sumo Logic과 같은 지원되는 서드 파티 공급자로 데이터를 전송할 수 있습니다.
사용자 정의 HTTP 엔드포인트 또는 지원되는 서드 파티 서비스 공급자
Kinesis Data Firehose가 사용자 정의 HTTP 엔드포인트에 데이터를 성공적으로 전송하려면 이러한 엔드포인트가 요청을 수락하고 특정 Kinesis Data Firehose 요청 및 응답 형식을 사용하여 응답을 전송해야 합니다.
지원되는 서드 파티 서비스 공급자가 소유한 HTTP 엔드포인트에 데이터를 전송할 때 통합 AWS Lambda 서비스를 사용하여 수신 레코드를 서비스 공급자의 통합에서 요구하는 형식과 일치하는 형식으로 변환하는 함수를 생성할 수 있습니다.
데이터 전송 빈도의 경우 서비스 공급자마다 권장 버퍼 크기가 있습니다. 권장 버퍼 크기에 대한 자세한 내용은 서비스 공급자에게 문의하세요. 데이터 전송 실패를 처리하기 위해 Kinesis Data Firehose는 먼저 대상으로부터의 응답을 기다린 후 HTTP 엔드포인트와의 연결을 설정합니다. Kinesis Data Firehose는 재시도 기간이 만료될 때까지 계속 연결을 시도합니다. 그 이후에는 Kinesis Data Firehose가 이를 전송 실패로 간주하고 데이터를 S3 버킷에 백업합니다.
요약
Kinesis Data Firehose는 스트리밍 데이터를 지원되는 대상으로 지속적으로 전송할 수 있습니다. 완전관리형 솔루션이므로 개발이 거의 또는 전혀 필요하지 않습니다. ABC2Badge의 경우 Kinesis Data Firehose가 자연스러운 선택이었습니다. 이 회사는 이미 Amazon Redshift를 데이터 웨어하우스 솔루션으로 사용하고 있었습니다. 데이터 원본이 트랜잭션 로그에 지속적으로 기록되기 때문에 Amazon Kinesis 에이전트를 활용하여 추가 코드를 작성하지 않고도 데이터를 스트리밍할 수 있었습니다. 이제 ABC2Badge는 센서 레코드 스트림을 생성하고 Kinesis Data Firehose를 통해 이러한 레코드를 수신하고 있으므로 이를 보안 팀 사용 사례의 기반으로 사용할 수 있습니다.