View a markdown version of this page

시나리오 2: 보안 팀을 위한 실시간에 가까운 데이터 - Amazon Kinesis를 사용한 AWS 기반 스트리밍 데이터 솔루션

시나리오 2: 보안 팀을 위한 실시간에 가까운 데이터

ABC2Badge는 기업이나 AWS re:Invent와 같은 대규모 이벤트를 위해 센서와 배지를 제공하는 회사입니다. 사용자가 이벤트에 등록하면 캠퍼스 전체에서 센서가 감지하는 고유한 배지를 받습니다. 사용자가 센서를 통과하면 익명화된 정보가 관계형 데이터베이스에 기록됩니다.

예정된 이벤트의 참석자 수가 많기 때문에 이벤트 보안 팀은 ABC2Badge에 15분마다 캠퍼스에서 사람이 가장 많이 모이는 영역에 대한 데이터를 수집하도록 요청했습니다. 이를 통해 보안 팀은 상황에 대응하고 밀집도에 따라 보안 인력을 분산시킬 충분한 시간을 확보할 수 있습니다. 보안 팀의 새로운 이 요구 사항과 거의 실시간으로 날짜를 처리하는 스트리밍 솔루션을 구축한 경험이 부족하다는 점을 감안하여 ABC2Badge는 간단하면서도 확장 가능하고 신뢰할 수 있는 솔루션을 찾고 있습니다.

이 회사가 현재 사용하는 데이터 웨어하우스 솔루션은 Amazon Redshift입니다. ABC2Badge는 Amazon Kinesis 서비스의 기능을 검토하면서 Amazon Kinesis Data Firehose가 데이터 레코드 스트림을 수신하고 버퍼 크기 또는 시간 간격에 따라 레코드를 배치 처리한 후 Amazon Redshift에 삽입할 수 있음을 알게 되었습니다. 이에 따라 Kinesis Data Firehose 전송 스트림을 생성하고 5분마다 Amazon Redshift 테이블에 데이터를 복사하도록 구성했습니다. 이 새로운 솔루션의 일환으로 서버에서 Amazon Kinesis 에이전트를 사용했습니다. Kinesis Data Firehose는 5분마다 Amazon Redshift로 데이터를 로드합니다. 그러면 비즈니스 인텔리전스(BI) 팀이 분석을 수행하고 15분마다 보안 팀에 데이터를 전송할 수 있습니다.

Amazon Kinesis Data Firehose를 사용한 새로운 솔루션

Amazon Kinesis Data Firehose를 사용한 새로운 솔루션

Amazon Kinesis Data Firehose

Amazon Kinesis Data Firehose는 스트리밍 데이터를 AWS로 로드하는 가장 쉬운 방법입니다. Amazon Kinesis Data Firehose는 스트리밍 데이터를 캡처 및 변환하고 Amazon Kinesis Data Analytics, Amazon Simple Storage Service(Amazon S3), Amazon Redshift, Amazon OpenSearch Service(OpenSearch Service) 및 Splunk로 로드할 수 있습니다. 또한 Kinesis Data Firehose는 스트리밍 데이터를 사용자 정의 HTTP 엔드포인트 또는 지원되는 서드 파티 서비스 공급자가 소유한 HTTP 엔드포인트로 로드할 수 있습니다.

Kinesis Data Firehose는 이미 사용 중인 기존 비즈니스 인텔리전스 도구 및 대시보드를 통해 실시간에 가까운 분석을 지원합니다. 또한 완전관리형 서버리스 서비스이므로 데이터 처리량에 대응하여 자동으로 확장되며 지속적인 관리가 필요 없습니다. Kinesis Data Firehose는 데이터를 로드하기 전에 배치, 압축 및 암호화하여 대상 스토리지의 사용량을 최소화하고 보안을 강화할 수 있습니다. AWS Lambda를 사용하여 소스 데이터를 변환하고 변환된 데이터를 대상으로 전달할 수도 있습니다. 데이터를 Kinesis Data Firehose에 전송하도록 데이터 생산자를 구성하면 Amazon Kinesis Data Firehose에서 자동으로 데이터를 사용자가 지정한 대상으로 전송합니다.

Firehose 전송 스트림으로 데이터 전송

전송 스트림으로 데이터를 전송하기 위한 몇 가지 옵션이 있습니다. AWS는 널리 사용되는 여러 프로그래밍 언어에 대한 SDK를 제공하며, 각 SDK는 Amazon Kinesis Data Firehose용 API를 제공합니다. AWS에는 전송 스트림으로 데이터를 전송하는 데 사용할 수 있는 유틸리티가 있습니다. Kinesis Data Firehose는 다른 AWS 서비스와 통합되어 해당 서비스에서 전송 스트림으로 직접 데이터를 전송합니다.

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(Amazon SNS), Amazon API GatewayAWS IoT와도 함께 실행됩니다. 확장 가능하고 안정적으로 데이터 스트림, 로그, 이벤트 및 IoT 데이터를 Kinesis Data Firehose 대상으로 직접 전송할 수 있습니다.

대상으로 전송되기 전에 데이터 처리

경우에 따라 스트리밍 데이터가 대상으로 전송되기 전에 스트리밍 데이터를 변환하거나 보완할 수 있습니다. 예를 들어 데이터 생산자가 각 데이터 레코드에서 비정형 텍스트를 보낼 수 있으며, 이러한 데이터는 OpenSearch Service로 전송하기 전에 JSON으로 변환해야 합니다. 또는 JSON 데이터를 Amazon S3에 저장하기 전에 Apache Parquet 또는 Apache ORC와 같은 열 형식 파일로 변환할 수도 있습니다.

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은 간단한 웹 서비스 인터페이스를 통해 웹 어디서나 원하는 양의 데이터를 저장 및 검색할 수 있는 객체 스토리지입니다. 99.999999999%의 내구성을 제공하며, 전 세계적으로 수조 이상의 객체로 확장할 수 있도록 설계되었습니다.

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(IAM) 역할에 버킷에 대한 액세스 권한이 없을 수 있습니다. 이러한 경우 Kinesis Data Firehose는 전송에 성공할 때까지 최대 24시간 동안 계속 다시 시도합니다. Kinesis Data Firehose의 최대 데이터 저장 시간은 24시간입니다. 24시간 넘게 데이터 전송에 실패할 경우 데이터가 손실됩니다.

Amazon Redshift

Amazon Redshift는 속도가 빠른 완전관리형 데이터 웨어하우스로, 표준 SQL 및 기존 BI 도구를 사용하여 모든 데이터를 간편하고 비용 효율적으로 분석할 수 있습니다. 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로의 데이터 흐름

Kinesis Data Firehose에서 Amazon Redshift로의 데이터 흐름

Amazon OpenSearch Service(OpenSearch Service)

OpenSearch Service는 OpenSearch의 사용하기 쉬운 API 및 실시간 기능과 더불어 프로덕션 워크로드에 필요한 가용성, 확장성 및 보안을 제공하는 완전관리형 서비스입니다. OpenSearch Service는 로그 분석, 전체 텍스트 검색 및 애플리케이션 모니터링을 위해 OpenSearch를 쉽게 배포, 운영 및 확장할 수 있게 해 줍니다.

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를 통해 이러한 레코드를 수신하고 있으므로 이를 보안 팀 사용 사례의 기반으로 사용할 수 있습니다.