Armis Vulnerabilities のログを収集する
このドキュメントでは、Google Cloud Functions を使用して Armis Vulnerabilities ログを Google Security Operations に取り込む方法について説明します。パーサーは、未加工の JSON 形式のセキュリティ脆弱性ログを Google SecOps UDM に準拠した構造化形式に変換します。未加工ログからさまざまなフィールドを抽出し、対応する UDM フィールドにマッピングし、データ型の変換を行い、Google SecOps プラットフォームに取り込むための出力を構造化します。
始める前に
次の前提条件を満たしていることを確認してください。
- 顧客 ID とサービス アカウントの認証情報を含む Google SecOps インスタンス
- Armis Centrix プラットフォームへの特権アクセス
- Armis API シークレット キーとサーバー URL
- Cloud Functions、Secret Manager シークレット、Cloud Scheduler ジョブを作成する権限を持つ Google Cloud へのアクセス権
- Armis Asset Vulnerability Management(AVM)ライセンスまたはモジュールへのアクセス
Google SecOps のお客様 ID を取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [プロファイル] に移動します。
- [組織の詳細情報] セクションから [お客様 ID] をコピーして保存します。
Google SecOps サービス アカウントの認証情報を取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [収集エージェント] に移動します。
- 取り込み認証ファイル(サービス アカウントの JSON ファイル)をダウンロードします。
- このファイルは Google Secret Manager にアップロードする必要があるため、安全に保存してください。
Armis API シークレット キーを取得する
- Armis Centrix プラットフォームにログインします。
- [設定> API 管理] に移動します。
- 新しい API シークレット キーを生成する必要がある場合は、[作成] をクリックします。
- [表示] をクリックして、シークレット キーを表示します。
- 秘密鍵をコピーして安全に保存します。
Google Secret Manager を構成する
このセクションでは、Google Secret Manager を使用して、統合に必要なサービス アカウント キーを安全に保存する方法について説明します。
Google SecOps サービス アカウントのシークレットを追加する
- Google Cloud コンソールにログインします。
- [セキュリティ] > [Secret Manager] に移動します。
- [シークレットの作成] をクリックします。
- 次の構成の詳細を入力します。
- 名前: シークレットの名前を入力します(例:
secops-service-account)。 - シークレット値: 先ほどダウンロードした Google SecOps サービス アカウントの JSON ファイルをアップロードするか、その内容を直接貼り付けます。
- 名前: シークレットの名前を入力します(例:
- [シークレットの作成] をクリックします。
作成したシークレットのリソース ID を次の形式でコピーします。
projects/{project_id}/secrets/{secret_id}/versions/{version_id}
Armis API シークレット キー シークレットを追加する
- [Secret Manager] で、[シークレットを作成] をクリックします。
- 次の構成の詳細を入力します。
- 名前: シークレットの名前を入力します(例:
armis-api-secret)。 - シークレットの値: 先ほど取得した Armis API 秘密鍵を貼り付けます。
- 名前: シークレットの名前を入力します(例:
- [シークレットの作成] をクリックします。
作成したシークレットのリソース ID を次の形式でコピーします。
projects/{project_id}/secrets/{secret_id}/versions/{version_id}`
取り込みスクリプトをダウンロードして準備する
- 公式の Google SecOps 取り込みスクリプト リポジトリ(https://github.com/chronicle/ingestion-scripts)にアクセスします。
- リポジトリから armis ディレクトリの内容をダウンロードします。
- リポジトリから common ディレクトリをダウンロードします(必須の依存関係)。
- ローカルマシンに Cloud Functions のデプロイ用の新しいディレクトリを作成します。
- armis ディレクトリと common ディレクトリの両方の内容をデプロイ ディレクトリにコピーします。
環境変数を構成する
- テキスト エディタで
.env.ymlファイルを開きます。 次の構成でファイルを編集します。
CHRONICLE_CUSTOMER_ID: <YOUR_CUSTOMER_ID> CHRONICLE_REGION: "us" CHRONICLE_SERVICE_ACCOUNT: projects/{project_id}/secrets/{chronicle-secret-id}/versions/{version_id} CHRONICLE_NAMESPACE: <YOUR_NAMESPACE> POLL_INTERVAL: "10" ARMIS_SERVER_URL: https://<your-armis-instance>.armis.com ARMIS_API_SECRET_KEY: projects/{project_id}/secrets/{armis-secret-id}/versions/{version_id} HTTPS_PROXY: CHRONICLE_DATA_TYPE: ARMIS_VULNERABILITIES次の値を置き換えます。
<YOUR_CUSTOMER_ID>: Google SecOps のお客様 IDprojects/{project_id}/secrets/{chronicle-secret-id}/versions/{version_id}: Secret Manager の Google SecOps サービス アカウント シークレットの完全なリソース ID パス<YOUR_NAMESPACE>: Google Security Operations ログの省略可能な Namespace(例:armis-vulnerabilities)<your-armis-instance>: Armis テナントのサブドメイン(たとえば、URL が https://company.armis.com の場合はcompanyを使用します)projects/{project_id}/secrets/{armis-secret-id}/versions/{version_id}: Secret Manager の Armis API シークレットの完全なリソース ID パス
Cloud Functions 関数のデプロイ
Cloud Functions Gen2 を使用してデプロイする(推奨)
- Cloud Shell または gcloud CLI がインストールされているローカル ターミナルを開きます。
- 取り込みスクリプト ファイルを含むディレクトリに移動します。
次のコマンドを実行します。
gcloud functions deploy armis-vulnerabilities-ingestion \ --gen2 \ --entry-point main \ --trigger-http \ --runtime python39 \ --env-vars-file .env.yml \ --memory 512MB \ --timeout 3600s \ --region us-central1
Cloud Functions 第 1 世代を使用してデプロイする(代替)
次のコマンドを実行します。
gcloud functions deploy armis-vulnerabilities-ingestion \ --entry-point main \ --trigger-http \ --runtime python39 \ --env-vars-file .env.yml \ --memory 512MB \ --timeout 540s \ --region us-central1
Cloud Scheduler ジョブを作成する
- Google Cloud コンソールで、[Cloud Scheduler] に移動します。
- [ジョブを作成] をクリックします。
- 次の構成の詳細を入力します。
- 名前: ジョブの名前を入力します(例:
armis-vulnerabilities-scheduler)。 - リージョン: Cloud Functions と同じリージョン(
us-central1など)を選択します。 - 頻度: cron 構文を使用してスケジュールを入力します(例: 10 分ごとに実行するには
*/10 * * * *)。 - タイムゾーン: 任意のタイムゾーン(UTC など)を選択します。
- 名前: ジョブの名前を入力します(例:
- [続行] をクリックします。
- ターゲット タイプとして [HTTP] を選択します。
- 次の構成の詳細を入力します。
- URL: Cloud Functions コンソールで、関数の [トリガー] タブに移動し、トリガー URL をコピーします。ここに貼り付けます。
- HTTP メソッド: [POST] を選択します。
- [Auth ヘッダー] > [OIDC トークンを追加] をクリックします。
- Cloud Functions の関数で使用されるサービス アカウントを選択します。
- [作成] をクリックします。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
| affectedDevicesCount | read_only_udm.security_result.detection_fields.value | 直接マッピングされ、文字列に変換されます。 |
| attackComplexity | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | 直接マッピング。 |
| attackVector | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | 直接マッピング。 |
| availabilityImpact | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | 直接マッピング。 |
| avmRating | read_only_udm.security_result.detection_fields.value | 直接マッピング。 |
| ボットネット | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | 複数のボットネットが存在する場合は、1 つの文字列に連結されます。 |
| cisaDueDate | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | 直接マッピング。 |
| collection_time.nanos | read_only_udm.metadata.event_timestamp.nanos | 直接マッピング。 |
| collection_time.seconds | read_only_udm.metadata.event_timestamp.seconds | 直接マッピング。 |
| commonName | read_only_udm.extensions.vulns.vulnerabilities.name | 直接マッピング。 |
| confidentialityImpact | read_only_udm.security_result.detection_fields.value | 直接マッピング。 |
| cveUid | read_only_udm.extensions.vulns.vulnerabilities.cve_id | 直接マッピング。 |
| cvssScore | read_only_udm.extensions.vulns.vulnerabilities.cvss_base_score | 直接マッピングされ、浮動小数点数に変換されます。 |
| 説明 | read_only_udm.metadata.description | 直接マッピング。 |
| epssPercentile | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | 直接マッピングされ、文字列に変換されます。 |
| epssScore | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | 直接マッピングされ、文字列に変換されます。 |
| exploitabilityScore | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | 直接マッピングされ、文字列に変換されます。 |
| firstReferencePublishDate | read_only_udm.extensions.vulns.vulnerabilities.first_found | タイムスタンプに解析され、ミリ秒を含む形式と含まない形式の両方を処理します。 |
| firstWeaponizedReferencePublishDate | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | 直接マッピング。 |
| hasRansomware | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | 直接マッピングされ、文字列に変換されます。 |
| id | read_only_udm.metadata.product_log_id | 直接マッピング。 |
| impactScore | read_only_udm.security_result.detection_fields.value | 直接マッピングされ、文字列に変換されます。 |
| integrityImpact | read_only_udm.security_result.detection_fields.value | 直接マッピング。 |
| isWeaponized | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | 直接マッピングされ、文字列に変換されます。 |
| latestExploitUpdate | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | 直接マッピング。 |
| numOfExploits | read_only_udm.security_result.detection_fields.value | 直接マッピングされ、文字列に変換されます。 |
| numberOfThreatActors | read_only_udm.security_result.detection_fields.value | 直接マッピングされ、文字列に変換されます。 |
| orgPriorityManualChangeReason | read_only_udm.security_result.detection_fields.value | 直接マッピング。 |
| orgPriorityManualChangedBy | read_only_udm.principal.user.userid | 直接マッピング。 |
| orgPriorityManualUpdateTime | read_only_udm.principal.labels.value | 直接マッピング。 |
| privilegesRequired | read_only_udm.security_result.detection_fields.value | 直接マッピング。 |
| publishedDate | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | 直接マッピング。 |
| reportedByGoogleZeroDays | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | 直接マッピングされ、文字列に変換されます。 |
| スコープ | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | 直接マッピング。 |
| 重要度 | read_only_udm.extensions.vulns.vulnerabilities.severity | 値に基づいて CRITICAL、HIGH、MEDIUM、LOW にマッピングされます。元の値も severity_details にマッピングされます。 |
| ステータス | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | 直接マッピング。 |
| threatTags | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | 複数の脅威タグが存在する場合は、1 つの文字列に連結されます。 |
| userInteraction | read_only_udm.about.labels.value | 直接マッピング。 |
| vulnerabilities_matches | read_only_udm.metadata.url_back_to_product | 直接マッピング。 |
| read_only_udm.metadata.event_type | 「GENERIC_EVENT」に設定します。 | |
| read_only_udm.metadata.product_name | 「ARMIS」に設定します。 | |
| read_only_udm.metadata.vendor_name | 「ARMIS」に設定します。 | |
| read_only_udm.metadata.log_type | 「ARMIS_VULNERABILITIES」に設定します。 | |
| read_only_udm.extensions.vulns.vulnerabilities.severity_details | 「severity」フィールドの値がこのフィールドにマッピングされます |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。