Amazon Kinesis Firehose를 사용하여 VPC 흐름 로그를 Splunk로 푸시하는 방법은 무엇입니까?

최종 업데이트 날짜: 2021년 7월 23일

Splunk 헤비 전달자를 설치하여 Amazon Virtual Private Cloud(Amazon VPC) 데이터를 분석하려고 합니다. 처리를 위해 AWS 소스에서 Splunk 클러스터로 데이터를 푸시하고 있는데 여러 단계가 필요합니다. AWS 데이터를 plunk와 통합할 수 있는 더 좋은 방법은 무엇일까요?

간략한 설명

헤비 전달자를 사용하는 대신 Splunk의 HEC(HTTP 이벤트 수집기) 및 Amazon Kinesis Data Firehose를 사용하여 데이터를 Splunk 클러스터로 보낼 수 있습니다.

데이터 및 애플리케이션 이벤트를 Splunk 클러스터로 보내려면 다음을 수행합니다.

1.    Kinesis Data Firehose 전송 스트림을 생성합니다.

2.    레코드 변환을 위해 AWS Lambda를 구성합니다.

3.    VPC 플로우 로그를 구성합니다.

4.    스트림에 대한 Amazon CloudWatch Logs 구독을 생성합니다.

참고: Application Load Balancer를 사용하는 경우 Classic Load Balancer를 사용합니다. Kinesis Data Firehose는 Application Load Balancer 또는 Network Load Balancer를 지원하지 않습니다. 또한 쿠키 만료가 비활성화된 기간 기반 고정 세션을 허용해야 합니다. Splunk 엔드포인트의 데이터 스트림 문제를 해결하는 방법에 대한 자세한 내용은 Splunk에 전달되지 않는 데이터를 참조하세요.

해결 방법

사전 조건

시작하기 전에 다음 사전 조건을 완료합니다.

Kinesis Data Firehose 전송 스트림 생성 시작

1.     전송 스트림을 생성합니다. 소스에서 Direct PUT or other sources(Direct PUT 또는 기타 소스)를 선택합니다.

2.     다음(Next)을 선택합니다.

AWS Lambda를 사용하여 레코드 변환 구성

1.     레코드 변환을 구성합니다.
참고:
[AWS Lambda를 사용하여 소스 레코드 변환(Transform source records with AWS Lambda)] 아래의 [레코드 변환(Record transformation)]에 대해 [사용(Enabled)]을 선택해야 합니다. CloudWatch에서는 압축된 .gzip 파일로 로그를 전송하므로 이 옵션을 활성화해야 합니다. Amazon Kinesiss가 이 파일의 압축을 풀어야 파일을 사용할 수 있습니다.

2.     Lambda 함수에서 새로 생성을 선택합니다.

3.     [Lambda 블루프린트 선택(Choose Lambda blueprint)] 창에서 [Lambda 블루프린트(Lambda blueprint)]에 [Kinesis Firehose CloudWatch Logs 프로세서(Kinesis Firehose CloudWatch Logs Processor)]를 선택합니다.

4.     브라우저에 새로 열리는 탭을 선택하여 새 Lambda 함수를 생성합니다.
Name에 Lambda 함수 이름을 입력합니다.
역할에서 Create a custom role(사용자 지정 역할 생성)을 선택합니다.

5.     브라우저에 새로 열리는 탭을 선택하여 새 AWS Identity and Access Management(IAM) 역할을 생성합니다.
[역할 이름(Role Name)]이 [lambda_basic_execution]이어야 합니다.

6.     [허용(Allow)]을 선택하여 역할을 생성하고 Lambda 함수 구성 페이지로 돌아갑니다.

7.     함수 생성을 선택한 후 함수가 생성될 때까지 기다립니다.

8.     [제한 시간(Timeout)]을 기본값 3초에서 1분으로 늘려 함수의 시간이 초과되지 않도록 합니다.

9.     [저장(Save)]을 선택합니다.

Kinesis Data Firehose 전송 스트림 생성 완료

1.     Amazon Kinesis 콘솔을 엽니다.

2.     탐색 창에서 Data Firehose를 선택합니다.

3.     전송 스트림의 [Lambda 함수(Lambda function)]를 선택합니다.
드롭다운에서 새 AWS Lambda 함수 이름을 선택합니다.
[대상(Destination)]에 [Splunk]를 선택합니다.
전에 만든 HEC 엔드포인트를 포함하여 Splunk HEC 세부 정보를 입력합니다. Splunk HEC 엔드포인트가 유효한 SSL 인증서로 종료되어야 합니다. 일치하는 DNS 호스트 이름을 사용하여 HEC 엔드포인트에 연결합니다. 클러스터 엔드포인트 형식은 https://YOUR-ENDPOINT.splunk.com:8088입니다.
Splunk endpoint type(Splunk 엔드포인트 유형)으로 Raw endpoint(원시 엔드포인트)를 선택하고 인증 토큰을 입력합니다.

4.     다음(Next)을 선택합니다.

5.     (선택 사항) 기존이 버킷을 선택하거나 새 버킷을 만들어 실패한 이벤트에 대해 Amazon Simple Storage Service(Amazon S3) 백업을 생성합니다. 버퍼 조건, 압축 및 암호화 설정, 전송 스트림 마법사의 오류 로깅 옵션 등의 Amazon S3 관련 설정을 구성해야 합니다.

6.     IAM 역할에서 새로 생성을 선택합니다.

