Epic Systems ログを収集する
パーサーのバージョン: 4.0
このドキュメントでは、Bindplane エージェントを使用して Epic Systems のシステムログを Google Security Operations に取り込む方法について説明します。
Epic Systems は、監査イベント、ユーザーのログイン/ログアウト、患者のアクセス、ファイル オペレーションの CEF syslog メッセージを生成する電子医療記録(EHR)プラットフォームです。パーサーは Key-Value ペアを抽出し、Unified Data Model(UDM)にマッピングします。
始める前に
次の前提条件を満たしていることを確認してください。
Google SecOps インスタンス
Windows Server 2016 以降、または
systemdを使用する Linux ホストBindplane エージェントと Epic Systems サーバー間のネットワーク接続
プロキシの背後で実行している場合は、Bindplane エージェントの要件に従ってファイアウォール ポートが開いていることを確認します。
Epic Systems への特権アクセス
Bindplane エージェントの Google SecOps 認証情報を取得する
Bindplane エージェントを Google SecOps に対して認証するには、次のいずれかの方法を選択します。
- 新しいデプロイ: Chronicle API(オプション 1)を使用します。
- 以前のデプロイ: 2027 年 7 月 20 日に Ingestion API が廃止されるまで、取り込み認証ファイル(オプション 2)を引き続き使用します。
オプション 1: Chronicle API のサービス アカウントを作成する(推奨)
- Google Cloud コンソールにログインし、Google SecOps インスタンスにリンクされている Google Cloud プロジェクトを選択します。
- [IAM と管理] > [サービス アカウント] に移動します。
- [サービス アカウントを作成] をクリックします。
- 次の構成情報を指定します。
- サービス アカウント名: アカウントの名前を入力します(例:
bindplane-ingest)。 - サービス アカウントの説明: 説明を入力します(例:
Bindplane agent log ingestion)。
- サービス アカウント名: アカウントの名前を入力します(例:
- [作成して続行] をクリックします。
- [このサービス アカウントにプロジェクトへのアクセスを許可する] セクションで、[ロールを選択] をクリックし、[Chronicle 編集者] を選択します。
- [続行] をクリックして [完了] をクリックします。
- 作成したサービス アカウントをクリックし、[キー] タブに移動します。
- [鍵を追加] > [新しい鍵を作成] の順にクリックします。
- [JSON] を選択し、[作成] をクリックします。鍵ファイルがパソコンにダウンロードされます。
- 鍵ファイルを
ingestion-auth.jsonとして Bindplane コレクタ ディレクトリ(Linux の場合は/opt/observiq-otel-collector/ingestion-auth.json、Windows の場合はC:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json)に保存するか、config.yamlのcreds_file_pathを更新して、保存先のパスと一致させます。 - [IAM と管理] > [設定] に移動し、[プロジェクト番号] をコピーします。エクスポーターの構成に必要になります。
オプション 2: 取り込み認証ファイルをダウンロードする(以前のバージョン)
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [収集エージェント] に移動します。
- 取り込み認証ファイルをダウンロードします。
- Bindplane エージェントがインストールされるシステムにファイルを安全に保存します。
Google SecOps のお客様 ID を取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [プロファイル] に移動します。
[組織の詳細情報] セクションから [お客様 ID] をコピーして保存します。
Bindplane エージェントをインストールする
次の手順に沿って、Windows または Linux オペレーティング システムに Bindplane エージェントをインストールします。
Windows へのインストール
- 管理者として コマンド プロンプトまたは PowerShell を開きます。
次のコマンドを実行します。
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietインストールが完了するまで待ちます。
次のコマンドを実行して、インストールの内容を確認します。
sc query observiq-otel-collectorサービスは RUNNING と表示されます。
Linux へのインストール
- root 権限または sudo 権限でターミナルを開きます。
次のコマンドを実行します。
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shインストールが完了するまで待ちます。
次のコマンドを実行して、インストールの内容を確認します。
sudo systemctl status observiq-otel-collectorサービスが active (running) と表示されます。
その他のインストール リソース
その他のインストール オプションとトラブルシューティングについては、Bindplane エージェントのインストール ガイドをご覧ください。
Syslog を取り込んで Google SecOps に送信するように Bindplane エージェントを構成する
構成ファイルを探す
Linux:
sudo nano /opt/observiq-otel-collector/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
構成ファイルを編集します。
config.yamlの内容全体を次の構成に置き換えます。receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/epic: protocol: https # Region of your instance, for example us, europe, asia-southeast1 location: <LOCATION> # Project number of the Google Cloud project linked to the instance project: '<PROJECT_NUMBER>' compression: gzip creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json' customer_id: '<customer_id>' endpoint: chronicle.googleapis.com log_type: EPIC raw_log_field: body service: pipelines: logs/epic_to_chronicle: receivers: - udplog exporters: - chronicle/epic
構成パラメータ
各プレースホルダを次のように置き換えます。
レシーバーの構成:
listen_address: リッスンする IP アドレスとポート:0.0.0.0: すべてのインターフェースでリッスンします(推奨)。- ポート
514は標準の syslog ポートです(Linux で root が必要です。root 以外のユーザーは1514を使用します)。
エクスポータの構成:
creds_file_path: サービス アカウントの JSON キーファイルのフルパス(オプション 1):- Linux:
/opt/observiq-otel-collector/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
customer_id: Google SecOps コンソールからコピーしたお客様 IDlocation:<LOCATION>を Google SecOps インスタンスのリージョン(us、europe、asia-southeast1など)に置き換えます。エクスポートでは、この値がchronicle.googleapis.comの前に付加されます。完全なリストについては、リージョン エンドポイントをご覧ください。project:<PROJECT_NUMBER>を [IAM と管理] > [設定] のプロジェクト番号に置き換えます。endpoint:chronicle.googleapis.comに設定したままにします。
以前の取り込み API エクスポータ
オプション 2 の取り込み認証ファイルを使用する場合は、
exportersブロックを次のように置き換えます。creds_file_pathを取り込み認証ファイルのパスに設定します。インスタンスが米国以外にある場合は、malachiteingestion-pa.googleapis.comをリージョン エンドポイント(例:europe-malachiteingestion-pa.googleapis.com)に置き換えます。exporters: chronicle/epic: compression: gzip creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json' customer_id: '<customer_id>' endpoint: malachiteingestion-pa.googleapis.com log_type: EPIC raw_log_field: body
構成ファイルを保存する
- 編集後、ファイルを保存します。
- Linux:
Ctrl+O、Enter、Ctrl+Xの順に押します。 - Windows の場合: [ファイル] > [保存] をクリックします。
- Linux:
Bindplane エージェントを再起動して変更を適用する
Linux で Bindplane エージェントを再起動するには、次のコマンドを実行します。
sudo systemctl restart observiq-otel-collectorサービスが実行されていることを確認します。
sudo systemctl status observiq-otel-collectorログでエラーを確認します。
sudo journalctl -u observiq-otel-collector -f
Windows で Bindplane エージェントを再起動するには、次のいずれかのオプションを選択します。
管理者としてコマンド プロンプトまたは PowerShell を開きます。
net stop observiq-otel-collector && net start observiq-otel-collectorサービス コンソール:
Win+Rキーを押し、「services.msc」と入力して Enter キーを押します。- observIQ OpenTelemetry Collector を見つけます。
- 右クリックして [再起動] を選択します。
サービスが実行されていることを確認します。
sc query observiq-otel-collectorログでエラーを確認します。
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
SendSIEMSyslogAudit サービスを構成する
- Epic Systems コンソールにログインします。
- [Start] > [Epic] > [Interconnect] > [
<your instance>] > [Configuration editor] に移動します。 - [ビジネス サービス] フォームを選択します。
- [サービス カテゴリ] タブで、[SendSIEMSyslogAudit] を選択します。
- [保存] をクリックします。
syslog をエクスポートするように Epic Systems を構成する
- [Epic system definitions] > [Security] > [Auditing options] > [SIEM syslog settings] に移動します。
- 次の構成情報を指定します。
- ホスト: Bindplane エージェントの IP アドレスを入力します。
- ポート: Bindplane エージェントのポート番号を入力します。
- SIEM 形式: [CEF(Common Event Format)] を選択します。
- Syslog の終了文字: [改行「\n」] を選択します。
- [SIEM syslog 設定] メニューから [SIEM syslog] を選択します。
- [有効] をクリックします。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
| APIID | read_only_udm.additional.fields.api.value.string_value | 値は、未加工ログの APIID フィールドから取得されます。 |
| APPLICATIONID | read_only_udm.additional.fields.application_id.value.string_value | 値は、未加工ログの APPLICATIONID フィールドから取得されます。 |
| アプリ | read_only_udm.target.application | 値は、未加工ログの APP フィールドから取得されます。 |
| 監査セッション | read_only_udm.network.session_id | 値は、未加工ログの AUDIT SESSION フィールドから取得されます。 |
| AUTH_SOURCE | このフィールドは UDM にマッピングされません。 | |
| BCAPCS | read_only_udm.target.application | 値は、未加工ログの BCAPCS フィールドから取得されます。 |
| BTGEXPLANATION | read_only_udm.security_result.description | 値は未加工ログの BTGEXPLANATION フィールドから取得されます |
| BTGNOACCESSREAS | read_only_udm.security_result.summary | 値は、未加工ログの BTGNOACCESSREAS フィールドから取得されます。 |
| BTGREASON | read_only_udm.security_result.summary | 値は、未加工ログの BTGREASON フィールドから取得されます。 |
| CLIENTNAME | read_only_udm.principal.hostname | 値は、未加工ログの CLIENTNAME フィールドから取得されます。 |
| CSISESS_TOKEN | read_only_udm.network.session_id | 値は、未加工ログの CSISESS_TOKEN フィールドから取得されます。 |
| CTXT | read_only_udm.metadata.description | 値は、未加工ログの CTXT フィールドから取得されます。 |
| CVG | read_only_udm.additional.fields.cvg.value.string_value | 値は、未加工ログの CVG フィールドから取得されます。 |
| DAT | このフィールドは UDM にマッピングされません | |
| DEP | read_only_udm.principal.user.department | 値は、未加工ログの DEP フィールドから取得されます。未加工ログに NEWDEPARTMENT フィールドと PREVDEPARTMENT フィールドの両方が存在する場合、値は PREVDEPARTMENT:-{PREVDEPARTMENT}, NEWDEPARTMENT:-{NEWDEPARTMENT} になります。NEWDEPARTMENT のみが存在する場合、値は PREVDEPARTMENT:-NONE, NEWDEPARTMENT:{NEWDEPARTMENT} になります。PREVDEPARTMENT のみが存在する場合、値は PREVDEPARTMENT:{PREVDEPARTMENT}, NEWDEPARTMENT:-NONE になります。 |
| devTime | read_only_udm.metadata.event_timestamp | 値は、未加工ログの devTime フィールドから取得され、エポックからの経過秒数に変換されます。 |
| devTimeFormat | このフィールドは UDM にマッピングされません | |
| E3MID | read_only_udm.network.session_id | 値は未加工ログの E3MID フィールドから取得されます |
| 暗号化 | read_only_udm.additional.fields.encrypt.value.string_value | 値は、未加工ログの ENCRYPTED フィールドから取得されます。 |
| ERRMSG | read_only_udm.security_result.summary | 値は未加工ログの ERRMSG フィールドから取得されます |
| eventCnt | このフィールドは UDM にマッピングされません。 | |
| FILENAME | read_only_udm.target.file.full_path | 値は未加工ログの FILENAME フィールドから取得され、\\\\ のすべての出現箇所が \ に置き換えられます。 |
| フラグ | read_only_udm.security_result.description | 値は未加工ログのフラグ フィールドから取得され、先頭と末尾の - はすべて削除されます |
| HKUAPVER | read_only_udm.metadata.product_version | 値は、未加工ログの HKUAPVER フィールドから取得されます。 |
| HKUDVCID | read_only_udm.principal.asset_id | 値は未加工ログの HKUDVCID フィールドから取得され、Device ID:{HKUDVCID} としてフォーマットされます。 |
| HKUOSNAM | read_only_udm.principal.platform | 値は未加工ログの HKUOSNAM フィールドから取得され、値に基づいて WINDOWS、MAC、LINUX、または UNKNOWN_PLATFORM にマッピングされます。 |
| HKUOSVER | read_only_udm.principal.platform_version | 値は、未加工ログの HKUOSVER フィールドから取得されます。 |
| INSTANCEURN | read_only_udm.intermediary.hostname | 値は、未加工ログの INSTANCEURN フィールドから取得されます。 |
| IP | read_only_udm.target.ip | 値は、未加工ログの IP フィールドから取得されます。値に / が含まれている場合、2 つの IP アドレスに分割されます。値に , が含まれている場合、複数の IP アドレスに分割されます。 |
| LOGINERROR | read_only_udm.security_result.summary | 値は未加工ログの LOGINERROR フィールドから取得されます |
| LOGIN_CONTEXT | read_only_udm.metadata.description | 値は、未加工ログの LOGIN_CONTEXT フィールドから取得されます。 |
| LOGIN_DEVICE | read_only_udm.additional.fields.login_device.value.string_value | 値は、未加工ログの LOGIN_DEVICE フィールドから取得されます。 |
| LOGIN_LDAP_ID | read_only_udm.principal.user.userid | 値は、未加工ログの LOGIN_LDAP_ID フィールドから取得されます。 |
| LOGIN_REASON | read_only_udm.security_result.summary | 値は、未加工ログの LOGIN_REASON フィールドから取得されます |
| LOGIN_REVAL | read_only_udm.additional.fields.login_reval.value.string_value | 値は、未加工ログの LOGIN_REVAL フィールドから取得されます |
| MASKMODE | read_only_udm.additional.fields.masked_mode.value.string_value | 値は未加工ログの MASKMODE フィールドから取得されます |
| MYCACCT | read_only_udm.principal.user.userid | 値は、未加工ログの MYCACCT フィールドから取得されます。 |
| NEWDEPARTMENT | read_only_udm.principal.user.department | DEP フィールドのロジックを参照する |
| NEWUSER | このフィールドは UDM にマッピングされません | |
| NSC | read_only_udm.additional.fields.nsc.value.string_value | 値は未加工ログの NSC フィールドから取得されます |
| OSUSR | read_only_udm.target.user.userid | 値は未加工ログの OSUSR フィールドから取得されます |
| 患者 | read_only_udm.target.user.userid | 値は、未加工ログの PATIENT フィールドから取得されます。 |
| PREVDEPARTMENT | read_only_udm.principal.user.department | DEP フィールドのロジックを参照 |
| PREVPROVIDER | このフィールドは UDM にマッピングされません。 | |
| PREVUSER | read_only_udm.principal.resource.attribute.labels.prev_user.value | 値は、未加工ログの PREVUSER フィールドから取得されます |
| PWREASON | read_only_udm.metadata.description | 値は未加工ログの PWREASON フィールドから取得されます |
| 役職 | read_only_udm.principal.user.attribute.roles.name | 値は未加工ログの ROLE フィールドから取得されます |
| リソース | read_only_udm.target.hostname | 値は未加工ログのリソース フィールドから取得されます |
| SERVICEID | read_only_udm.additional.fields.service_id.value.string_value | 値は未加工ログの SERVICEID フィールドから取得されます |
| SERVICECATEGORY | read_only_udm.additional.fields.service_category.value.string_value | 値は、未加工ログの SERVICECATEGORY フィールドから取得されます。 |
| SERVICEMSGID | このフィールドは UDM にマッピングされません。 | |
| SERVICENAME | read_only_udm.target.resource.name | 値は、未加工ログの SERVICENAME フィールドから取得されます |
| SERVICETYPE | read_only_udm.target.resource.type | 値は、未加工ログの SERVICETYPE フィールドから取得されます。event_id が PHI_CLIENT_FILE の場合、値は FILE に設定されます。 |
| SERVICE_USER | read_only_udm.target.user.userid | 値は、未加工ログの SERVICE_USER フィールドから取得されます。 |
| SERVICE_USERTYP | read_only_udm.additional.fields.service_user_type.value.string_value | 値は未加工ログの SERVICE_USERTYP フィールドから取得されます |
| sev | read_only_udm.security_result.severity | 値は未加工ログの sev フィールドから取得され、値に基づいて LOW、HIGH、または CRITICAL にマッピングされます。 |
| shost | read_only_udm.target.resource.attribute.labels.workstation_type.value | 値は、未加工ログの shost フィールドから取得されます。 |
| ソース | read_only_udm.additional.fields.login_source.value.string_value | 値は未加工ログの SOURCE フィールドから取得されます |
| SUCCESS | read_only_udm.additional.fields.success_yes_no.value.string_value | 値は未加工ログの SUCCESS フィールドから取得されます |
| タイムアウトです | read_only_udm.additional.fields.time_out.value.string_value | 値は、未加工ログの TIMEOUT フィールドから取得されます。 |
| UID | read_only_udm.principal.user.userid | 値は、未加工ログの UID フィールドから取得されます。 |
| USERJOB | このフィールドは UDM にマッピングされません。 | |
| usrName | read_only_udm.principal.user.userid, read_only_udm.principal.user.user_display_name | 未加工ログに UID フィールドまたは LOGIN_LDAP_ID フィールドが存在する場合、usrName は read_only_udm.principal.user.user_display_name に使用され、もう一方のフィールドは read_only_udm.principal.user.userid に使用されます。それ以外の場合は、usrName が read_only_udm.principal.user.userid に使用されます。 |
| WEBLGAPP | read_only_udm.target.application | 値は未加工ログの WEBLGAPP フィールドから取得されます |
| read_only_udm.extensions.auth.type | LOGIN_LDAP_ID が空でない場合、値は SSO に設定されます。それ以外の場合、値は AUTHTYPE_UNSPECIFIED に設定されます。 |
|
| read_only_udm.intermediary.ip | 値は、ログソースの IP アドレスに設定されます。 | |
| read_only_udm.metadata.event_type | event_id が IC_SERVICE_AUDIT、AC_BREAK_THE_GLASS_FAILED_ACCESS、AC_BREAK_THE_GLASS_INAPPROPRIATE_ATTEMPT、AC_BREAK_THE_GLASS_ACCESS、MCMEMEDISA のいずれかで、target_ip_set が true であるか、リソースが空でない場合、値は RESOURCE_READ に設定されます。event_id が FAILEDLOGIN、LOGIN、ROVER_FAILED_LOGIN、SWITCHUSER、AUTHENTICATION、EW_LOGIN、ROVER_LOGIN、CTO_FAILED_LOGIN、CTO_LOGIN、HKU_FAILED_LOGIN、HKU_LOGIN、WPSEC_SEC_AUTH_OPT_OUT、WPSEC_SEC_AUTH_OPT_IN、BCA_LOGIN_FAILURE、BCA_LOGIN_SUCCESS、BCA_USER_LOCKED、WPSEC_LOGIN_FAIL、または WPSEC_LOGIN_SUCCESS のいずれかで、target_ip_set、resource、SERVICENAME、SERVICETYPE、または shost の少なくとも 1 つが空でない場合、値は USER_LOGIN に設定されます。event_id が E_ADMINPASSWORDCHANGE、E_FAILEDPASSWORDCHANGE、E_SELFPASSWORDCHANGE、WPSEC_USER_PASSWORD_CHANGE_FAIL、WPSEC_USER_PASSWORD_CHANGE のいずれかの場合、値は USER_CHANGE_PASSWORD に設定されます。event_id が CONTEXTCHANGE の場合、値は USER_UNCATEGORIZED に設定されます。event_id が SECURE、UNSECURE、MASKED_DATA_DISPLAY、MASKED_DATA_PRINTING のいずれかの場合、値は USER_RESOURCE_ACCESS に設定されます。event_id が PHI_CLIENT_FILE の場合、値は USER_RESOURCE_UPDATE_CONTENT に設定されます。CLIENTNAME が空でない場合、値は STATUS_UPDATE に設定されます。prin_usr_id が空でない場合、値は USER_UNCATEGORIZED に設定されます。それ以外の場合、値は GENERIC_EVENT に設定されます。 |
|
| read_only_udm.metadata.log_type | 値は EPIC に設定されています。 |
|
| read_only_udm.metadata.product_name | 値は Epic Systems に設定されています。 |
|
| read_only_udm.metadata.vendor_name | 値は EPIC に設定されています。 |
|
| read_only_udm.network.ip_protocol | 値は、未加工ログの proto フィールドから取得され、対応する IP プロトコル名にマッピングされます。 | |
| read_only_udm.principal.resource.attribute.labels.workstation_type.key | 値は Workstation ID/Type に設定されています。 |
|
| read_only_udm.principal.resource.attribute.labels.prev_user.key | 値は Prev User に設定されています。 |
|
| read_only_udm.security_result.action | 未加工ログに ERRMSG フィールドまたは LOGINERROR フィールドが存在する場合、値は BLOCK に設定されます。 |
|
REMOTEIP |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
CLIENTTYPE |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
INTERNETAREA |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
LOGINCLIENTID |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
LOGINCONTEXT |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
PERIMAUTHST |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
HYPACCESSID |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
UNRECDEVICE |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
変更ログ
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。