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과 같은 협업도구에 전송하는 방법을 알아보았습니다.