AWS Security Hub のログを収集する
このドキュメントでは、AWS Security Hub ログを Google Security Operations に取り込む方法について説明します。AWS Security Hub は、AWS アカウント全体のセキュリティ アラートと検出結果の包括的なビューを提供します。これらの検出結果を Google SecOps に送信することで、Google SecOps の機能を使用してモニタリングと脅威検出を強化できます。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス
- AWS への特権アクセス
AWS IAM と S3 を構成する
- バケットの作成のユーザーガイドに沿って、Amazon S3 バケットを作成します。
- 後で使用するために、バケットの名前とリージョンを保存します。
- IAM ユーザーの作成のユーザーガイドに沿って、ユーザーを作成します。
- 作成したユーザーを選択します。
- [セキュリティ認証情報] タブを選択します。
- [アクセスキー] セクションで [アクセスキーを作成] をクリックします。
- [ユースケース] で [サードパーティ サービス] を選択します。
- [次へ] をクリックします。
- 省略可: 説明タグを追加します。
- [アクセスキーを作成] をクリックします。
- [CSV ファイルをダウンロード] をクリックして、[アクセスキー] と [シークレット アクセスキー] を保存し、後で使用できるようにします。
- [完了] をクリックします。
- [権限] タブを選択します。
- [権限ポリシー] セクションで、[権限を追加] をクリックします。
- [権限を追加] を選択します。
- [ポリシーを直接アタッチする] を選択します。
- AmazonS3FullAccess ポリシーを検索して選択します。
- [次へ] をクリックします。
- [権限を追加] をクリックします。
Lambda 関数を作成する
- AWS Management Console にログインします。
- [Lambda] に移動します。
- [関数の作成] をクリックし、[最初から作成] を選択します。
- 関数の名前を指定します(例: SecurityHubToS3)。
- ランタイムに [Python 3.x] を選択します。
- EventBridge から検出結果を取得して S3 バケットに書き込む Lambda コードを入力します。 - import json import boto3 from datetime import datetime # Initialize the S3 client s3_client = boto3.client('s3') # S3 bucket where findings will be stored bucket_name = 'aws-security-hub-findings-stream' def lambda_handler(event, context): # Extract Security Hub findings from the event findings = event['detail']['findings'] # Generate a timestamp for the file name to avoid overwriting timestamp = datetime.now().strftime('%Y-%m-%dT%H-%M-%S') # Generate the S3 object key (file name) based on the timestamp object_key = f"security_hub_findings_{timestamp}.json" # Convert findings to JSON format findings_json = json.dumps(findings) # Upload the findings to S3 try: response = s3_client.put_object( Bucket=bucket_name, Key=object_key, Body=findings_json, ContentType='application/json' ) print(f"Successfully uploaded findings to S3: {response}") except Exception as e: print(f"Error uploading findings to S3: {e}") raise e return { 'statusCode': 200, 'body': json.dumps('Successfully processed findings') }
- 次のポリシーを使用して Lambda 関数に IAM ロールを追加し、Lambda の権限を設定します。 - { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::aws-security-hub-findings-stream/*" } ] }
EventBridge で検出結果を転送するように AWS Security Hub を構成する方法
- AWS Management Console にログインします。
- 検索バーに「Security Hub」と入力し、サービスリストから [Security Hub] を選択します。
- [設定] をクリックします。
- [Integrations] セクションで、[EventBridge] を見つけて [Enable] をクリックします。
- 検索バーに「EventBridge」と入力し、サービスのリストから [EventBridge] を選択します。
- EventBridge コンソールで、[ルール> ルールを作成] をクリックします。
- 次のルールの構成を指定します。
- ルール名: ルールにわかりやすい名前を付けます(例: SendSecurityHubFindingsToS3)。
- イベントソース: [AWS サービス] を選択します。
- サービス名: [Security Hub] を選択します。
- イベントタイプ: [Security Hub の結果] を選択します。
- ターゲットを設定する: [Lambda 関数] を選択します。
- 作成した Lambda 関数(SecurityHubToS3)を選択します。
 
- [作成] をクリックします。
フィードを設定する
Google SecOps プラットフォームでフィードを設定するには、次の 2 つのエントリ ポイントがあります。
- [SIEM 設定] > [フィード] > [新しいフィードを追加]
- Content Hub > Content Packs > Get Started
AWS Security Hub フィードの設定方法
- [Amazon Cloud Platform] パックをクリックします。
- AWS Security Hub ログタイプを見つけます。
- 次のフィールドで値を指定します。 - ソースタイプ: Amazon SQS V2
- キュー名: 読み取る SQS キュー名
- S3 URI: バケット URI。- s3://your-log-bucket-name/- your-log-bucket-nameは、実際の S3 バケットの名前に置き換えます。
 
 
- Source deletion options: 取り込みの設定に応じて削除オプションを選択します。 
- ファイルの最大経過日数: 指定した日数以内に変更されたファイルを含めます。デフォルトは 180 日です。 
- SQS キュー アクセスキー ID: 20 文字の英数字の文字列であるアカウント アクセスキー。 
- SQS キューのシークレット アクセスキー: 40 文字の英数字の文字列であるアカウント アクセスキー。 
 - 詳細オプション - フィード名: フィードを識別する事前入力された値。
- アセットの名前空間: フィードに関連付けられた名前空間。
- Ingestion Labels: このフィードのすべてのイベントに適用されるラベル。
 
- [フィードを作成] をクリックします。 
このプロダクト ファミリー内の異なるログタイプに対して複数のフィードを構成する方法については、プロダクト別にフィードを構成するをご覧ください。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック | 
|---|---|---|
| account | principal.group.product_object_id | 検出結果に関連付けられている AWS アカウント ID。 | 
| configurationItem.ARN | target.resource.id | 構成アイテムの Amazon Resource Name(ARN)。 | 
| configurationItem.awsAccountId | principal.user.userid | 構成アイテムの AWS アカウント ID。 | 
| configurationItem.awsRegion | target.asset.location.country_or_region | 構成アイテムの AWS リージョン。 | 
| configurationItem.configuration.complianceType | security_result.summary | 構成アイテムのコンプライアンス タイプ。 | 
| configurationItem.configuration.configRuleList[].complianceType | security_result.summary | 各構成ルールのコンプライアンス ステータス。 | 
| configurationItem.configuration.configRuleList[].configRuleArn | security_result.rule_id | AWS Config ルールの ARN。 | 
| configurationItem.configuration.configRuleList[].configRuleId | security_result.about.labels.configRuleId | AWS Config ルールの ID。 | 
| configurationItem.configuration.configRuleList[].configRuleName | security_result.rule_name | AWS Config ルールの名前。 | 
| configurationItem.configuration.privateIpAddress | target.ip | 構成アイテムのプライベート IP アドレス。 | 
| configurationItem.configuration.publicIpAddress | target.ip | 構成アイテムのパブリック IP アドレス。 | 
| configurationItem.configurationItemCaptureTime | target.asset.attribute.creation_time | 構成アイテムの取得時間(タイムスタンプに変換済み)。 | 
| configurationItem.configurationItemStatus | target.asset.attribute.labels.Configuration Item Status | 構成アイテムのステータス。 | 
| configurationItem.relationships[].resourceId | target.asset.attribute.cloud.vpc.id | 関連リソースのリソース ID。 vpcと一致する場合は VPC ID に使用されます。 | 
| configurationItem.resourceId | target.resource.id | 構成アイテムのリソース ID。 | 
| configurationItem.resourceName | target.resource.name | リソースの名前。 | 
| configurationItem.resourceType | target.resource.resource_subtype | 構成アイテムのリソースタイプ。 | 
| configurationItem.tags.Contact | principal.user.user_display_nameまたはprincipal.user.email_addresses | タグから抽出された連絡先情報。メールアドレスとユーザー名が解析されます。 | 
| configurationItem.tags.OS/configurationItem.tags.Os | target.asset.platform_software.platform | タグのオペレーティング システム。 WindowsまたはLinuxの場合はプラットフォームにマッピングされます。 | 
| configurationItemDiff.changeType | metadata.event_type | 変更のタイプ。RESOURCE_WRITTEN または RESOURCE_CREATION にマッピングされます。 | 
| detail.accountId | principal.group.product_object_id | 検出結果に関連付けられている AWS アカウント ID。 | 
| detail.actionDescriptiondetail.actionNamedetail.description | sec_result.description | 検出結果の説明。 | 
| detail.findings[].AwsAccountId | principal.group.product_object_id | 検出結果に関連付けられている AWS アカウント ID。 | 
| detail.findings[].CompanyNamedetail.findings[].CreatedAtdetail.findings[].Description | sec_result.description | 検出結果の説明。 | 
| detail.findings[].FindingProviderFields.Severity.Label | sec_result.severity | 検出結果の重大度ラベル(大文字に変換)。 | 
| detail.findings[].FindingProviderFields.Types[]detail.findings[].FirstObservedAtdetail.findings[].GeneratorIddetail.findings[].Iddetail.findings[].LastObservedAtdetail.findings[].ProductArndetail.findings[].ProductFields. | 以下を参照 | 追加フィールド、プリンシパル、ターゲット情報に使用されるさまざまなフィールド。 | 
| detail.findings[].ProductNamedetail.findings[].RecordStatedetail.findings[].Region | target.location.name | 検出結果の AWS リージョン。 | 
| detail.findings[].Resources[].Details. | 以下を参照 | 検出結果に関連するリソースの詳細。 | 
| detail.findings[].Resources[].Id | target.resource.product_object_id | リソースの ID。 | 
| detail.findings[].Resources[].Partitiondetail.findings[].Resources[].Region | target.location.name | リソースの AWS リージョン。 | 
| detail.findings[].Resources[].Tagsdetail.findings[].Resources[].Type | target.resource.resource_type、target.resource.resource_subtype、metadata.event_type | リソース タイプ、サブタイプ、イベント タイプのマッピングに使用されるリソースのタイプ。 | 
| detail.findings[].Sampledetail.findings[].SchemaVersiondetail.findings[].Severity.Labeldetail.findings[].SourceUrldetail.findings[].Title | sec_result.summary | 検出結果のタイトル。 | 
| detail.findings[].Types[]detail.findings[].UpdatedAtdetail.findings[].Workflow.Statusdetail.findings[].WorkflowStatedetail-type | metadata.product_event_type | イベントの詳細タイプ。 | 
| id | metadata.product_log_id | イベントの ID。 | 
| region | target.location.name | イベントの AWS リージョン。 | 
| resources[]sourcetimeversion(パーサー ロジック) | metadata.event_timestamp | 元のログエントリの作成時間。イベントのタイムスタンプとして使用されます。 | 
| (パーサー ロジック) | metadata.log_type | AWS_SECURITY_HUBに設定します。 | 
| (パーサー ロジック) | metadata.product_name | AWS Security Hubに設定します。 | 
| (パーサー ロジック) | metadata.vendor_name | AMAZONに設定します。 | 
| (パーサー ロジック) | target.asset.attribute.cloud.environment | AMAZON_WEB_SERVICESに設定します。 | 
| (パーサー ロジック) | metadata.event_type | Resources[].TypeまたはconfigurationItemDiff.changeTypeからマッピングされていない場合は、デフォルトでUSER_RESOURCE_ACCESSに設定します。configurationItemsが存在し、他のイベントタイプが設定されていない場合はSTATUS_UPDATEに設定します。configurationItemまたはconfigurationItemsが存在し、ステータスがOKまたはResourceDiscoveredの場合、RESOURCE_READに設定します。configurationItemまたはconfigurationItemsが存在し、ステータスがResourceDeletedの場合、RESOURCE_DELETIONに設定します。 | 
| (パーサー ロジック) | metadata.description | detail.findings[].ProductFields.aws/guardduty/service/serviceNameが存在する場合はguarddutyに設定します。 | 
| (パーサー ロジック) | target.asset.attribute.cloud.vpc.resource_type | configurationItems.relationships[].resourceIdがvpcと一致する場合、VPC_NETWORKに設定します。 | 
| (パーサー ロジック) | target.resource.resource_type | configurationItemまたはconfigurationItemsが存在する場合は、VIRTUAL_MACHINEに設定します。他のリソースタイプが設定されていない場合は、UNSPECIFIEDに設定します。 | 
| (パーサー ロジック) | target.asset.platform_software.platform | configurationItemのメッセージにWindowsまたは(Linux|LINUX)が含まれているかどうかに基づいて、WINDOWSまたはLINUXに設定されます。configurationItemsの場合は、configItem.tags.OSまたはconfigItem.tags.Osに基づいて設定されます。 | 
| (パーサー ロジック) | disambiguation_key | 1 つのログエントリから複数のイベントが生成された場合に追加されます。 | 
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。