Amazon SNS 주제와 함께 EventBridge를 사용하여 Security Hub 조사 결과에 대한 사용자 지정 이메일 알림을 설정하려면 어떻게 해야 합니까?
Amazon EventBridge를 Amazon Simple Notification Service(Amazon SNS) 주제와 함께 사용하여 AWS Security Hub에 대한 사용자 지정 이메일 알림을 설정하려고 합니다.
간략한 설명
다음 해결 방법은 Security Hub 알림을 수신하도록 Amazon SNS를 사용하여 Amazon EventBridge를 구성하는 방법을 보여줍니다. EventBridge 규칙에 따라 Amazon SNS는 이벤트 발생 시 주제를 구독한 이메일 주소로 알림을 보냅니다. AWS Lambda 함수는 서식이 개선된 사용자 지정 알림 메시지를 만듭니다.
해결 방법
SNS 주제 및 구독 만들기
다음 단계를 완료하십시오.
- Amazon SNS 콘솔을 엽니다.
- 탐색 창에서 주제를 선택합니다.
- 주제 만들기를 선택합니다.
- 세부 정보 섹션에서 유형에 대해 표준을 선택합니다.
- 이름에 주제 이름을 입력합니다.
- 주제 만들기를 선택합니다.
- 만든 주제에서 구독 만들기를 선택합니다.
- 주제 ARN에서 만든 주제의 Amazon 리소스 이름(ARN)을 선택합니다(자동으로 채워지지 않을 경우).
- 프로토콜에서 이메일을 선택합니다.
- 엔드포인트에 SNS 알림을 받을 이메일 주소를 입력합니다.
- 구독 만들기를 선택합니다.
중요: 구독이 확인 보류 중 상태에서 확인됨으로 전환되려면 구독자에게 전송된 확인 이메일에서 구독을 확인해야 합니다. - (선택 사항) 주제에 대한 구독 취소 작업을 방지하는 인증된 구독을 만들 수도 있습니다.
Lambda 함수 만들기
다음 단계를 완료하십시오.
- Lambda 콘솔을 엽니다.
- 탐색 창에서 함수를 선택합니다.
- 함수 만들기를 선택합니다.
- 새로 작성을 선택합니다.
- 함수 이름에 함수의 이름을 입력합니다.
- 런타임을 선택한 다음, Python 3.14를 선택합니다.
- 아키텍처에서 x86_64를 선택합니다.
- 기본 실행 역할 변경을 펼칩니다.
- 실행 역할에서 AWS 정책 템플릿에서 새 역할 만들기를 선택합니다.
- 역할 이름에 역할의 이름을 입력합니다.
- 정책 템플릿에서 Amazon SNS 게시 정책을 선택합니다.
- 함수 만들기를 선택합니다.
- 코드 소스 섹션에 다음 코드를 입력합니다.
import json import boto3 sns = boto3.client('sns') def lambda_handler(event, context): #Extract details from JSON event detailType= event["detail-type"] region = event["region"] accountId = event["account"] #Security Hub Insight Results if (detailType == "Security Hub Insight Results"): action = event["detail"]["actionDescription"] message = "Alert: %s in %s for account: %s\n Action description: %s" % (detailType, region,accountId,action) elif ("Security Hub Findings" in detailType): finding = event["detail"]["findings"][0] findingTime = finding["FirstObservedAt"] findingType = finding["Types"][0] findingDescription = finding["Description"] remediation = finding["Remediation"]["Recommendation"]["Text"] #Security Hub Findings - Custom finding if(detailType == "Security Hub Findings - Custom"): complianceStatus = finding["Compliance"]["Status"] severity = finding["Severity"]["Label"] remediationUrl = finding["Remediation"]["Recommendation"]["Url"] message = "Alert: %s in %s for account: %s\n\nFinding regarding: [%s] %s\n Severity: %s\nDescription: %s\nFirst observed at: %s\n%s: %s" % (detailType, region, accountId, complianceStatus, findingType, severity, findingDescription, findingTime, remediation, remediationUrl) #Security Hub Findings - Imported finding else: message = "Alert: %s in %s for account: %s\n\nFinding regarding: %s\nFirst observed at: %s\nRemediation recommendation: %s" % (detailType, region, accountId, findingDescription,findingTime, remediation) #AWS API Call via CloudTrail finding elif (detailType == "AWS API Call via CloudTrail"): time = event["detail"]["eventTime"] eventName = event["detail"]["eventName"] requestParameters = event["detail"]["requestParameters"] message = "Alert: %s in %s for account: %s at time: %s\n\n Event: %s \n Request parameters: %s" % (detailType, region, accountId, time, eventName, requestParameters) #If the event doesn't match any of the above, return the event else: message = str(event) response = sns.publish( TopicArn = "arn:aws:sns:eu-west-1:111122233333:your-arn", Message = message ) return { 'statusCode': 200, 'body': json.dumps('Success!') }
참고: arn:aws:sns:eu-west-1:111122233333:your-arn을 주제 ARN으로 바꿉니다. 배포를 선택합니다.
EventBridge 규칙 만들기 및 구성
다음 단계를 완료하십시오.
- EventBridge 콘솔을 엽니다.
- 탐색 창에서 규칙를 선택한 다음, 규칙 만들기를 선택합니다.
- 규칙의 이름을 입력한 후 다음을 선택합니다.
- 만들기 방법에서 패턴 양식 사용을 선택합니다.
- 이벤트 소스에서 AWS 서비스를 선택합니다.
- AWS 서비스에서 Security Hub를 선택합니다.
- 이벤트 유형에서 모든 이벤트를 선택한 후 다음을 선택합니다.
참고: 모든 이벤트가 아닌 특정 이벤트에 대한 알림을 구성할 수도 있습니다. - 대상 유형에서 AWS 서비스를 선택합니다.
- 대상 선택에서 Lambda 함수를 선택합니다.
- 함수에서 이전에 만든 함수를 선택한 후 다음을 선택합니다.
- 태그 구성 페이지에서 다음을 선택합니다.
- 규칙 만들기를 선택합니다.
사용자 지정 알림 받기
구성된 이벤트가 발생하면 no-reply@sns.amazonaws.com에서 보낸 사용자 지정 알림 이메일을 받게 됩니다.
기본 Security Hub 이벤트의 형식은 보다 읽기 쉬운 사용자 지정 형식으로 다시 지정됩니다.
Security Hub 인사이트 결과 메시지 예시
기본값:
{"version": "0", "id": "ac844908-d14e-05b1-4b7b-836d85110e26", "detail-type": "Security Hub Insight Results", "source": "aws.securityhub", "account": "123456789012", "time": "2019-04-11T21:31:57Z", "region": "us-east-1", "resources": ["arn:aws:securityhub:us-east-1:123456789012:action/custom/slackMessaging"], "detail": {"actionName": "SendToSlack", "actionDescription": "Send Findings to Slack", "insightName": "5. AWS users with the most suspicious activity", "insightArn": "arn:aws:securityhub:::insight/securityhub/default/9", "resultType": "ResourceAwsIamAccessKeyUserName", "insightResults": [{"Admin": 7}, {"DenySlr_UI_User": 1}]}}
사용자 지정:
경고: 계정에 대한 us-east-1의 Security Hub 인사이트 결과: 123456789012
작업 설명: 조사 결과를 Slack으로 보내기
참고: 사용 사례에 맞는 각 보안 조사 결과 유형의 메시지를 편집할 수 있습니다.
관련 정보
GuardDuty에서 특정 서비스 조사 결과 유형에 대한 사용자 지정 SNS 알림을 전송하도록 EventBridge 규칙을 구성하려면 어떻게 해야 합니까?

