-
SNS, CloudWatch를 이용한 GuardDuty 알람AWS/ETC 2020. 6. 16. 17:46
[목표]
GuardDuty는 AWS 리소스(ex.EC2)에 대한 위험탐지 서비스입니다. 활성화 하는 것만으로도 간단하게 서비스의 기능을 이용할 수 있지만, 기본적으로 메일이나 문자같은 알람 서비스는 제공하지 않습니다. 이번에는 AWS의 GuardDuty와 CloudWatch 서비스를 활용한 SNS 경보 메시지 받을 수 있는 환경을 구성하고자 합니다.
1. AWS GuardDuty
- AWS GuardDuty를 활성화합니다. (30일은 무료 평가판 제공)
2. AWS SNS 서비스
1) 주제 생성
- AWS SNS의 새로운 주제를 생성합니다.
2) 주제 구독
- 해당 SNS 주제에 대한 구독을 생성합니다. (SNS 서비스는 구독 주체를 대상으로 알람을 보냄, 이번의 경우 이메일 구독을 생성함)
- 구독을 생성하면, 구독한 주체를 대상으로 확인 메일이 전송됩니다. 수신한 메일에 대해서 'Confirm subscription'을 클릭하면 비로소 구독이 완료됩니다.
3. CloudWatch
- GuardDuty의 이벤트를 SNS 주제의 Trigger로 설정하는 CloudWatch 규칙을 생성합니다.
- 서비스 이름 : GuardDuty, 이벤트 유형 : GuardDuty Finding
- 이벤트 패턴 미리보기 '편집' 클릭
- 'type' key에 value가 되는 GuardDuty의 'Active Finding Types' 리스트를 입력합니다.
#example
{ "source": [ "aws.guardduty" ], "detail": { "type": [ "UnauthorizedAccess:EC2/TorIPCaller", "UnauthorizedAccess:EC2/TorClient", "Backdoor:EC2/DenialOfService.Udp", "Backdoor:EC2/DenialOfService.UdpOnTcpPorts", "Backdoor:EC2/DenialOfService.Dns" ] } }
- GuardDuty Active Finding Types 목록 링크 : https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html
- 이벤트의 대상을 추가합니다. 대상은 'SNS 주제' 중에서 앞서 생성한 GuardDuty 주제를 선택합니다.
- 입력 구성은 '입력 변환기'를 선택, 아래의 'Input Path'와 'Input Template'을 각각 텍스트 박스에 입력하고 '세부 정보 구성'을 클릭합니다.
#Input Path
{ "severity": "$.detail.severity", "Finding_ID": "$.detail.id", "instanceId": "$.detail.resource.instanceDetails.instanceId", "port": "$.detail.service.action.networkConnectionAction.localPortDetails.port", "eventFirstSeen": "$.detail.service.eventFirstSeen", "eventLastSeen": "$.detail.service.eventLastSeen", "count": "$.detail.service.count", "Finding_Type": "$.detail.type", "region": "$.region", "Finding_description": "$.detail.description" }
#Input Template
"You have a severity <severity> GuardDuty finding type <Finding_Type> for the EC2 instance <instanceId> in the region <region> as the <Finding_description> on the port <port>. The first attempt was on <eventFirstSeen> and the most recent attempt on <eventLastSeen> . The total occurrence is <count>. For more details open the GuardDuty console at https://console.aws.amazon.com/guardduty/home?region=<region>#/findings?search=id%3D<Finding_ID>"
- '이름'과 '설명'을 입력하고 '규칙 생성'을 클릭합니다.
- 생성이 완료되고 나면, CloudWatch 서비스의 규칙 탭에서 활성화 된 규칙을 확인할 수 있습니다.
4. 결과확인
- 1~3번의 모든 구성을 마치고 나서, 실제로 알람이 적용되었는지 확인합니다.
- 가상으로 탐지된 위험을 발생시키기 위해 GuardDuty 서비스의 '설정' 탭에서 '샘플 결과 작성'을 클릭하여 임의의 샘플 데이터를 발생시킵니다. (이 때 결과에 표시되는 내역들은 실제 리소스가 아닌 가상의 'Instance id : i-99999999'에 탐지된 가상의 위험요소들이다.)
- 샘플 결과를 작성하고 난 뒤 일정시간이 흐르고 나면 (약 1분), 구독한 주소로 경보 알람 메일이 날아오는 것을 확인할 수 있습니다.
끝.
[참고]
https://aws.amazon.com/ko/premiumsupport/knowledge-center/guardduty-cloudwatch-sns-rule/
https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html
'AWS > ETC' 카테고리의 다른 글
CodeDeploy, permission to perform operations 문제 해결 (0) 2023.10.25