Qualys アセット コンテキスト ログを収集する

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

このパーサーは、Qualys JSON ログからアセット コンテキスト情報を抽出し、UDM 形式に変換します。ID、IP、ホスト名、クラウド リソースの詳細、OS、タグなどのさまざまなフィールドを解析し、対応する UDM フィールドにマッピングして、アセットとリソース間の関係を作成します。また、パーサーは、クラウド プロバイダとオペレーティング システムの特定のロジックを処理し、UDM で正確に表現できるようにします。

始める前に

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

  • Google Security Operations インスタンス。
  • Google Cloudへの特権アクセス。
  • Qualys への特権アクセス。

必要な API を有効にする:

  1. Google Cloud コンソールにログインします。
  2. [API とサービス] > [ライブラリ] に移動します。
  3. 次の API を検索して有効にします。
    • Cloud Functions API
    • Cloud Scheduler API
    • Cloud Pub/Sub(Cloud Scheduler が関数を呼び出すために必要)

Google Cloud Storage バケットの作成

  1. Google Cloud コンソールにログインします。
  2. [Cloud Storage バケット] のページに移動します。

    [バケット] に移動

  3. [作成] をクリックします。

  4. バケットを構成します。

    • 名前: バケット名の要件を満たす一意の名前を入力します(例: qualys-asset-bucket)。
    • データの保存場所の選択: ロケーションを選択します。
    • データのストレージ クラスを選択する: バケットの [デフォルトのストレージ クラス] を選択するか、ストレージ クラスの自動管理に [Autoclass] を選択します。
    • オブジェクトへのアクセスを制御する方法を選択する: [なし] を選択して公開アクセスの防止を適用し、バケットのオブジェクトの [アクセス制御モデル] を選択します。
    • ストレージ クラス: 必要に応じて選択します(Standard など)。
  5. [作成] をクリックします。

Google Cloud サービス アカウントを作成する

  1. [IAM と管理] > [サービス アカウント] に移動します。
  2. 新しいサービス アカウントを作成します。
  3. わかりやすい名前を付けます(qualys-user など)。
  4. 前の手順で作成した Cloud Storage バケットに対する ストレージ オブジェクト管理者のロールをサービス アカウントに付与します。
  5. サービス アカウントに Cloud Functions 起動元 のロールを付与します。
  6. サービス アカウント用の SSH キーを作成します。
  7. サービス アカウント用の JSON キーファイルをダウンロードします。このファイルは安全に保管してください。

省略可: Qualys で専用の API ユーザーを作成する

  1. Qualys コンソールにログインします。
  2. [ユーザー] にアクセスします。
  3. [New] > [User] をクリックします。
  4. ユーザーに必要な [General Information] を入力します。
  5. [User Role] タブを選択します。
  6. ロールの [API Access] チェックボックスがオンになっていることを確認します。
  7. [Save] をクリックします。

特定の Qualys API URL を識別する

オプション 1

プラットフォームの特定の記事に記載されている方法で URL を特定します。

オプション 2

  1. Qualys コンソールにログインします。
  2. [Help] > [About] に移動します。
  3. スクロールして、[Security Operations Center (SOC)] でこの情報を確認します。
  4. Qualys API URL をコピーします。

Cloud Functions を構成する

  1. Google Cloud コンソールで Cloud Functions に移動します。
  2. [ファンクションを作成] をクリックします。
  3. ファンクションを構成します。

    • 名前: ファンクションの名前を入力します(例: fetch-qualys-assets)。
    • Region: バケットに近いリージョンを選択します。
    • Trigger: 必要に応じて HTTP トリガーを選択します。スケジュール設定された実行の場合は Cloud Pub/Sub を選択します。
    • Authentication: 認証で保護します。
    • インライン エディタでコードを記述します。
    ```python
    from google.cloud import storage
    import requests
    import base64
    import json
    
    # Cloud Storage configuration
    BUCKET_NAME = "<bucket-name>"
    FILE_NAME = "qualys_assets.json"
    
    # Qualys API credentials
    QUALYS_USERNAME = "<qualys-username>"
    QUALYS_PASSWORD = "<qualys-password>"
    QUALYS_BASE_URL = "https://<qualys_base_url>"
    
    def fetch_qualys_assets():
        auth = base64.b64encode(f"{QUALYS_USERNAME}:{QUALYS_PASSWORD}".encode()).decode()
        headers = {
            "Authorization": f"Basic {auth}",
            "Content-Type": "application/xml"
        }
        payload = """
        <ServiceRequest>
            <filters>
                <Criteria field="asset.name" operator="LIKE">%</Criteria>
            </filters>
        </ServiceRequest>
        """
        response = requests.post(f"{QUALYS_BASE_URL}/qps/rest/2.0/search/am/asset", headers=headers, data=payload)
        return response.json()
    
    def upload_to_gcs(data):
        client = storage.Client()
        bucket = client.get_bucket(BUCKET_NAME)
        blob = bucket.blob(FILE_NAME)
        blob.upload_from_string(json.dumps(data), content_type="application/json")
    
    def main(request):
        assets = fetch_qualys_assets()
        upload_to_gcs(assets)
        return "Data uploaded to Cloud Storage successfully!"
    
    ```
    
  4. 構成が完了したら、[Deploy] をクリックします。

