입력 변환기를 사용하여 Amazon SNS 알림을 사람이 읽을 수 있게 만드는 EventBridge 규칙을 생성하려면 어떻게 해야 합니까?

6분 분량
0

Amazon EventBridge 규칙을 생성하여 사람이 읽을 수 있는 사용자 지정 Amazon Simple Notification Service(SNS) 알림을 시작하고 싶습니다.

간략한 설명


Amazon SNS 이벤트 알림을 사람이 읽을 수 있게 하려면 EventBridge의 입력 변환기를 사용하세요. 입력 변환기는 EventBridge 규칙의 대상으로 전송되기 전에 이벤트의 텍스트를 사용자 지정할 수 있습니다. 전체 튜토리얼을 보려면 튜토리얼을 참조하세요. 입력 변환기를 사용하여 EventBridge가 이벤트 대상으로 전달하는 내용을 사용자 지정합니다.

예를 들어 SNS 주제를 입력 변환기로부터 사용자 지정 이벤트 텍스트를 수신할 대상으로 구성할 수 있습니다. 또한 AWS CloudTrail이 캡처한 보안 그룹 관련 API 호출과 일치하도록 EventBridge 규칙을 생성할 수 있습니다. 규칙은 관련 API 호출과 일치하는 이벤트 패턴으로 구성됩니다.

다음 해결 방법에는 Amazon SNS 알림을 사람이 읽을 수 있게 만드는 EventBridge 자체 규칙을 생성하는 데 사용할 수 있는 두 가지 샘플 이벤트가 포함되어 있습니다.

해결 방법

Amazon EC2 상태 변경에 대한 샘플 이벤트

다음 샘플은 SNS 주제를 입력 변환기로부터 사용자 지정 이벤트 텍스트를 수신하는 대상으로 구성합니다. 이 샘플에서 이벤트는 아마존 Amazon Elastic Compute Cloud(Amazon EC2) 상태 변경입니다.

다음은 EventBridge 이벤트 버스에 JSON 형식으로 게시되는 샘플 이벤트입니다.

{  
    "version": "0",  
    "id": "2ad63080-2526-d42c-4983-123456789",  
    "detail-type": "EC2 Instance State-change Notification",  
    "source": "aws.ec2",  
    "account": "0123456789",  
    "time": "2023-05-17T16:30:32Z",  
    "region": "us-east-1",  
    "resources": [  
        "arn:aws:ec2:us-east-1:0123456789:instance/i-12345abcdefg"  
    ],  
    "detail": {  
        "instance-id": "i-12345abcdefg",  
        "state": "running"  
    }  
}

입력 변환기에는 두 개의 섹션이 있습니다.

  • 입력 경로 JSON 경로를 사용하여 원본 이벤트 소스의 값을 참조하는 변수를 정의하는 곳입니다.
  • 템플릿대상에 전달하려는 정보에 대한 템플릿입니다.

입력 경로

입력 경로를 생성하려면 입력 변환기 샘플을 참조하세요. 이 예제에서는 다음 입력 경로를 사용합니다.

{  
"timestamp": "$.time",  
"instance": "$.detail.instance-id",  
"state": "$.detail.state"  
}

템플릿

이 예제에서는 다음 템플릿을 사용합니다.

샘플 1

"Instance example-instance is in example-state state"

샘플 2

"At example-timestamp, Instance example-instance changed its state to example-state. "

위의 샘플 템플릿은 다음 형식으로 대상에 메시지를 보냅니다.

샘플 1

"Instance i-12345abcdefg is in running state"

샘플 2

"At 2023-05-17T16:30:32Z, Instance i-12345abcdefg changed its state to running. "

입력 변환기를 사용하도록 EventBridge를 구성합니다

SNS 주제에 사용자 지정 메시지를 보내도록 EventBridge를 구성하려면 다음 단계를 완료하세요.

참고 이 지침은 이벤트에 반응하는 규칙 생성의 단계를 따릅니다. 또한 입력 변환기를 구성하는 특정 단계를 제공합니다.

1.    Amazon EC2 상태 변경 이벤트에 대한 EventBridge 규칙을 정의합니다.

2.    이벤트 패턴을 구축하세요. 생성 방법 섹션의 **방법에서 **사용자 지정 패턴(JSON 편집기)**을 **선택합니다.

