Amazon SNS トピックで EventBridge を使用して、Security Hub の検出結果に関するカスタマイズされた E メール通知を設定するにはどうすればよいですか?
Amazon EventBridge と Amazon Simple Notification Service (Amazon SNS) トピックを使用して、Security Hub の検出結果に関するカスタマイズされた E メール通知を設定したいと考えています。
簡単な説明
次の解決策は、Security Hub の通知を受信するように EventBridge と SNS を設定する方法を示しています。イベントが発生すると、Amazon SNS は EventBridge ルールに基づいて、トピックをサブスクライブしている E メールアドレスに通知を送信します。生成されたメッセージは、その書式設定が原因で読みにくい可能性があります。ただし、AWS Lambda 関数を含めると、SNS サブスクライバーに送信する前に、書式が改善されている、カスタマイズされたアラートメッセージが作成されます。
カスタマイズした E メール通知を作成するには、次の操作を実行します。
1. 次の EventBridge ルールのターゲットを作成します。
SNS トピックと E メールサブスクリプション。
Lambda 関数。
2. EventBridge ルールを作成します。
3. カスタマイズした通知を受信します。
重要: 次の解決方法では、カスタマイズに AWS Security Hub イベントと Lambda 関数を使用します。関連コストの詳細については、「AWS Security Hub の料金」および「AWS Lambda 料金」を参照してください。
解決方法
SNS トピックとサブスクリプションを作成する
1. Amazon SNS コンソールを開きます。
2. ナビゲーションペインで、[トピック] を選択します。
3. [トピックを作成] を選択します。
4. [詳細] セクションの [タイプ] で、[標準] を選択します。
5. [名前] に、トピックの名前を入力します。
6. [Create topic] を選択します。
7. 作成したトピックから、[Create subscription] (サブスクリプションの作成) を選択します。
8. [Topic ARN] (トピック ARN) で、前に作成したトピックの Amazon リソースネーム (ARN) を選択します (自動的に入力されない場合)。
9. [Protocol] (プロトコル) で、Email と入力します。
10. [Endpoint] (エンドポイント) で、SNS 通知を受信する E メールアドレスを入力します。
11. [Create subscription] (サブスクリプションの作成) を選択します。
重要: サブスクリプションを [PendingConfirmation] ステータスから [Confirmed] に切り替えるには、サブスクライバーに送信される確認メールでサブスクリプションを確認する必要があります。
注: (オプション) トピックに対するサブスクリプション解除アクションを防止する、認証済みサブスクリプションを作成することもできます。
Lambda 関数を作成する
JSON コンテンツから必要な情報を抽出し、カスタマイズしたメッセージを Amazon SNS に発行する Lambda 関数を作成します。
1. Lambda コンソールを開きます。
2. ナビゲーションペインで [Functions] を選択します。
3. [Create function] を選択します。
4. [Author from scratch] を選択します。
5. [Function Name] に関数の名前を入力します。
6. [Runtime] (ランタイム) を選択し、[Python 3.9] を選択します。
7. [Architecture] (アーキテクチャ) で、[x86_64] を選択します。
8. [Change default execution role] (デフォルト実行ロールを変更) を展開します。
9. [Execution role] (実行ロール) で、[Create a new role from AWS policy templates] (AWS ポリシーテンプレートから新しいロールを作成) を選択します。
10. [ロール名] に、ロールの名前を入力します。
11. [Policy template] (ポリシーテンプレート) で、[Amazon SNS publish policy] (Amazon SNS 発行ポリシー) を選択します。
12. [Create function] (関数の作成) を選択します。
13. 関数が作成されたら、[Code source] (コードソース) セクションに次のコードを貼り付けます。
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-x:xxxxxxxxxxxx:test", Message = message ) return { 'statusCode': 200, 'body': json.dumps('Success!') }
注意: 前述のコードは、Security Hub アラートメッセージをカスタマイズして再フォーマットします。TopicArn("arn:aws:sns:REGION:ACCOUNT_ID:SecurityHubFindings") を、ご利用のトピック ARN に置き換えます。eu-west-x: xxxxxxxxxxxx をご利用のアカウント ID に置き換えます。
14. 関数コードを保存するには、[Deploy] (デプロイ) を選択します。
この関数は、デフォルトの Security Hub イベントを受け取り、読みやすい形式に再フォーマットします。メッセージの例を次に示します。
例 1: Security Hub Insight の結果
デフォルト:
{"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}]}}
カスタマイズ済み:
Alert: Security Hub Insight Results in us-east-1 for account: 123456789012 Action description: Send Findings to Slack
例 2: Security Hub の検出結果 - カスタムアクション
デフォルト:
{ "version": "0", "id": "e215f5c7-a866-e0cd-6d11-fc7ecf97e381", "detail-type": "Security Hub Findings - Custom Action", "source": "aws.securityhub", "account": "123456789012", "time": "2019-04-11T22:06:13Z", "region": "us-east-1", "resources": ["arn:aws:securityhub:us-east-1:123456789012:action/custom/slackMessaging"], "detail": { "actionName": "SendToSlack", "actionDescription": "Send Findings to Slack", "findings": [{ "SchemaVersion": "2018-10-08", "Id": "arn:aws:securityhub:us-east-1:123456789012:subscription/cis-aws-foundations-benchmark/v/1.2.0/1.12/finding/17932c44-6d58-4b3c", "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/securityhub", "GeneratorId": "arn:aws:securityhub:::ruleset/cis-aws-foundations-benchmark/v/1.2.0/rule/1.12", "AwsAccountId": "123456789012", "Types": ["Software and Configuration Checks/Industry and Regulatory Standards/CIS AWS Foundations Benchmark"], "FirstObservedAt": "2018-12-02T05:06:34.874Z", "LastObservedAt": "2019-04-11T18:07:10.995Z", "CreatedAt": "2018-12-02T05:06:34.874Z", "UpdatedAt": "2019-04-11T18:26:20.631Z", "Severity": { "Product": 0, "Normalized": 0 }, "Title": "1.12 Ensure no root account access key exists", "Description": "The root account is the most privileged user in an AWS account...", "Remediation": { "Recommendation": { "Text": "For directions on how to fix this issue, please consult the AWS Security Hub CIS documentation.", "Url": "https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards.html#securityhub-standards-checks-1.12" } }, "ProductFields": { "StandardsGuideArn": "arn:aws:securityhub:::ruleset/cis-aws-foundations-benchmark/v/1.2.0", "StandardsGuideSubscriptionArn": "arn:aws:securityhub:us-east-1:123456789012:subscription/cis-aws-foundations-benchmark/v/1.2.0", "RuleId": "1.12", "RecommendationUrl": "https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards.html#securityhub-standards-checks-1.12", "RecordState": "ACTIVE", "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/securityhub/arn:aws:securityhub:us-east-1:123456789012:subscription/cis-aws-foundations-benchmark/v/1.2.0/1.12/finding/17932c44-6d58-4b3c", "aws/securityhub/SeverityLabel": "INFORMATIONAL", "aws/securityhub/ProductName": "Security Hub", "aws/securityhub/CompanyName": "AWS" }, "Resources": [{ "Type": "AwsAccount", "Id": "AWS::::Account:123456789012", "Partition": "aws", "Region": "us-east-1" }], "Compliance": { "Status": "PASSED" }, "RecordState": "ACTIVE", "WorkflowState": "NEW" }, { "SchemaVersion": "2018-10-08", "Id": "arn:aws:securityhub:us-east-1:123456789012:subscription/cis-aws-foundations-benchmark/v/1.2.0/2.8/finding/5d6b42d8-122b-4cdf-8498-e045752e170c", "ProductArn": "arn:aws:securityhub:us-east-1::product/aws/securityhub", "GeneratorId": "arn:aws:securityhub:::ruleset/cis-aws-foundations-benchmark/v/1.2.0/rule/2.8", "AwsAccountId": "123456789012", "Types": ["Software and Configuration Checks/Industry and Regulatory Standards/CIS AWS Foundations Benchmark"], "FirstObservedAt": "2019-01-05T05:21:44.990Z", "LastObservedAt": "2019-04-11T18:26:12.510Z", "CreatedAt": "2019-01-05T05:21:44.990Z", "UpdatedAt": "2019-04-11T18:26:12.510Z", "Severity": { "Product": 0, "Normalized": 0 }, "Title": "2.8 Ensure rotation for customer created CMKs is enabled", "Description": "AWS Key Management Service (KMS) allows customers to rotate the backing key...", "Remediation": { "Recommendation": { "Text": "For directions on how to fix this issue, please consult the AWS Security Hub CIS documentation.", "Url": "https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards.html#securityhub-standards-checks-2.8" } }, "ProductFields": { "StandardsGuideArn": "arn:aws:securityhub:::ruleset/cis-aws-foundations-benchmark/v/1.2.0", "StandardsGuideSubscriptionArn": "arn:aws:securityhub:us-east-1:123456789012:subscription/cis-aws-foundations-benchmark/v/1.2.0", "RuleId": "2.8", "RecommendationUrl": "https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards.html#securityhub-standards-checks-2.8", "RecordState": "ACTIVE", "aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/securityhub/arn:aws:securityhub:us-east-1:123456789012:subscription/cis-aws-foundations-benchmark/v/1.2.0/2.8/finding/5d6b42d8-122b-4cdf-8498-e045752e170c", "aws/securityhub/SeverityLabel": "INFORMATIONAL", "aws/securityhub/ProductName": "Security Hub", "aws/securityhub/CompanyName": "AWS" }, "Resources": [{ "Type": "AwsAccount", "Id": "AWS::::Account:123456789012", "Partition": "aws", "Region": "us-east-1" }], "Compliance": { "Status": "PASSED" }, "RecordState": "ACTIVE", "WorkflowState": "NEW" }] } }
カスタマイズ済み:
Alert: Security Hub Findings - Custom Action in us-east-1 for account: 123456789012 Finding regarding: The root account is the most privileged user in an AWS account... First observed at: 2018-12-02T05:06:34.874Z Remediation recommendation: For directions on how to fix this issue, please consult the AWS Security Hub CIS documentation.
例 3: Security Hub の検出結果 - インポート済み
デフォルト:
{ "version": "0", "id": "8e5622f9-d81c-4d81-612a-9319e7ee2506", "detail-type": "Security Hub Findings - Imported", "source": "aws.securityhub", "account": "123456789012", "time": "2019-04-11T21:52:17Z", "region": "us-west-2", "resources": ["arn:aws:securityhub:us-west-2::product/aws/macie/arn:aws:macie:us-west-2:123456789012:integtest/trigger/6294d71b927c41cbab915159a8f326a3/alert/f2893b211841"], "detail": { "findings": [{ "SchemaVersion": "2018-10-08", "Id": "arn:aws:macie:us-west-2:123456789012:integtest/trigger/6214d71b927c41cbab015159a8f316a3/alert/f2893b211841467198cc1201e9031ee4", "ProductArn": "arn:aws:securityhub:us-west-2::product/aws/macie", "GeneratorId": "arn:aws:macie:us-west-2:123456789012:integtest/trigger/6214d71b927c41cbab015159a8f316a3", "AwsAccountId": "123456789012", "Types": ["Sensitive Data Identifications/Passwords/Google Suite Two-factor backup codes in S3"], "FirstObservedAt": "2019-04-11T21:52:15.900Z", "LastObservedAt": "2019-04-11T21:52:15.900Z", "CreatedAt": "2019-04-11T21:52:15.900Z", "UpdatedAt": "2019-04-11T21:52:15.900Z", "Severity": { "Product": 6, "Normalized": 15 }, "Confidence": 5, "Title": "Google Suite Two-Factor Backup Codes uploaded to S3", "Description": "Google Suite two-factor backup codes uploaded to S3....", "Remediation": { "Recommendation": { "Text": "v2 Release" } }, "ProductFields": { "rule-arn": "arn:aws:macie:us-west-2:123456789012:trigger/6214d71b927c41cbab015159a8f316a3", "tags:0": "DATA_COMPLIANCE", "tags:1": "BASIC_ALERT", "themes:0/theme": "google_two_factor_backup", "themes:0/count": "1", "dlpRisk:0/risk": "8", "dlpRisk:0/count": "1", "owner:0/name": "vchin", "owner:0/count": "1", "aws/securityhub/FindingId": "arn:aws:securityhub:us-west-2::product/aws/macie/arn:aws:macie:us-west-2:123456789012:integtest/trigger/6214d71b927c41cbab015159a8f316a3/alert/f2893b211841467198cc1201e9031ee4", "aws/securityhub/SeverityLabel": "LOW", "aws/securityhub/ProductName": "Macie", "aws/securityhub/CompanyName": "Amazon" }, "Resources": [{ "Type": "AwsS3Bucket", "Id": "arn:aws:s3:::test-bucket-12", "Partition": "aws", "Region": "us-west-2" }], "RecordState": "ACTIVE", "WorkflowState": "NEW" }] } }
カスタマイズ済み:
Alert: Security Hub Findings - Imported in us-west-2 for account: 123456789012 Finding regarding: Google Suite two-factor backup codes uploaded to S3.... First observed at: 2019-04-11T21:52:15.900Z Remediation recommendation: v2 Release
例 4 - CloudTrail 経由の AWS API コール
デフォルト:
{"version": "0", "id": "b34c4525-95f0-8dd1-cd9e-9fc5be10039e", "detail-type": "AWS API Call via CloudTrail", "source": "aws.securityhub", "account": "123456789012", "time": "2021-12-10T10:47:54Z", "region": "eu-west-1", "resources": [], "detail": {"eventVersion": "1.08", "userIdentity": {"type": "AssumedRole", "principalId": "AROATGMYP4FKHTE5RKJC3", "arn": "arn:aws:sts::123456789012", "accountId": "123456789012", "accessKeyId": "ASIATGMYXXFKNHWOYQF7", "sessionContext": {"sessionIssuer": {"type": "Role", "principalId": "AROATGMYP4FKHX5RKJC3", "arn": "arn:aws:iam::123456789012:role/Admin", "accountId": "123456789012", "userName": "Admin"}, "webIdFederationData": {}, "attributes": {"creationDate": "2021-12-10T10:08:16Z", "mfaAuthenticated": "false"}}}, "eventTime": "2021-12-10T10:47:54Z", "eventSource": "securityhub.amazonaws.com", "eventName": "BatchUpdateFindings", "awsRegion": "eu-west-1", "sourceIPAddress": "54.240.197.20", "userAgent": "aws-internal/3 aws-sdk-java/1.12.112 Linux/5.4.156-94.273.amzn2int.x86_64 OpenJDK_64-Bit_Server_VM/25.312-b07 java/1.8.0_312 vendor/Oracle_Corporation cfg/retry-mode/standard", "requestParameters": {"Workflow": {"Status": "NEW"}, "FindingIdentifiers": [{"Id": "arn:aws:securityhub:eu-west-1:123456789012:subscription/cis-aws-foundations-benchmark/v/1.2.0/2.5/finding/2fd7f0dd-1088-44c5-bbe1-9c8a0ddce035", "ProductArn": "arn:aws:securityhub:eu-west-1::product/aws/securityhub"}]}, "responseElements": {"UnprocessedFindings": [], "ProcessedFindings": [{"Id": "arn:aws:securityhub:eu-west-1:123456789012:subscription/cis-aws-foundations-benchmark/v/1.2.0/2.5/finding/2fd7f0dd-1088-44c5-bbe1-9c8a0ddce035", "ProductArn": "arn:aws:securityhub:eu-west-1::product/aws/securityhub"}]}, "requestID": "fd52e76e-282f-47c7-a7bc-b9a1e1ca2cdd", "eventID": "433b8e9c-cf08-4909-adf7-ea0c548459ad", "readOnly": "False", "eventType": "AwsApiCall", "managementEvent": "True", "recipientAccountId": "123456789012", "eventCategory": "Management"}}
カスタマイズ済み:
Alert: AWS API Call via CloudTrail in eu-west-1 for account: 123456789012 at time: 2021-12-10T10:47:32Z Event: BatchUpdateFindings Request parameters: {'Workflow': {'Status': 'NOTIFIED'}, 'FindingIdentifiers': [{'Id': 'arn:aws:securityhub:eu-west-x:xxxxxxxxxxxx:subscription/cis-aws-foundations-benchmark/v/1.2.0/2.5/finding/2fd7f0dd-1088-44c5-bbe1-9c8a0ddce035', 'ProductArn': 'arn:aws:securityhub:eu-west-1::product/aws/securityhub'}]}
注: Security の各検出結果タイプについてメッセージを編集して、ユースケースにより適したものにすることができます。
EventBridge ルールを作成して設定する
1. [EventBridge コンソール] を開きます。
2. [Create rule] (ルールを作成) を選択します。
3. ルールの [Name] (名前) を入力します。必要に応じて [Description] (説明) を入力できます。
4. [Define pattern] (パターン定義) で、[Event pattern] (イベントパターン) を選択します。
5. [Event matching pattern] (イベント一致パターン) で、[Pre-defined pattern by service] (サービスごとの事前定義パターン) を選択します。
6. [Service provider] (サービスプロバイダー) で、[AWS] を選択します。
7. [Service name] (サービス名) で、[Security hub] を選択します。
8. [Event type] (イベントタイプ) で、[All Events] (すべてのイベント) を選択します。
注: すべてのイベントではなく、特定のイベントについてアラートを設定することもできます。Lambda 関数は、すべてのイベントをより読みやすい形式に再フォーマットするように設定されています。
9. [Select event bus] (イベントバスを選択) セクションで、[AWS default event bus] (AWS のデフォルトのイベントバス) を選択します。
10. [Select targets] (ターゲットを選択) で、[Target] (ターゲット) メニューから [Lambda target] (Lambda のターゲット) を選択します。
11. 以前に作成した Lambda 関数を選択します。
カスタマイズした通知を受け取る
設定したイベントのいずれかが発生すると、no-reply@sns.amazonaws.com からカスタマイズされた通知が E メールで届きます。
関連情報
チュートリアル: EventBridge がイベントターゲットに渡すものを Input Transformer を使用してカスタマイズする

関連するコンテンツ
- 質問済み 7年前lg...
- AWS公式更新しました 3年前