Amazon SNS 주제와 함께 CloudWatch Events를 사용하여 사용자 지정된 이메일 알림을 설정하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 6월 22일

Amazon CloudWatch Events와 Amazon Simple Notification Service(Amazon SNS) 주제를 사용하여 사용자 지정된 이메일 알림을 설정하고자 합니다.

간략한 설명

다음 해결 방법은 SNS 주제를 대상으로 하여 CloudWatch Events 규칙을 구성하는 방법을 보여줍니다. 규칙에 따라 Amazon SNS는 이벤트 발생 시 주제를 구독한 이메일 주소로 알림을 보냅니다. 이 메시지는 서식으로 인해 읽기가 어렵습니다. 그러나 AWS Lambda 함수를 사용해서 향상된 서식을 갖춘 사용자 지정 알림 메시지를 생성할 수 있습니다.

중요: 다음 해결 방법에서는 사용자 지정에 AWS Security Hub 이벤트와 Lambda 함수를 사용합니다. 관련 비용에 대한 자세한 내용은 AWS Security Hub 요금 AWS Lambda 요금을 참조하십시오.

해결 방법

SNS 주제 생성

1.    Amazon SNS 콘솔을 엽니다.

2.    탐색 창에서 주제를 선택합니다.

3.    주제 생성을 선택하십시오.

4.    세부 정보 섹션에서 유형에 대해 표준을 선택합니다.

5.    이름에 주제 이름을 입력합니다.

6.    주제 생성을 선택하십시오.

구독 생성

1.    생성된 주제에서 구독 생성을 선택합니다.

2.    주제 ARN의 경우 이전에 생성한 주제의 Amazon 리소스 이름(ARN)을 선택합니다.

참고: 주제 ARN은 이전에 생성한 주제의 ARN으로 이미 채워져 있을 수 있습니다.

3.    프로토콜이메일을 입력합니다. 

4.    엔드포인트에 SNS 알림을 받으려는 이메일 주소를 입력합니다.

5.    구독 생성을 선택합니다.

중요: 구독을 PendingConfirmation 상태에서 Confirmed 상태로 전환하려면 구독자에게 전송된 확인 이메일에서 구독을 확인해야 합니다. 

참고: (선택 사항) 인증된 구독을 생성하여 주제에 대한 구독 취소 작업을 방지할 수 있습니다.

CloudWatch Events 규칙 구성

1.    CloudWatch 콘솔을 엽니다.

2.    탐색 창의 이벤트 섹션에서 규칙을 선택합니다.

3.    규칙 생성(Create rule)을 선택합니다.

4.    서비스 이름에서 Security Hub를 선택합니다.

5.    이벤트 유형에서 모든 이벤트를 선택합니다.

참고: 보다 구체적인 이벤트에 대한 알림을 구성하려면 Eventbridge와의 Security Hub 통합 유형을 참조하십시오.

6.    대상 섹션에서 대상 추가를 선택합니다.

7.    대상 메뉴에서 SNS 주제를 선택합니다.

8.    주제에서 이전에 생성한 주제 이름을 선택합니다.

9.    [Configure details]를 선택합니다.

10.    이름에 규칙 이름을 입력합니다.

11.    규칙 생성을 선택합니다.

규칙 테스트

1.    AWS Security Hub를 엽니다.

2.    탐색 창에서 결과를 선택합니다.

3.    검색 결과 목록에서 알림을 수신하고자 하는 검색 결과의 확인란을 선택합니다.

4.    작업을 선택한 다음 이메일 전송을 선택합니다.

5.    이메일의 받은 편지함을 확인하여 no-reply@sns.amazonaws.com으로부터 AWS 알림 메시지를 받았는지 확인합니다. 예를 들면 다음과 같습니다.