3.    이벤트 패턴에서 Amazon EC2 상태 변경 이벤트의 다음 JSON 샘플을 입력합니다.

{  
"source": ["aws.ec2"],  
"detail-type": ["EC2 Instance State-change Notification"]  
}

4.    다음을 선택합니다.

5.    대상 유형에서 AWS 서비스를 선택합니다.

6.    대상 선택에서 SNS 주제를 선택합니다. 그런 다음 드롭다운 목록에서 주제를 선택합니다.

7.    추가 설정의 경우, 대상 입력 구성 드롭다운 목록에서 입력 변환기를 선택합니다. 그런 다음 입력 변환기 구성을 선택합니다.

8.    대상 입력 변환기 섹션에서 입력 경로에 다음 JSON을 붙여 넣습니다.

{  
"timestamp": "$.time",  
"instance": "$.detail.instance-id",  
"state": "$.detail.state"  
}

9.    입력 템플릿의 경우 다음 문자열 템플릿을 복사하여 붙여 넣습니다.

"Instance example-instance is in example-state state"  
"At example-timestamp, Instance example-instance changed its state to example-state. "

10.    확인을 선택한 후 다음을 선택합니다.

11.    (선택 사항) 규칙에 태그를 추가한 후 다음을 선택합니다.

12.    규칙의 세부 정보를 검토한 다음 규칙 생성을 선택합니다.

Amazon EC2 보안 그룹 API 호출에 대한 샘플 이벤트

다음 샘플 이벤트에서는 Virtual Private Cloud(VPC)에서 CreateSecurityGroup을 사용하여 보안 그룹을 생성합니다. AWS CloudTrail은 이벤트를 캡처하고, 해당 이벤트는 다음과 같은 JSON 형식으로 Amazon 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 규칙을 생성합니다. 이벤트 패턴에서 사용자 지정 이벤트 패턴 구축을 선택합니다. 사용 사례에 맞게 샘플 이벤트 패턴을 수정하세요. 예제 알림은 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.    대상 유형에서 AWS 서비스를 선택합니다.

3.    대상 선택에서 SNS 주제를 선택합니다. 그런 다음 드롭다운 목록에서 주제를 선택합니다.

4.    추가 설정의 경우, 대상 입력 구성 드롭다운 목록에서 입력 변환기를 선택합니다. 그런 다음 입력 변환기 구성을 선택합니다.

5.    대상 입력 변환기 섹션에서 입력 경로에 다음 JSON을 붙여 넣습니다. 알림에 사용할 모든 키-값 쌍을 포함하세요. 사용 사례에 맞게 다음 샘플 입력 경로를 수정하세요.

{  
    "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"  
}

6.    입력 템플릿의 경우 다음 문자열 템플릿을 붙여 넣습니다. 입력 경로의 값에 대한 플레이스홀더가 있는 문자열을 포함하세요. 이 문자열은 사람이 읽을 수 있는 알림 텍스트입니다. 사용 사례에 맞게 다음 샘플 입력 템플릿을 수정하세요.

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

7.    확인을 선택한 후 다음을 선택합니다.

8.    (선택 사항) 규칙에 태그를 추가한 후 다음을 선택합니다.

9.    규칙의 세부 정보를 검토한 다음 규칙 생성을 선택합니다.

문제 해결

줄 바꿈이 있는 템플릿 저장 시 잘못된 InputTemplate 오류가 발생하면 각 줄을 큰따옴표로 닫으세요. 다음 예제를 참조하세요.

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

규칙이 실행되었지만 대상을 간접적으로 호출하는 데 실패하는 경우 입력 변환기와 관련된 오류를 수신하도록 EventBridge의 DLQ(Dead Letter Queue)를 구성하세요.

EventBridge는 입력 경로 맵에서 최대 100개의 변수를 지원합니다. 10개 이상의 변수를 추출하려면 전체 이벤트를 AWS Lambda 함수로 전달하세요. 이 함수를 작성하여 변수를 분석하고 게시에 필요한 형식으로 메시지 본문을 구성하세요. 그런 다음 Amazon SNS에 게시하는 데 필요한 형식으로 메시지 본문을 구성합니다. 자세한 내용은 Lambda 함수를 사용하여 Amazon SNS 주제에 메시지를 게시하려면 어떻게 해야 합니까?를 참조하세요.

AWS 공식
AWS 공식업데이트됨 6달 전