300초간 3차례 HTTP 접속을 시도하는 것에 대해 룰을 만들었으므로, 아래와 같이 이메일이 통지되었습니다.
13. Cloudwatch Alram을 확인합니.
Cloudwatch에서도 정상적으로 Alarm이 수신되는지 확인합니다.
[Cloudwatch] - [Alrams] - [Alarm]
VPC Flow를 분석하여 특정 패턴에 대해 로그가 발생할 경우 위의 예제에서 처럼 SNS와 연동을 통해 메일을 보내거나, Lambda를 SNS와 연동하여 Slack으로 전송할 수 있습니다.
Athena 구성
앞서 VPC Flow log의 전송 목적지를 S3로 보내는 것을 생성하였습니다.
이제 S3의 데이터를 Athena에서 Data Set으로 생성하고, Query를 통해 확인해 보겠습니다.
1.S3 에 수집된 VPC Flow데이터를 확인합니다.
아래 그림과 같이 S3 Bucket을 선택하여 폴더 구조로 확인을 해 보면 정상적으로 VPC Flow가 수신된 것을 확인 할 수 있습니다.이 데이터를 가지고 Athena에서 DataSet을 생성합니다.
[S3] - [Bucket 선택]
2. Athena 생성합니다.
Athena를 생성합니다.
3.먼저 DataSource에 대한 DLD를 생성합니다.
Datasource와 Database는 기본을 선택합니다.
먼저 DLD를 위해 Query를 생성합니다. Source Code는 아래를 참조합니다.
[Athena] - [Query Editor]
CREATE EXTERNAL TABLE IF NOT EXISTS default.vpc_flow_logs (
version int,
account string,
interfaceid string,
sourceaddress string,
destinationaddress string,
sourceport int,
destinationport int,
protocol int,
numpackets int,
numbytes bigint,
starttime int,
endtime int,
action string,
logstatus string
)
PARTITIONED BY (dt string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
LOCATION 's3://{your_log_bucket}/AWSLogs/{account_id}/vpcflowlogs/us-east-1/'
TBLPROPERTIES ("skip.header.line.count"="1");
4.먼저 DataSource에 대한 파티션을 추가 생성성합니다.
파티션에 대한 날짜 데이터를 추가하기 위해 아래에서 처럼 추가해 줍니다.
ALTER TABLE default.vpc_flow_logs
ADD PARTITION (dt='{Year}-{Month}-{Day}')
location 's3://{your_log_bucket}/AWSLogs/{account_id}/vpcflowlogs/us-east-1/{Year}/{Month}/{Day}';
5. Query를 통해 정상적으로 결과가 호출되는지 확인합니다.
Select문은 아래를 참조합니다.
SELECT day_of_week(from_iso8601_timestamp(dt)) AS
day,
dt,
interfaceid,
sourceaddress,
destinationport,
action,
protocol
FROM vpc_flow_logs
WHERE action = 'REJECT' AND protocol = 6
order by sourceaddress
LIMIT 100;
이제 Athena에서 만들어진 데이터셋을 통해 QuickSight에서 어떻게 표현 되는지 확인합니다.
QuickSight 구성
1.먼저 Quicksight Account를 임의로 생성합니다.
Athena를 Source로 사용하기 때문에 선택해 줍니다.
2.DataSet을 Athena를 선택해 줍니다.
3. US-EAST-1에 생성한 Athena Table을 호출합니다.
4. 추출된 DataSet의 Fields list의 주요 Key값을 통해 QuickSight에서 시각화하여 분석해 봅니다.
아래 예는 출발지와 목적지 주소, Security Group에서 Accept/Reject 현황, ENI에서 발생되는 카운트, Byte 총 수량, Packet 총 수량등을 분석하여 시각화 한 예입니다.
지금까지 VPC Flow Log를 CloudWatch, S3등으로 전송하여 ELK, QuickSight등으로 분석하고, 주요 보안 룰에 위배되는 경우 SNS와 연동하여 이메일이나 Slack과 같은 협업도구에 전송하는 방법을 알아보았습니다.
추가로 CloudWatch Alram을 만들고 SNS로 보낼 VPC Flow Log도 [그림 5.4.7]에서 처럼 생성합니다.
CloudWatch로 보내는 방법과 Role 생성 등의 상세 방법 을 참조합니다.