{“version”: “0”,“id”: “91ce02aa-7c08-bacc-cc71-10837f6ef124”,“detail-type”: “Security Hub Findings - Custom Action”,“source”: “aws.securityhub”,“account”: “111122223333”,“time”: “2021-06-17T11:44:13Z”,“region”: “us-east-1”,“resources”: [“arn:aws:securityhub:us-east-1:111122223333:action/custom/SendToEmail”],“detail”: {“actionName”: “Send to email”,“actionDescription”: “This Custom Action sends selected findings to email addresses defined in an SNS Topic Subscription.”,“findings”: [{“ProductArn”: “arn:aws:securityhub:us-east-1::product/aws/securityhub”,“Types”: [“Software and Configuration Checks/Industry and Regulatory Standards/CIS AWS Foundations Benchmark”],“Description”: “The \”root\” account has unrestricted access to all resources in the AWS account. It is highly recommended that the use of this account be avoided.”,“Compliance”: {“Status”: “FAILED”,“StatusReasons”: [{“Description”: “Multi region CloudTrail with the required configuration does not exist in the account”,“ReasonCode”:“CLOUDTRAIL_MULTI_REGION_NOT_PRESENT”}]},“ProductName”: “Security Hub”,“FirstObservedAt”:“2020-10-22T10:18:10.991Z”,“CreatedAt”: “2020-10-22T10:18:10.991Z”,“LastObservedAt”: “2021-06-17T10:36:41.175Z”,“CompanyName”: “AWS”,“FindingProviderFields”: {“Types”: [“Software and Configuration Checks/Industry and Regulatory Standards/CIS AWS Foundations Benchmark”],“Severity”: {“Normalized”: 30,“Label”: “LOW”,“Product”: 30,“Original”: “LOW”}},“ProductFields”: {“StandardsGuideArn”: “arn: aws: securityhub: : : ruleset/cis-aws-foundations-benchmark/v/1.2.0”,“StandardsGuideSubscriptionArn”: “arn: aws: securityhub: us-east-1: 111122223333: subscription/cis-aws-foundations-benchmark/v/1.2.0”,“RuleId”: “1.1”,“RecommendationUrl”: “SampleURL”,“aws/securityhub/CompanyName”: “AWS”,“aws/securityhub/annotation”:“MultiregionCloudTrailwiththerequiredconfigurationdoesnotexistintheaccount”,“Resources: 0/Id”: “arn: aws: iam: : 111122223333: root”,“aws/securityhub/FindingId”: “arn: aws: securityhub: us-east-1: : product/aws/securityhub/arn: aws: securityhub: us-east-1:111122223333: subscription/cis-aws-foundations-benchmark/v/1.2.0/1.1/finding/4eccb91a-c940-4e1d-90de-7c046369b89f”},“Remediation”: {“Recommendation”:{“Text”:“FordirectionsonhowtofixthisissuepleaseconsulttheAWSSecurityHubCISdocumentation.”,“Url”:“SampleURL”}},“SchemaVersion”:“2018-10-08”,“GeneratorId”: “arn: aws: securityhub: : : ruleset/cis-aws-foundations-benchmark/v/1.2.0/rule/1.1”,“RecordState”: “ACTIVE”,“Title”: “1.1Avoidtheuseofthe\”root\”account”,“Workflow”: {“Status”: “NEW”},“Severity”: {“Normalized”: 30,“Label”: “LOW”,“Product”: 30,“Original”: “LOW”},“UpdatedAt”: “2021-06-17T10: 36: 39.712Z”,“WorkflowState”: “NEW”,“AwsAccountId”: “111122223333”,“Region”:“us-east-1”,“Id”: “arn: aws: securityhub: us-east-1:111122223333: subscription/cis-aws-foundations-benchmark/v/1.2.0/1.1/finding/4eccb91a-c940-4e1d-90de-7c046369b89f”,“Resources”: [{ “Partition”: “aws”,”Type”: “AwsAccount”,”Region”: “us-east-1”,”Id”: “AWS: : : : Account: 111122223333”}]}]}}
--
이 주제의 알림 수신을 중단하려면 아래 링크를 클릭하거나 방문하여 구독 취소하십시오.
구독 취소


이 이메일에 직접 회신하지 마십시오. 이 이메일과 관련하여 질문이나 의견이 있으시면 https://aws.amazon.com/support로 문의하십시오.

Lambda 함수를 사용하여 알림 사용자 지정

JSON 콘텐츠에서 원하는 정보를 추출하여 Amazon SNS에 게시하는 Lambda 함수를 생성합니다.

1.    Lambda 콘솔을 엽니다.