7.     탭이 열리면 역할 이름을 입력하고 [허용(Allow)]을 선택합니다.

8.     다음(Next)을 선택합니다.

9.     [전송 스트림 생성(Create delivery stream)]을 선택합니다.

VPC Flow Logs 구성

사용할 VPC 플로우 로그가 이미 있으면 다음 단원으로 건너뜁니다.

1.     CloudWatch 콘솔을 엽니다.

2.     탐색 창에서 [Logs]를 선택합니다.

3.     [작업(Actions)]에서 [로그 그룹 생성(Create log group)]을 선택합니다.

4.     로그 그룹(Log Group) 이름을 입력합니다.

5.     로그 그룹 생성(Create log group)을 선택합니다.

6.     Amazon VPC 콘솔을 엽니다.

7.     탐색 창의 Virtual Private Cloud에서 VPCs를 선택합니다.

8.     콘텐츠 창에서 VPC를 선택합니다.

9.     플로우 로그 보기를 선택합니다.

10.    플로우 로그 생성을 선택합니다.
필터에서 모두를 선택합니다.
대상 로그 그룹으로 방금 만든 로그 그룹을 선택합니다.
IAM 역할에 대해 VPC에서 CloudWatch에 로그를 게시하도록 허용하는 IAM 역할을 선택합니다.
참고:
적합한 IAM 역할이 없으면 [IAM 역할(IAM role)] 아래의 [권한 설정(Set Up Permissions)]을 선택합니다. [새 IAM 역할 생성(Create a new IAM role)]을 선택합니다. 기본 설정 선택을 유지합니다. [허용(Allow)]을 선택하여 VPCFlowLogs 역할을 만들고 대상 로그 그룹에 연결합니다.

11.    [생성(Create)]을 선택하여 VPC 플로우 로그를 생성합니다.

12.    로그 그룹에서 전송 스트림으로 향하는 실시간 피드를 설정합니다.
AWS Lambda 지침은 AWS Lambda에 대한 Amazon CloudWatch Logs 액세스를 참조하세요. Amazon OpenSearch Service 지침은 CloudWatch Logs 데이터를 Amazon OpenSearch Service로 스트리밍을 참조하세요.
다음 지침에 따라 AWS Command Line Interface(AWS CLI)에서 Kinesis Data Firehose에 대해 CloudWatch Logs 구독을 생성합니다.

참고: AWS CLI 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.

CloudWatch Logs 구독 생성

1.     CloudWatch에 대한 액세스 권한을 부여하여 올바른 역할 권한으로 Kinesis Data Firehose 스트림을 게시합니다.

2.     AWS CLI를 엽니다.

3.     다음 예제 JSON 파일을 사용하여 신뢰 정책(예: TrustPolicyforCWLToFireHose.json)을 생성합니다. YOUR-RESOURCE-REGION을 리소스의 AWS 리전으로 바꿔야 합니다.

{
  "Statement": {
    "Effect": "Allow",
    "Principal": { "Service": "logs.YOUR-RESOURCE-REGION.amazonaws.com" },
    "Action": "sts:AssumeRole"
  }
}

4.     다음 예제 명령을 사용하여 신뢰 정책의 권한을 가진 역할을 생성합니다.

$ aws iam create-role --role-name CWLtoKinesisFirehoseRole --assume-role-policy-document file://TrustPolicyForCWLToFireHose.json

5.     다음 예제 JSON 파일을 사용하여 IAM 정책(예: PermissionPolicyForCWLToFireHose.json)을 생성합니다. AWS-ACCT-NUM을 AWS 계정 번호로 바꿉니다.
YOUR-RESOURCE-REGION을 리소스의 리전으로 바꿉니다.
FirehoseSplunkDeliveryStream을 스트림 이름으로 바꿉니다.

{
    "Statement":[
      {
        "Effect":"Allow",
        "Action":["firehose:*"],
        "Resource":["arn:aws:firehose:YOUR-RESOURCE-REGION:YOUR-AWS-ACCT-NUM:deliverystream/FirehoseSplunkDeliveryStream"]
      },
      {
        "Effect":"Allow",
        "Action":["iam:PassRole"],
        "Resource":["arn:aws:iam::YOUR-AWS-ACCT-NUM:role/CWLtoKinesisFirehoseRole"]
      }
    ]
}

6.     다음 예제 명령을 사용하여 새로 만든 역할에 IAM 정책을 연결합니다.

$ aws iam put-role-policy 
    --role-name CWLtoKinesisFirehoseRole 
    --policy-name Permissions-Policy-For-CWL 
    --policy-document file://PermissionPolicyForCWLToFireHose.json

7.     다음 예제 명령을 사용하여 구독 필터를 생성합니다. YOUR-AWS-ACCT-NUM을 AWS 계정 번호로, YOUR-RESOURCE-REGION을 리소스의 리전으로, FirehoseSplunkDeliveryStream을 스트림 이름으로 바꿉니다.

$ aws logs put-subscription-filter 
   --log-group-name " /vpc/flowlog/FirehoseSplunk" 
   --filter-name "Destination" 
   --filter-pattern "" 
   --destination-arn "arn:aws:firehose:YOUR-RESOURCE-REGION:YOUR-AWS-ACCT-NUM:deliverystream/FirehoseSplunkDeliveryStream" 
   --role-arn "arn:aws:iam::YOUR-AWS-ACCT-NUM:role/CWLtoKinesisFirehoseRole"