CloudWatch Events 및 Amazon SNS를 사용하여 EC2 Linux 인스턴스에 설정된 보안 그룹의 변경 사항을 모니터링하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 5월 12일

Amazon Elastic Compute Cloud(Amazon EC2) Linux 인스턴스에 대해 보안 그룹을 설정했습니다. Amazon CloudWatch Events 및 Amazon Simple Notification Service(Amazon SNS)를 사용하여 보안 그룹의 변경 사항을 모니터링하려면 어떻게 해야 합니까?

간략한 설명

보안 그룹을 수정하기 위해 API를 호출할 때 트리거할 CloudWatch Events 규칙을 생성하십시오. 그런 후 규칙과 일치하는 이벤트에 대해 Amazon SNS 알림을 구성하십시오.

해결 방법

Amazon SNS 주제 생성 및 구독

1.    Amazon SNS 콘솔을 엽니다.

2.    SNS 대시보드에서 [주제]를 선택하고 [주제 생성]을 선택합니다.

3.    주제 이름(예: my-topic)을 입력합니다.

4.    [주제 생성]을 선택합니다.

5.    주제의 Amazon 리소스 이름(ARN)(예: arn:aws:sns:us-east-1:123123123123:my-topic)을 기록해 둡니다.

6.    [구독 생성]을 선택합니다.

7.    [주제 ARN]에 5단계에서 기록해 둔 ARN을 입력합니다.

8.    [프로토콜]에서 [이메일]을 선택합니다.

9.    [엔드포인트]에 알림을 받을 이메일 주소를 입력한 다음, [구독 생성]을 선택합니다.

구독 확인 이메일을 받게 됩니다. 구독을 확인하면 SNS 주제가 트리거될 때 이메일 주소로 알림이 수신됩니다.

CloudWatch 콘솔을 사용하여 이벤트에서 트리거되는 CloudWatch Events 규칙 생성

1.    CloudWatch 콘솔을 엽니다.

2.    탐색 창에서 [이벤트] 아래의 [규칙]을 선택하고 [규칙 생성]을 선택합니다.

3.    [이벤트 패턴]을 선택합니다.

4.    [서비스 이름]에서 [EC2]를 선택합니다.

5.    [이벤트 유형]에서 [CloudTrail을 통해 AWS API 호출]을 선택합니다.

6.    [특정 작업]을 선택하고 다음 API 호출을 제공합니다. 이러한 API 호출은 보안 그룹 규칙을 추가하거나 제거하는 데 사용됩니다.

      AuthorizeSecurityGroupIngress
      AuthorizeSecurityGroupEgress
      RevokeSecurityGroupIngress
      RevokeSecurityGroupEgress

이러한 설정은 다음과 같은 이벤트 패턴을 생성합니다.

{
  "source": [
    "aws.ec2"
  ],
  "detail-type": [
    "AWS API Call via CloudTrail"
  ],
  "detail": {
    "eventSource": [
      "ec2.amazonaws.com"
    ],
    "eventName": [
      "AuthorizeSecurityGroupIngress",
      "AuthorizeSecurityGroupEgress",
      "RevokeSecurityGroupIngress",
      "RevokeSecurityGroupEgress"
    ]
  }
}

7.    [대상 추가]를 선택합니다.

8.    대상 목록에서 [SNS 주제]를 선택합니다.

9.    [주제]에서 생성한 주제를 입력합니다.

참고: 기본적으로 [입력 구성]에서 [일치하는 이벤트]가 선택되어 있습니다. [일치하는 이벤트]는 이벤트의 전체 JSON 출력을 SNS 주제로 전달합니다. 전체 JSON 출력을 전달하지 않으려면 [입력 변환기]를 선택하여 이벤트 정보를 필터링합니다. 전체 JSON 출력을 대상으로 보내는 대신 이벤트의 텍스트를 사용자 지정하여 읽기 쉬운 메시지를 생성하려면 입력 변환기를 사용하십시오. 예를 들어 [입력 경로]에 다음 키-값 페어를 사용할 수 있습니다.

{"name":"$.detail.requestParameters.groupId","source":"$.detail.eventName","time":"$.time","value":"$.detail"}

[입력 템플릿]에서 메시지에 표시할 텍스트 및 변수를 입력합니다.

"A <source> API call was made against the security group <name> on <time> with the below details"
" <value> "

입력 변환기 옵션 사용에 대한 자세한 내용은 Tutorial: Use Input Transformer to Customize What is Passed to the Event Target을 참조하십시오.

11.    [세부 정보 구성]을 선택합니다.

12.    [규칙 세부 정보 구성] 페이지에서 이름 및 설명(선택 사항)을 입력합니다. [상태]에서 [활성화됨] 상자를 선택된 상태로 둡니다.

13.    [규칙 생성]을 선택합니다.