입력 변환기를 사용하여 API 호출에 대해 사람이 읽을 수 있는 Eventbridge 알림을 설정하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2021년 12월 9일

Amazon EventBridge에서 Amazon Elastic Compute Cloud(Amazon EC2) 보안 그룹 API 호출에 대해 사람이 읽을 수 있는 알림을 받고 싶습니다. 입력 변환기를 사용하여 알림을 사용자 지정하려면 어떻게 해야 하나요?

간략한 설명

AWS CloudTrail에서 캡처한 보안 그룹 관련 API 호출과 일치하는 Eventbridge 규칙을 생성할 수 있습니다. 이 규칙은 관련 API 호출과 일치하는 이벤트 패턴으로 구성됩니다.

입력 변환기를 사용하여 대상에 전달되는 텍스트를 사용자 지정합니다. 예를 들어 Amazon Simple Notification Service(Amazon SNS) 주제 또는 AWS Lambda 함수가 대상일 수 있습니다. 이렇게 하면 원시 JSON 이벤트가 사람이 읽을 수 있는 알림으로 변환됩니다. 자세한 내용은 자습서: 입력 변환기를 사용하여 Eventbridge가 이벤트 대상으로 전달하는 항목을 사용자 지정을 참조하세요.

해결 방법

샘플 이벤트

다음 샘플 이벤트에서는 사용자가 Virtual Private Cloud(VPC)에서 CreateSecurityGroup을 사용하여 보안 그룹을 생성하면 CloudTrail 로그 이벤트가 캡처됩니다. 이 이벤트는 다음과 같이 JSON 형식으로 CloudWatch에 게시됩니다.

{
    "version": "0",
    "id": "41dff147-cfbc-492a-9a98-9dd00d082417",
    "detail-type": "AWS API Call via CloudTrail",
    "source": "aws.ec2",
    "account": "123456789012",
    "time": "2017-07-14T16:36:23Z",
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "eventVersion": "1.05",
        "userIdentity": {
            "type": "Root",
            "principalId": "123456789012",
            "arn": "arn:aws:iam::123456789012:root",
            "accountId": "123456789012",
            "accessKeyId": "ASIAIRP4G1234567891Q",
            "userName": "iamuser",
            "sessionContext": {
                "attributes": {
                    "mfaAuthenticated": "false",
                    "creationDate": "2017-07-14T16:27:38Z"
                }
            }
        },
        "eventTime": "2017-07-14T16:36:23Z",
        "eventSource": "ec2.amazonaws.com",
        "eventName": "CreateSecurityGroup",
        "awsRegion": "us-east-1",
        "sourceIPAddress": "72.21.196.64",
        "userAgent": "console.ec2.amazonaws.com",
        "requestParameters": {
            "groupName": "test",
            "groupDescription": "test",
            "vpcId": "vpc-54a4232d"
        },
        "responseElements": {
            "_return": true,
            "groupId": "sg-82d531f3"
        },
        "requestID": "a4609e55-69ac-4a2d-8057-843dc8b4658b",
        "eventID": "7774b898-59c1-48a5-9c41-af1bcaa04612",
        "eventType": "AwsApiCall"
    }
}

예제 해결 방법

다음의 예제 해결 방법을 모델로 삼아 Eventbridge에서 JSON 형식으로 사람이 읽을 수 있는 사용자 지정 알림을 생성할 수 있습니다.

1.    보안 그룹 관련 API 호출을 위한 Eventbridge 규칙을 생성합니다. 이벤트 패턴(Event Pattern)에서 사용자 지정 이벤트 패턴 구축(Build custom event pattern)을 선택합니다. 사용 사례에 대한 샘플 이벤트 패턴을 수정하세요. 예제 알림은 CreateSecurityGroup을 대상으로 생성되었지만, 다음의 예제 샘플 이벤트 패턴에는 모든 보안 그룹 관련 API 호출 작업이 포함됩니다.

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

2.    규칙의 대상은 [Configure input(입력 구성)]에서 [Input Transformer(입력 변환기)]를 선택합니다.

3.    첫 번째 입력 상자에서 [Input Path(입력 경로)]를 구성합니다. 알림에 사용할 키-값 쌍을 포함합니다. 사용 사례에 맞게 다음의 샘플 입력 경로를 수정하세요.

{"sgname":"$.detail.requestParameters.groupName","sourceip":"$.detail.sourceIPAddress","vpcid":"$.detail.requestParameters.vpcId","action":"$.detail.eventName","sgid":"$.detail.responseElements.groupId","time":"$.detail.eventTime","region":"$.detail.awsRegion","user":"$.detail.userIdentity.userName","reqid":"$.detail.requestID"}

참고: Eventbridge는 현재 입력 경로 맵에서 최대 100개의 변수를 지원합니다. 10개가 넘는 변수를 추출하려면 전체 이벤트를 Lambda 함수로 전달하세요. 이 함수를 작성하여 원하는 모든 변수를 구문 분석하고 게시를 위해 필요한 형식으로 메시지 본문을 작성할 수 있습니다. 그런 다음 Amazon SNS에 게시하는 데 필요한 형식으로 메시지 본문을 구성합니다.

4.    두 번째 입력 상자에서 [Input Template(입력 템플릿)]을 구성합니다. 입력 경로에의 값에 자리 표시자가 있는 문자열을 포함합니다. 이 문자열은 알림에서 사람이 읽을 수 있는 텍스트 부분입니다. 사용 사례에 맞게 다음의 샘플 입력 템플릿을 수정하세요.

"User <user>  has executed API call <action> from source IP <sourceip> on security group <sgid>/<sgname> that belongs to vpc <vpcid> in region <region> at time(UTC) <time>. The Request ID is <reqid>."

참고: 줄 바꿈을 포함하여 템플릿을 저장했을 때 Invalid InputTemplate 오류가 발생한다면 각 줄을 큰따옴표로 닫으세요. 예를 들면 다음과 같습니다.

"<type> <arn> has executed action API <action> on Security Group <sgid> located in AWS region <region> at <time> (UTC)."
"Event Details:"
"Request ID: <requestid>"
"Event ID: <eventid>"
"Event Source: <eventsource>"
"Event Type: <eventtype>"

5.    [Configure details(세부 정보 구성)]를 선택합니다.

6.    규칙의 이름과 설명을 입력합니다.

7.    [Create rule(규칙 생성)]을 선택합니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?