Cloud Scheduler を構成する

  1. Google Cloud コンソールで [Cloud Scheduler] に移動します。
  2. [ジョブを作成] をクリックします。
  3. ジョブを構成します。

    • 名前: ジョブの名前を入力します(例: trigger-fetch-qualys-assets)。
    • 頻度: cron 構文を使用してスケジュールを指定します(例: 毎日午前 0 時の場合は 0 0 * * *)。
    • Time Zone: 使用するタイムゾーンを設定します。
    • Trigger Type: [HTTP] を選択します。
    • トリガー URL: Cloud Functions のファンクションの URL を入力します(デプロイ後にファンクションの詳細で確認できます)。
    • メソッド: [POST] を選択します。
  4. ジョブを作成します

フィードを設定する

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

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

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

フィードを構成する手順は次のとおりです。

  1. [SIEM Settings] > [Feeds] に移動します。
  2. [Add New Feed] をクリックします。
  3. 次のページで [単一のフィードを設定] をクリックします。
  4. [フィード名] フィールドに、フィードの名前を入力します(例: Qualys アセット コンテキスト ログ)。
  5. [Source type] として [Google Cloud Storage] を選択します。
  6. [ログタイプ] として [Qualys アセット コンテキスト] を選択します。
  7. [次へ] をクリックします。
  8. 次の入力パラメータの値を指定します。

    • GCS URI: Cloud Storage URI。
    • URI is a: [単一ファイル] を選択します。
    • Source deletion options: 必要に応じて削除オプションを選択します。
  9. [次へ] をクリックします。

  10. [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。

コンテンツ ハブからフィードを設定する

次のフィールドに値を指定します。

  • GCS URI: Cloud Storage URI。
  • URI is a: [単一ファイル] を選択します。
  • Source deletion options: 必要に応じて削除オプションを選択します。

詳細オプション

  • フィード名: フィードを識別する値が事前入力されています。
  • ソースタイプ: ログを Google SecOps に収集するために使用される方法。
  • アセット Namespace: フィードに関連付けられた Namespace。
  • Ingestion Labels: このフィードのすべてのイベントに適用されるラベル。

UDM マッピング テーブル

ログフィールド UDM マッピング 論理
ASSET_ID entity.entity.asset.asset_id ASSET_ID フィールドから直接マッピングされます。
CLOUD_PROVIDER entity.relations.entity.resource.resource_subtype CLOUD_PROVIDER フィールドから直接マッピングされます。
CLOUD_PROVIDER_TAGS.CLOUD_TAG[].NAME entity.relations.entity.resource.attribute.labels.key CLOUD_PROVIDER_TAGS.CLOUD_TAG[].NAME フィールドから直接マッピングされます。
CLOUD_PROVIDER_TAGS.CLOUD_TAG[].VALUE entity.relations.entity.resource.attribute.labels.value CLOUD_PROVIDER_TAGS.CLOUD_TAG[].VALUE フィールドから直接マッピングされます。
CLOUD_RESOURCE_ID entity.relations.entity.resource.id CLOUD_RESOURCE_ID フィールドから直接マッピングされます。
CLOUD_SERVICE entity.relations.entity.resource.resource_type CLOUD_SERVICE が「VM」の場合、値は「VIRTUAL_MACHINE」に設定されます。
DNS_DATA.HOSTNAME entity.entity.asset.hostname DNS_DATA.HOSTNAME フィールドから直接マッピングされます。
EC2_INSTANCE_ID entity.relations.entity.resource.product_object_id EC2_INSTANCE_ID フィールドから直接マッピングされます。
ID entity.entity.asset.product_object_id ID フィールドから直接マッピングされます。
IP entity.entity.asset.ip IP フィールドから直接マッピングされます。
METADATA.AZURE.ATTRIBUTE[].NAME entity.relations.entity.resource.attribute.labels.key METADATA.AZURE.ATTRIBUTE[].NAME フィールドから直接マッピングされます。
METADATA.AZURE.ATTRIBUTE[].VALUE entity.relations.entity.resource.attribute.labels.value METADATA.AZURE.ATTRIBUTE[].VALUE フィールドから直接マッピングされます。
OS entity.entity.asset.platform_software.platform OS に「windows」が含まれている場合(大文字と小文字を区別しない)、値は「WINDOWS」に設定されます。
TAGS.TAG[].NAME entity.relations.entity.resource.attribute.labels.key TAGS.TAG[].NAME フィールドから直接マッピングされます。
TAGS.TAG[].TAG_ID entity.relations.entity.resource.attribute.labels.value 文字列「TAG_ID: 」と TAGS.TAG[].TAG_ID の値を連結した文字列。未加工ログの create_time フィールドからコピーされます。「ASSET」にハードコードされています。「QUALYS ASSET CONTEXT」にハードコードされています。「QUALYS ASSET CONTEXT」にハードコードされています。「RESOURCE」にハードコードされています。「MEMBER」にハードコードされています。未加工ログの create_time フィールドからコピーされます。

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。