AWS Security Hub のログを収集する

以下でサポートされています。

このドキュメントでは、AWS Security Hub ログを Google Security Operations に取り込む方法について説明します。AWS Security Hub は、AWS アカウント全体のセキュリティ アラートと検出結果の包括的なビューを提供します。これらの検出結果を Google SecOps に送信することで、Google SecOps の機能を使用してモニタリングと脅威検出を強化できます。

始める前に

次の前提条件を満たしていることを確認します。

  • Google SecOps インスタンス
  • AWS への特権アクセス

AWS IAM と S3 を構成する

  1. バケットの作成のユーザーガイドに沿って、Amazon S3 バケットを作成します。
  2. 後で使用するために、バケットの名前リージョンを保存します。
  3. IAM ユーザーの作成のユーザーガイドに沿って、ユーザーを作成します。
  4. 作成した [ユーザー] を選択します。
  5. [セキュリティ認証情報] タブを選択します。
  6. [アクセスキー] セクションで [アクセスキーを作成] をクリックします。
  7. [ユースケース] として [サードパーティ サービス] を選択します。
  8. [次へ] をクリックします。
  9. 省略可: 説明タグを追加します。
  10. [アクセスキーを作成] をクリックします。
  11. [CSV ファイルをダウンロード] をクリックして、[アクセスキー] と [シークレット アクセスキー] を保存し、後で使用できるようにします。
  12. [完了] をクリックします。
  13. [権限] タブを選択します。
  14. [権限ポリシー] セクションで、[権限を追加] をクリックします。
  15. [権限を追加] を選択します。
  16. [ポリシーを直接アタッチする] を選択します。
  17. AmazonS3FullAccess ポリシーを検索して選択します。
  18. [次へ] をクリックします。
  19. [権限を追加] をクリックします。

Lambda 関数を作成する

  1. AWS Management Console にログインします。
  2. [Lambda] に移動します。
  3. [関数の作成] をクリックし、[最初から作成] を選択します。
  4. 関数の名前を指定します(例: SecurityHubToS3)。
  5. ランタイムに [Python 3.x] を選択します。
  6. 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')
       }
    
  7. 次のポリシーを使用して 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 を構成する方法

  1. AWS Management Console にログインします。
  2. 検索バーに「Security Hub」と入力し、サービスリストから [Security Hub] を選択します。
  3. [設定] をクリックします。
  4. [Integrations] セクションで、[EventBridge] を見つけて [Enable] をクリックします。
  5. 検索バーに「EventBridge」と入力し、サービスのリストから [EventBridge] を選択します。
  6. EventBridge コンソールで、[ルール> ルールを作成] をクリックします。
  7. 次のルールの構成を指定します。
    1. ルール名: ルールにわかりやすい名前を付けます(例: SendSecurityHubFindingsToS3)。
    2. イベントソース: [AWS サービス] を選択します。
    3. サービス名: [Security Hub] を選択します。
    4. イベントタイプ: [Security Hub の検出結果] を選択します。
    5. ターゲットを設定する: [Lambda 関数] を選択します。
    6. 作成した Lambda 関数(SecurityHubToS3)を選択します。
  8. [作成] をクリックします。

フィードを設定する

Google SecOps プラットフォームでフィードを設定するには、次の 2 つのエントリ ポイントがあります。

  • [SIEM 設定] > [フィード]
  • [Content Hub] > [Content Packs]

[SIEM 設定] > [フィード] でフィードを設定する

このプロダクト ファミリー内で異なるログタイプに複数のフィードを構成するには、複数のフィードを構成するをご覧ください。

1 つのフィードを設定する手順は次のとおりです。

  1. [SIEM 設定] > [フィード] に移動します。
  2. [Add New Feed] をクリックします。
  3. 次のページで、[単一フィードを設定] をクリックします。
  4. [フィード名] フィールドに、フィードの名前を入力します(例: AWS Security Hub Logs)。
  5. [ソースタイプ] として [Amazon S3] を選択します。
  6. [ログタイプ] として [AWS Security Hub] を選択します。
  7. [次へ] をクリックします。
  8. 次の入力パラメータの値を指定します。

    • リージョン: 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: このフィードのイベントに適用されるラベル。

  9. [次へ] をクリックします。

  10. [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_typetarget.resource.resource_subtypemetadata.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[].resourceIdvpc と一致する場合、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 のプロフェッショナルから回答を得ることができます。