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]
[SIEM 設定] > [フィード] でフィードを設定する
このプロダクト ファミリー内で異なるログタイプに複数のフィードを構成するには、複数のフィードを構成するをご覧ください。
1 つのフィードを設定する手順は次のとおりです。
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- 次のページで、[単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例: AWS Security Hub Logs)。
- [ソースタイプ] として [Amazon S3] を選択します。
- [ログタイプ] として [AWS Security Hub] を選択します。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
- リージョン: Amazon S3 バケットが配置されているリージョン。
- S3 URI: バケット URI。
s3://your-log-bucket-name/
your-log-bucket-name
は、実際の S3 バケットの名前に置き換えます。
- URI is a: バケット構造に応じて、[ディレクトリ] または [サブディレクトリを含むディレクトリ] を選択します。
Source deletion options: 取り込みの設定に応じて削除オプションを選択します。
アクセスキー ID: S3 バケットから読み取る権限を持つユーザーのアクセスキー。
シークレット アクセスキー: S3 バケットから読み取る権限を持つユーザーのシークレット キー。
アセットの名前空間: アセットの名前空間。
Ingestion labels: このフィードのイベントに適用されるラベル。
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
コンテンツ ハブからフィードを設定する
次のフィールドに値を指定します。
- リージョン: Amazon S3 バケットが配置されているリージョン。
- S3 URI: バケット URI。
s3://your-log-bucket-name/
your-log-bucket-name
は、実際の S3 バケットの名前に置き換えます。
- URI is a: バケット構造に応じて、[ディレクトリ] または [サブディレクトリを含むディレクトリ] を選択します。
- Source deletion options: 取り込みの設定に応じて削除オプションを選択します。
アクセスキー ID: S3 バケットから読み取る権限を持つユーザーのアクセスキー。
シークレット アクセスキー: S3 バケットから読み取る権限を持つユーザーのシークレット キー。
詳細オプション
- フィード名: フィードを識別する事前入力された値。
- ソースタイプ: Google SecOps にログを収集するために使用される方法。
- Asset Namespace: フィードに関連付けられた名前空間。
- 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.actionDescription detail.actionName detail.description |
sec_result.description |
検出結果の説明。 |
detail.findings[].AwsAccountId |
principal.group.product_object_id |
検出結果に関連付けられている AWS アカウント ID。 |
detail.findings[].CompanyName detail.findings[].CreatedAt detail.findings[].Description |
sec_result.description |
検出結果の説明。 |
detail.findings[].FindingProviderFields.Severity.Label |
sec_result.severity |
検出結果の重大度ラベル(大文字に変換)。 |
detail.findings[].FindingProviderFields.Types[] detail.findings[].FirstObservedAt detail.findings[].GeneratorId detail.findings[].Id detail.findings[].LastObservedAt detail.findings[].ProductArn detail.findings[].ProductFields. |
以下をご覧ください。 | 追加フィールド、プリンシパル、ターゲット情報に使用されるさまざまなフィールド。 |
detail.findings[].ProductName detail.findings[].RecordState detail.findings[].Region |
target.location.name |
検出結果の AWS リージョン。 |
detail.findings[].Resources[].Details. |
以下をご覧ください。 | 検出結果に関連するリソースの詳細。 |
detail.findings[].Resources[].Id |
target.resource.product_object_id |
リソースの ID。 |
detail.findings[].Resources[].Partition detail.findings[].Resources[].Region |
target.location.name |
リソースの AWS リージョン。 |
detail.findings[].Resources[].Tags detail.findings[].Resources[].Type |
target.resource.resource_type 、target.resource.resource_subtype 、metadata.event_type |
リソース タイプ、サブタイプ、イベント タイプのマッピングに使用されるリソースのタイプ。 |
detail.findings[].Sample detail.findings[].SchemaVersion detail.findings[].Severity.Label detail.findings[].SourceUrl detail.findings[].Title |
sec_result.summary |
検出結果のタイトル。 |
detail.findings[].Types[] detail.findings[].UpdatedAt detail.findings[].Workflow.Status detail.findings[].WorkflowState detail-type |
metadata.product_event_type |
イベントの詳細タイプ。 |
id |
metadata.product_log_id |
イベントの ID。 |
region |
target.location.name |
イベントの AWS リージョン。 |
resources[] source time version (パーサー ロジック) |
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 のプロフェッショナルから回答を得ることができます。