2.    탐색 창에서 함수를 선택합니다.

3.    [Create function]을 선택합니다.

4.    새로 작성을 선택합니다.

5.    함수 이름에 함수 이름을 입력합니다.

6.    런타임을 선택한 다음 Python 3.7을 선택합니다.

7.    기본 실행 역할 변경을 확장합니다.

8.    실행 역할에 대해 AWS 정책 템플릿에서 새 역할 생성을 선택합니다.

9.    역할 이름에 역할을 입력합니다.

10.   정책 템플릿에 대해 Amazon SNS 게시 정책을 선택합니다.

11.    함수 생성을 선택합니다.

12.    함수가 생성된 후 코드 소스 섹션에 다음 코드를 붙여 넣습니다.

import json
import boto3
sns = boto3.client('sns')
def lambda_handler(event, context):
    finding = event["detail"]["findings"][0] 
    findingTime = finding["FirstObservedAt"]
    findingType = finding["Types"][0]
    complianceStatus = finding["Compliance"]["Status"]    
    region = event["region"]
    accountId = finding["AwsAccountId"]    
    findingDescription = finding["Description"]
    severity = finding["Severity"]["Label"]    
    remediation = finding["Remediation"]["Recommendation"]["Text"]
    remediationUrl = finding["Remediation"]["Recommendation"]["Url"]
   
 message = "AWS SecurityHub alert in %s for account: %s\n\nFinding regarding: [%s] %s\n Severity: %s\nDescription: %s\nFirst observed at: %s\n%s: %s" % (region, accountId, complianceStatus, findingType, 
severity, findingDescription, findingTime, remediation, remediationUrl)
    response = sns.publish(
            TopicArn = "arn:aws:sns:REGION:ACCOUNT_ID:SendFindingsTopic",
            Message = message
            )
    return {
      'statusCode': 200,
      'body': json.dumps('Success!')
}

참고: 앞의 코드는 알림 메시지를 사용자 지정하고 재형성합니다. TopicArn ("arn:aws:sns:REGION:ACCOUNT_ID:SendFindingsTopic")을 사용자 주제 ARN으로 교체합니다.

13.    함수 코드를 저장하려면 배포를 선택합니다.

EventBridge를 Lambda 함수의 트리거로 추가

1.    함수 개요 섹션에서 트리거 추가를 선택합니다.

2.    트리거 구성에서 Eventbridge(CloudWatch Events)를 선택합니다.

3.    규칙에 대해 기존 규칙을 선택합니다.

4.    기존 규칙에 대해 이전에 생성한 CloudWatch Events 규칙을 선택합니다.

5.    추가를 선택합니다.

CloudWatch Events 규칙 편집

1.    CloudWatch 콘솔을 엽니다.

2.    탐색 창의 이벤트 섹션에서 규칙을 선택합니다.

3.    규칙 목록에서 이전에 생성한 CloudWatch Events 규칙을 선택합니다.

4.    작업을 선택한 다음 편집을 선택합니다.

5.    대상 섹션에서 주제에 대한 SNS 대상을 제거합니다.

6.    세부 정보 구성을 선택합니다.

7.    규칙 업데이트를 선택합니다.

규칙을 테스트하면 다음과 유사한 알림을 받게 됩니다.

AWS SecurityHub alert in us-east-1 for account: 111122223333
관련 검색: [FAILED] Software and Configuration Checks/Industry and Regulatory Standards/CIS AWS Foundations Benchmark
심각도: 낮음
설명: “루트” 계정은 AWS 계정의 모든 리소스에 대한 무제한 액세스 권한을 가집니다. 이 계정의 사용을 피하는 것이 좋습니다.
처음 관찰됨: 2020-10-22T10:18:10.991Z
이 문제를 해결하는 방법에 대한 지침은 AWS Security Hub CIS 설명서를 참조하십시오.: SampleURL
--
이 주제의 알림 수신을 중단하려면 아래 링크를 클릭하거나 방문하여 구독 취소하십시오.
구독 취소


이 이메일에 직접 회신하지 마십시오. 이 이메일과 관련하여 질문이나 의견이 있으시면 https://aws.amazon.com/support로 문의하십시오.


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


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