Ergon Informatik Airlock IAM ログを収集する
このドキュメントでは、Bindplane エージェントを使用して Ergon Informatik Airlock IAM ログを Google Security Operations に取り込む方法について説明します。
Airlock IAM は、認証、認可、ユーザー セルフサービス機能を提供する Identity and Access Management ソリューションです。Loginapp、Adminapp、Transaction Approval、Service Container、API Policy Service の各モジュールで、認証イベント、ユーザー トレイル アクティビティ、監査ログ、管理アクションの構造化された JSON ログを生成します。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス
- Windows Server 2016 以降、または
systemdを使用する Linux ホスト - Bindplane エージェントと Airlock IAM サーバー間のネットワーク接続
- プロキシの背後で実行している場合は、Bindplane エージェントの要件に従ってファイアウォール ポートが開いていることを確認します。
- Airlock IAM インスタンスに対する管理者権限
- 構成ファイルを編集するための Airlock IAM サーバーへの SSH またはコンソール アクセス
Google SecOps の取り込み認証ファイルを取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [コレクション エージェント] に移動します。
Ingestion Authentication File をダウンロードします。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 /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
構成ファイルを編集します。
config.yamlの内容全体を次の構成に置き換えます。receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/airlock_iam: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: ERGON_INFORMATIK_AIRLOCK_IAM raw_log_field: body ingestion_labels: env: production source: airlock_iam service: pipelines: logs/airlock_to_chronicle: receivers: - udplog exporters: - chronicle/airlock_iam各プレースホルダを次のように置き換えます。
レシーバーの構成:
listen_address: ポート 51 のすべてのインターフェースでリッスンするには、0.0.0.0:514に設定します。root 以外のユーザーとして実行されている Linux システムの場合は、ポート1514以降を使用します。
エクスポータの構成:
creds_file_path: 取り込み認証ファイルのフルパス:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
YOUR_CUSTOMER_ID: 前の手順で取得した Google SecOps のお客様 ID に置き換えます。endpoint: リージョン エンドポイント URL:- 米国:
malachiteingestion-pa.googleapis.com - ヨーロッパ:
europe-malachiteingestion-pa.googleapis.com - アジア:
asia-southeast1-malachiteingestion-pa.googleapis.com
- 米国:
ingestion_labels: ログを分類するオプションのラベル(必要に応じて変更)
Windows の構成例
receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/airlock_iam: compression: gzip creds_file_path: 'C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json' customer_id: 'a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6' endpoint: malachiteingestion-pa.googleapis.com log_type: ERGON_INFORMATIK_AIRLOCK_IAM raw_log_field: body ingestion_labels: env: production source: airlock_iam service: pipelines: logs/airlock_to_chronicle: receivers: - udplog exporters: - chronicle/airlock_iam
構成ファイルを保存する
編集が完了したら、ファイルを保存します。
- Linux:
Ctrl+O、Enter、Ctrl+Xの順に押します。 - Windows: [ファイル>保存] をクリックします。
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"
Airlock IAM syslog 転送を構成する
- SSH またはコンソール アクセスを使用して Airlock IAM サーバーに接続します。
インスタンス ディレクトリに移動します。
cd /opt/airlock/iam/instances/<instance_name>/すべてのモジュールの Log4j 構成ファイルを編集します。
nano log4j/all-modules.xml<Appenders>セクションに Syslog アペンダーの構成を追加します。<Syslog name="SYSLOG" facility="LOCAL1" host="BINDPLANE_AGENT_IP" port="514" protocol="UDP" format="RFC5424" includeMDC="true" mdcId="mdc" newLine="true"> <ExceptionPattern>%ex{full}</ExceptionPattern> <ThresholdFilter level="INFO"/> </Syslog>Syslog アペンダーのパラメータを構成します。
- host:
BINDPLANE_AGENT_IPは、Bindplane エージェント ホストの IP アドレス(192.168.1.100など)に置き換えます。 - port:
514に設定します(Bindplane エージェントが非特権ポート用に構成されている場合は1514)。 - protocol:
UDPに設定します(Bindplane で tcplog レシーバを構成した場合はTCP)。 - format: 構造化 syslog 形式の場合は
RFC5424に設定します。 - facility:
LOCAL1に設定します(必要に応じて、別のファシリティ コード(LOCAL0~LOCAL7)に設定します)。 - ThresholdFilter レベル: INFO 以上の重大度のログを送信する場合は
INFO、すべてのログを送信する場合はDEBUGに設定します。
- host:
<Root>ロガー セクション内にアペンダー参照を追加します。<Loggers> <Root level="${sys:iam.log.level}"> <AppenderRef ref="SYSLOG"/> </Root> </Loggers>構成の完全な例:
<?xml version="1.0" encoding="UTF-8"?> <Configuration name="Custom Log4j 2 Configuration for All IAM Modules"> <Appenders> <Syslog name="SYSLOG" facility="LOCAL1" host="192.168.1.100" port="514" protocol="UDP" format="RFC5424" includeMDC="true" mdcId="mdc" newLine="true"> <ExceptionPattern>%ex{full}</ExceptionPattern> <ThresholdFilter level="INFO"/> </Syslog> </Appenders> <Loggers> <Root level="${sys:iam.log.level}"> <AppenderRef ref="SYSLOG"/> </Root> </Loggers> </Configuration>構成ファイルを保存します。
Ctrl+O、Enter、Ctrl+Xの順に押します。デフォルトでは、Log4j 構成の変更は 60 秒ごとにモニタリングされます。新しい syslog 転送は、再起動を必要とせずに自動的に有効になります。
ログが Bindplane エージェントに送信されていることを確認します。
sudo journalctl -u observiq-otel-collector -fログが Google SecOps に届いていることを確認します。
- Google SecOps コンソールにログインします。
- [SIEM>検索] に移動します。
検索クエリを実行します。
metadata.log_type = "ERGON_INFORMATIK_AIRLOCK_IAM"Airlock IAM ログが検索結果に表示されることを確認します。
追加の構成オプション
UDP ではなく TCP syslog を構成する
UDP ではなく TCP 配信を希望する場合:
Bindplane エージェントの
config.yamlファイルで、レシーバをtcplogに変更します。receivers: tcplog: listen_address: "0.0.0.0:514"Airlock IAM の
log4j/all-modules.xmlファイルで、プロトコルをTCPに変更します。<Syslog name="SYSLOG" facility="LOCAL1" host="192.168.1.100" port="514" protocol="TCP" format="RFC5424" includeMDC="true" mdcId="mdc" newLine="true"> <ExceptionPattern>%ex{full}</ExceptionPattern> <ThresholdFilter level="INFO"/> </Syslog>Bindplane エージェントを再起動して、レシーバーの変更を適用します。
さまざまなログレベルを構成する
重大度が WARNING 以上のログのみを送信するには:
<ThresholdFilter level="WARN"/>DEBUG を含むすべてのログを送信するには:
<ThresholdFilter level="DEBUG"/>
使用可能なログレベル(重大度が低い順):
TRACEDEBUGINFOWARNERRORFATAL
複数の Airlock IAM インスタンスを構成する
複数の Airlock IAM インスタンスが同じ Bindplane エージェントに送信する場合は、取り込みラベルを使用して区別します。
exporters: chronicle/airlock_iam_prod: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: ERGON_INFORMATIK_AIRLOCK_IAM raw_log_field: body ingestion_labels: env: production instance: prod-iam-01 chronicle/airlock_iam_dev: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: ERGON_INFORMATIK_AIRLOCK_IAM raw_log_field: body ingestion_labels: env: development instance: dev-iam-01 service: pipelines: logs/airlock_prod: receivers: - udplog exporters: - chronicle/airlock_iam_prod logs/airlock_dev: receivers: - udplog exporters: - chronicle/airlock_iam_dev
トラブルシューティング
ログが Google SecOps に表示されない
Bindplane エージェントがログを受信していることを確認します。
sudo journalctl -u observiq-otel-collector -fAirlock IAM から Bindplane エージェントへのネットワーク接続を確認します。
telnet BINDPLANE_AGENT_IP 514Log4j 構成が有効であることを確認します。
cat /opt/airlock/iam/instances/<instance_name>/log4j/all-modules.xmlAirlock IAM ログでエラーを確認します。
tail -f /opt/airlock/iam/instances/<instance_name>/logs/loginapp.log
Bindplane エージェントのエラー
Bindplane エージェント ログでエラーを確認します。
sudo journalctl -u observiq-otel-collector -n 100config.yamlの構文が正しいことを確認します。YAML ではインデントが重要です。取り込み認証ファイルのパスが正しく、ファイルが存在することを確認します。
Google SecOps エンドポイントへのネットワーク接続をテストします。
curl -v https://malachiteingestion-pa.googleapis.com
ファイアウォール構成
次のファイアウォール ルールが構成されていることを確認します。
Bindplane エージェントへのインバウンド:
- プロトコル: UDP(tcplog を使用している場合は TCP)
- ポート: 514(または構成したポート)
- 送信元: Airlock IAM サーバーの IP アドレス
Bindplane エージェントからのアウトバウンド:
- プロトコル: HTTPS(TCP 443)
- 宛先: Google SecOps リージョン エンドポイント
- 目的: Google SecOps へのログ配信
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
| expire_time | additional.fields | 空でない場合は、キー「expire_time」のラベルとして統合されます |
| モバイル | additional.fields | 空でない場合は、キー「mobile」のラベルとして統合されます。 |
| sn | additional.fields | 空でない場合は、キー「sn」のラベルとして統合されます。 |
| CONFIG_CONTEXT | additional.fields | 空でない場合は、キー「CONFIG_CONTEXT」のラベルとして統合されます |
| department | additional.fields | 空でない場合は、キー「department」のラベルとして統合されます |
| ctxData | additional.fields | 空でない場合は、キー「ctxData」のラベルとして統合されます。 |
| displayLanguage | additional.fields | 空でない場合は、キー「displayLanguage」のラベルとして統合 |
| nrPwdTrialsForUserDeletion | additional.fields | 空でない場合、キー「nrPwdTrialsForUserDeletion」のラベルとして統合されます |
| authInstant | additional.fields | 空でない場合は、キー「authInstant」のラベルとして統合されます |
| auditToken | additional.fields | 空でない場合は、キー「auditToken」のラベルとして統合されます |
| authPlugin | additional.fields | 空でない場合は、キー「authPlugin」のラベルとして統合されます |
| latestIdPropagation | additional.fields | 空でない場合は、キー「latestIdPropagation」のラベルとして統合されます。 |
| サービス | additional.fields | 空でない場合は、キー「service」のラベルとして統合されます |
| ldap_type | additional.fields | 空でない場合は、キー「ldap_type」のラベルとして統合されます。 |
| report_message | additional.fields | 空でない場合は、キー「report_message」のラベルとして統合 |
| authenteeProvidedId | additional.fields | 空でない場合は、キー「authenteeProvidedId」のラベルとして統合されます |
| representerId | additional.fields | 空でない場合は、キー「representerId」のラベルとして統合されます。 |
| エンジン | additional.fields | 空でない場合は、キー「engine」のラベルとして統合されます |
| channel | additional.fields | 空でない場合は、キー「channel」のラベルとして統合されます。 |
| authnFactor | additional.fields | 空でない場合は、キー「authnFactor」のラベルとして統合されます |
| authnFactorDetail | additional.fields | 空でない場合は、キー「authnFactorDetail」のラベルとして統合されます |
| required_roles | additional.fields | 空でない場合は、キー「required_roles」のラベルとして統合されます |
| target_pattern | additional.fields | 空でない場合は、キー「target_pattern」のラベルとして統合されます |
| nameid | additional.fields | 空でない場合は、キー「nameid」のラベルとして統合されます |
| plugin_name | additional.fields | 空でない場合は、キー「plugin_name」のラベルとして統合されます。 |
| mechanism | additional.fields | 空でない場合は、キー「mechanism」のラベルとして統合されます |
| new_session_id | additional.fields | 空でない場合は、キー「new_session_id」のラベルとして統合されます。 |
| former_session_id | additional.fields | 空でない場合は、キー「former_session_id」のラベルとして統合されます。 |
| req_id | additional.fields | 空でない場合は、キー「req_id」のラベルとして統合されます |
| auth_method | additional.fields | 空でない場合は、キー「auth_method」のラベルとして統合されます。 |
| otp | additional.fields | 空でない場合は、キー「otp」のラベルとして統合されます |
| mob_num | additional.fields | 空でない場合は、キー「mob_num」のラベルとして統合されます |
| jsessionid | additional.fields | 空でない場合は、キー「jsessionid」のラベルとして統合されます |
| 作成日 | additional.fields | 空でない場合は、キー「creationDate」のラベルとして統合されます |
| lastLogin | additional.fields | 空でない場合は、キー「lastLogin」のラベルとして統合されます |
| accountStatus | additional.fields | 空でない場合は、キー「accountStatus」のラベルとして統合されます |
| companyAdministrator | additional.fields | 空でない場合は、キー「companyAdministrator」のラベルとして統合されます。 |
| companyCustomer | additional.fields | 空でない場合は、キー「companyCustomer」のラベルとして統合されます。 |
| privateCustomer | additional.fields | 空でない場合は、キー「privateCustomer」のラベルとして統合されます |
| otpNotifyChannel | additional.fields | 空でない場合は、キー「otpNotifyChannel」のラベルとして統合されます |
| nas_identifier | additional.fields | 空でない場合は、キー「nas_identifier」のラベルとして統合されます |
| session_id | additional.fields | 空でない場合は、キー「session_id」のラベルとして統合されます |
| authPluginClassName | extensions.auth.auth_details | 存在する場合は値を直接コピー |
| authenticator_type | extensions.auth.auth_details | 値が存在し、authPluginClassName が空の場合、値は直接コピーされます |
| logon_type | extensions.auth.mechanism | 値を直接コピー |
| なし | intermediary | 中間オブジェクトから統合されました |
| FORWARD_LOCATION | intermediary.url | 値を直接コピー |
| metadata_description | metadata.description | 値を直接コピー |
| なし | metadata.event_type | イベント コンテキストに基づいて設定されます。パーサー ロジックによって決定されます。 |
| REQUEST_ID | metadata.product_log_id | 値を直接コピー |
| airlock_version | metadata.product_version | 値を直接コピー |
| method | network.http.method | 値を直接コピー |
| user_agent | network.http.user_agent | 値を直接コピー |
| packet_size | network.received_packets | 整数に変換された値 |
| GSID | network.session_id | 値を直接コピー |
| ホスト | principal.hostname | 値を直接コピー |
| CLIENT_IP | principal.ip | 値を直接コピー |
| UID | principal.user.userid | 値を直接コピー |
| role_name | role.name | 値を直接コピー |
| authenteeType | role.type | 値を直接コピー |
| なし | security_result | security_result オブジェクトから統合 |
| アクション | security_result.action_details | 存在する場合は値を直接コピー |
| authMethodShortDesc | security_result.action_details | 値が存在する場合は統合されます |
| action_detail | security_result.action_details | 値が存在する場合は統合されます |
| category_value | security_result.category | 値を直接コピー |
| actionGroup | security_result.category_details | 値を直接コピー |
| result_description | security_result.description | 値を直接コピー |
| exception | security_result.summary | 存在する場合は値を直接コピー |
| STATLOG | security_result.summary | 値が存在し、例外が空の場合、値は直接コピーされます。 |
| mob_num | src.asset.type | 値を直接コピー |
| src.email | 存在する場合は値を直接コピー | |
| メール | src.email | 値が存在し、メールが空の場合、値が直接コピーされます |
| src_ip | src_ip | 値を直接コピー |
| src_port | src.port | 整数に変換された値 |
| ロール | src.user.attribute.roles | 値を直接コピー |
| 会社 | src.user.company_name | 値を直接コピー |
| firstName | src.user.first_name | 値を直接コピー |
| lastName | src.user.last_name | 値を直接コピー |
| ステータス | src.user.user_authentication_status | 値を直接コピー |
| displayName | src.user.user_display_name | 存在する場合は値を直接コピー |
| ユーザー名 | src.user.user_display_name | 値が存在し、displayName が空の場合、値が直接コピーされます。 |
| src_user | src.user.user_display_name | 値が存在し、displayName/username が空の場合、値が直接コピーされる |
| authenteeId | src.user.userid | 存在する場合は値を直接コピー |
| src_userid | src.user.userid | 値が存在し、authenteeId が空の場合、値は直接コピーされます。 |
| UID | src.user.userid | 値が存在し、authenteeId/src_userid が空の場合、値は直接コピーされます |
| file_path | target.file.full_path | 値を直接コピー |
| target_hostname | target.hostname | 値を直接コピー |
| target_port | target.port | 整数に変換された値 |
| task_name | target.resource.name | 値を直接コピー |
| target_url | target.url | 値を直接コピー |
| なし | metadata.product_name | 「Ergon Informatik Airlock IAM」に設定 |
| なし | metadata.vendor_name | 「Ergon Informatik」に設定 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。