AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
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 を使用してカスタマイズする
- 言語
- 日本語
