Microsoft Sentinel との統合
NetScaler Console を Microsoft Sentinel と統合して、NetScaler Console から Microsoft Sentinel に次の分析をエクスポートできます。
- WAF 違反
- Bot 違反
- SSL 証明書のインサイト
- Gateway インサイト
- メトリックとイベント
- NetScaler® Console 監査ログ
Microsoft Sentinel は、アプリケーション、サーバーなど、さまざまなソースからデータを収集する一元化されたデータ収集機能を提供します。管理者として、Microsoft Sentinel でインサイトや違反が報告された後、データを表示して意思決定を行うことができます。
統合を成功させるには、アクティブな Azure サブスクリプションがあることを確認し、各セクションの手順に従ってください。
Log Analytics ワークスペースの設定
収集されたデータを保存および分析するには、Log Analytics ワークスペースが必要です。
-
Azure にログインします。
-
[リソースの作成] をクリックします。

-
検索バーに「log analytics workspace」と入力し、[Log Analytics ワークスペース] の下の [作成] をクリックします。

-
[Log Analytics ワークスペース] のメインページで、[作成] をクリックします。

-
[Log Analytics ワークスペースの作成] で:
- アクティブなサブスクリプションとリソースグループを選択します。
注:
権限がある場合は、[新規作成] をクリックしてリソースグループを追加することもできます。
-
任意の名前を指定します。
-
リストからリージョンを選択します。
-
[確認 + 作成] をクリックします。

-
検証成功メッセージが表示されます。[作成] をクリックしてワークスペースをデプロイします。

-
デプロイの進行状況メッセージが表示されます。デプロイ完了メッセージが表示されたら、[リソースに移動] をクリックします。

ワークスペースが正常に作成されました。
- アクティブなサブスクリプションとリソースグループを選択します。
Microsoft Entra アプリケーションの作成
Log Analytics ワークスペースの代わりに通信するには、Azure サブスクリプションに関連付けられた Entra アプリケーションを作成する必要があります。アプリケーションを作成したら、Microsoft Sentinel Contributor ロールでアクセス許可を付与する必要もあります。アプリケーションは、クライアント ID、テナント ID、クライアント シークレットなどの詳細も提供します。これらの詳細をメモしておくことをお勧めします。これらの詳細は、統合プロセスを完了するために NetScaler Console でサブスクリプションを作成するときに必要になります。
-
Azure ポータルで、検索バーにキーワードを入力します。
-
[Microsoft Entra ID] をクリックします。

-
[追加] をクリックし、[アプリの登録] を選択します。

-
アプリの名前を指定し、[サポートされているアカウントの種類] でデフォルトオプションを選択し、[登録] をクリックします。

-
アプリケーションを登録した後:
-
クライアント ID と テナント ID をメモします。

-
アプリケーションのシークレット ID を作成します。[証明書とシークレット] をクリックし、[クライアント シークレット] の下の [新しいクライアント シークレット] をクリックします。説明、有効期間を指定し、[追加] をクリックしてアプリケーションのシークレット ID を作成します。

-
アプリケーションの詳細が表示されます。シークレットが作成された直後に [値] の下に表示される ID をメモしておいてください。この値は、他の GUI オプションに移動すると非表示になります。

-
Microsoft Entra ID データコネクタを使用した Microsoft Sentinel へのデータ送信
Microsoft Entra ID ログは、Entra テナントにアクセスするユーザー、アプリケーション、ネットワークに関する包括的な情報を提供します。詳細については、「Microsoft Entra ID データコネクタを使用して Microsoft Sentinel にデータを送信する」を参照してください。
データ収集エンドポイントの設定
エンドポイント URL を取得するには、データ収集エンドポイントを作成する必要があります。これは、NetScaler Console でサブスクリプションを作成するときに必要です。
-
Azure ポータルで、[Azure サービス] の下の [データ収集エンドポイント] を選択するか、検索バーにキーワードを入力します。

-
[データ収集エンドポイント] ページで [作成] をクリックします。

-
[データ収集エンドポイントの作成] で:
-
任意のエンドポイント名を指定します。
-
[サブスクリプション]、[リソースグループ]、[リージョン] を選択します。
-
[確認 + 作成] をクリックします。
-
検証成功メッセージが表示されたら、[作成] をクリックします。
-
エンドポイント URL をメモしておく必要があります。[データ収集エンドポイント] のメインページで、作成したエンドポイントを選択し、[JSON ビュー] をクリックして、エンドポイント ID をメモします。

データエクスポート用テーブルの作成
NetScaler Console から Microsoft Sentinel にエクスポートする各インサイトについて、テーブルを作成し、JSON 情報を提供する必要があります。各インサイトのテーブル要件については、次の詳細を参照してください。
| インサイト | 必要なテーブルの総数 |
|---|---|
| SSL インサイト | 3 |
| WAF | 1 |
| Bot | 1 |
| Gateway インサイト | 5 |
| イベント | 1 |
| メトリック | 1 |
| 監査ログ | 1 |
各データ収集ルール (DCR) につき最大 10 個のテーブルを作成できます。10 個を超えるテーブルを作成する場合は、別の DCR を作成する必要があります。
-
Azure ポータルでワークスペースに移動し、[設定] の下の [テーブル] をクリックします。
-
[作成] をクリックし、[新しいカスタムログ (DCR ベース)] を選択します。

-
[カスタムログの作成] で:
-
テーブル名を指定します。テーブル名は console_insightname の形式である必要があります。例: console_ns_sslvserver、console_ns_ssl_certkey。各インサイトに適用されるテーブル名については、手順 4 を参照してください。
-
テーブル名に関する詳細を追加するための説明を提供します。これはオプションです。
-
新しいデータ収集ルールを作成して追加します。
-
リストからデータ収集エンドポイントを選択します。

-
[次へ] をクリックします。
-
-
[スキーマと変換] タブで、エクスポートするインサイトの JSON サンプルログをアップロードする必要があります。各インサイトについて次のサンプル JSON を使用し、アップロードする JSON ファイルを作成できます。
インサイト JSON 使用するテーブル名 SSL (1) {"id": "3eb05733-c326-493c-9aa0-f7db3a6b4277", "ns_ip_address": "10.106.186.141", "name": "zeta_192_168_110_250", "vsvr_ip_address": "", "vsvr_port": -1, "vsvr_type": "", "state": "", "partition_name": "", "display_name": "10.106.186.141", "poll_time": 1716539986, "managed": "f", "ssl2": "f", "ssl3": "t", "tls10": "t", "tls11": "t", "tls12": "t", "dh": "f", "ersa": "t", "sslprofile": "", "tls13": "f", "dhkeyexpsizelimit": "DISABLED", "pushenctriggertimeout": 1, "sessionticket": "", "includesubdomains": "f", "sessionticketkeyrefresh": "", "ssllogprofile": "", "serverauth": "", "ssltriggertimeout": 100, "ersacount": 0, "strictcachecks": "NO", "dhfile": "", "sessreuse": "ENABLED", "redirectportrewrite": "DISABLED", "skipclientcertpolicycheck": "", "tls13sessionticketsperauthcontext": 1, "cipherredirect": "DISABLED", "dropreqwithnohostheader": "NO", "sessionticketlifetime": -1, "maxage": 0, "pushenctrigger": "Always", "strictsigdigestcheck": "f", "sslredirect": "DISABLED", "sessionkeylifetime": -1, "alpnprotocol": "", "clientauthuseboundcachain": "", "sesstimeout": 120, "clientcert": "", "snihttphostmatch": "CERT", "preload": "NO", "prevsessionkeylifetime": -1, "sessionticketkeydata": "", "encrypttriggerpktcount": 45, "cleartextport": "", "ssliocspcheck": "", "hsts": "f", "sslinterception": "", "commonname": "", "sslireneg": "", "ocspstapling": "DISABLED", "quantumsize": 8192, "insertionencoding": "Unicode", "sslimaxsessperserver": -1, "cipherurl": "", "pushflag": 0, "zerorttearlydata": "DISABLED", "allowextendedmastersecret": "", "dhekeyexchangewithpsk": "NO", "clientauth": "DISABLED", "denysslreneg": "NONSECURE", "sendclosenotify": "YES", "dhcount": 0, "snienable": "DISABLED", "table_name": "ns_sslvserver"}console_ns_sslvserver SSL (2) {"id": "a6673ab2-0b59-47b9-b530-bc30fb2b937c", "ssl_certificate": "/nsconfig/ssl/ca-cert.pem", "ssl_key": "/nsconfig/ssl/ca-key.pem", "certkeypair_name": "athul-ca", "cert_format": "PEM", "days_to_expiry": 281, "ns_ip_address": "10.106.186.141", "status": "Valid", "device_name": "10.106.186.141", "file_location_path": "", "certificate_data": "", "key_data": "", "poll_time": 1717434335, "no_domain_check": "f", "version": 3, "serial_number": "7B34B6A6A1A79E0FF168242D7BCFF78F04C9EE66", "signature_algorithm": "sha256WithRSAEncryption", "issuer": "C=IN,ST=KA,L=BAN,O=CIT,OU=ADM,CN=A", "valid_from": "Mar 12 08:51:11 2024 GMT", "valid_to": "Mar 12 08:51:11 2025 GMT", "subject": "C=IN,ST=KA,L=BAN,O=CIT,OU=ADM,CN=A", "public_key_algorithm": "rsaEncryption", "public_key_size": 4096, "no_of_bound_entities": 0, "partition_name": "", "display_name": "10.106.186.141", "hostname": "athulsadc", "key_name": "", "subjaltname": "", "managed_by": "", "certificate_dn": "", "linkcertkeyname": "", "table_name": "ns_ssl_certkey"}console_ns_ssl_certkey WAF [{"ip_address": "10.106.185.156", "ctnsappname": "vserver_1", "severity": 2, "violation_type": 19, "violation_type_desc": "Start URL", "block_flags": 1, "transformed_flags": 0, "not_blocked_flags": 0, "country_code": "-NA-", "region_code": "-NA-", "city": "-NA-", "latitude": 200.0, "longitude": 200.0, "signature_category": "", "attack_category": 2, "attack_category_desc": "Broken Authentication and Session Management", "total_attacks": 1, "rpt_sample_time": 1704783773, "source_ip_address": 174766492, "attack_time": 1704783538, "profile_name": "appfw_cs_lb_prof", "session_id": "", "http_req_url": "https://10.106.192.54/csrf_ffc/ffc.html?field10=asfasd", "violation_name": "-NA-", "violation_value": "-NA-", "violation_location": 4, "violation_threat_index": 5, "app_threat_index": 5, "http_method": 0, "violation_action": 3, "violation_action_desc": "Blocked", "severity_type": 2, "severity_type_desc": "Medium", "iprep_score": 0, "iprep_category": 0, "counter_value": 0, "appname": "vserver_1_10.106.185.156_lb", "violation_category": 12, "violation_category_desc": "Start URL", "source_ipv6_address": "", "true_client_ip": "\\N", "backend_vserver": "", "backend_appname": "", "transactionId": "0", "table_name": "af_threat_exporter_data_l2"}]console_af_threat_exporter_data_l2 Bot {"ip_address": "10.106.186.122", "ctnsappname": "secure_gateway", "bot_type": "2", "bot_type_desc": "Bad", "action_type": "6", "action_type_desc": "Log", "country_code": "0.0", "region_code": "0.0", "city": "0.0", "bot_severity": "0", "bot_severity_desc": "Critical", "latitude": "0", "longitude": "0", "bot_detection_mechanism": "6", "bot_detection_mechanism_desc": "BlackList", "bot_category": "0", "bot_category_desc": "Uncategorized", "source_ip_address": "174758625", "bot_signature_category": "Custom Policy Expression", "appname": "secure_gateway_10.106.186.122_lb", "backend_vserver": "", "backend_appname": "", "total_attacks": "2", "rpt_sample_time": "1718783216", "table_name": "af_bot_attack_details_l2"}console_af_bot_attack_details_l2 Gateway Insight (1) {"adc_ip_address": "10.106.186.141", "auth_server": "", "client_ip": 174766732, "epa_method_type": 0, "error_count": 14, "error_details": "Invalid credentials passed", "error_type": 1, "gateway_name": "vpn_vserver_142_6", "req_url": "", "resource": "", "rpt_sample_time": 1713505215, "sso_method_type": 0, "sta_ip": "", "table_name": "af_vpn_error_details", "username": "John"}console_af_vpn_error_details Gateway Insight (2) {"adc_ip_address": "10.102.71.166", "display_name": "10.102.71.166", "gateway_name": "firsthop", "ip_address": "10.102.71.168", "rpt_sample_time": "1718812158", "state": "Up", "table_name": "ns_vpnvserver"}console_ns_vpnvserver Gateway Insight (3) {"adc_ip_address": "10.106.186.141", "gateway_name": "vpn_vserver_141_7", "rpt_sample_time": 1702011308, "sessions": 1, "table_name": "af_vpn_session_details", "users": 1}console_af_vpn_session_details Gateway Insight (4) {"active_sessions": 59, "active_users": 1, "adc_ip_address": "10.106.186.136", "gateway_name": "vpnathul2", "rpt_sample_time": 1698919848, "table_name": "af_vpn_active_session_1"}console_af_vpn_active_session_1 Gateway Insight (5) {"adc_ip_address": "10.106.186.136", "entity_type": 3, "gateway_name": "vpnathul2", "hits": 3, "rpt_sample_time": 1698052438, "table_name": "af_vpn_error_reports"}console_af_vpn_error_reports Events {"rpt_sample_time": -1, "category": "HealthMonitoring", "entity": "10.106.186.148:HealthMonitoring:System Disk Usage", "counter_threshold_value": "", "id": "0f2607cf-f97d-4f71-9162-11e580262e93", "timestamp": 1712927472, "message": "Disk Usage High: 63.24%", "severity": "Critical", "user_name": "", "device_entity_type": "", "device_type": "", "counter_actual_value": "", "cmd_auth_status": "", "source": "10.106.186.148", "history": "Update Time= Fri, 12 Apr 2024 06:32:49 UTC ,Previous Severity= Critical ,New Severity= Critical, Source= 10.106.186.148\nUpdate Time= Fri, 12 Apr 2024 06:27:46 UTC ,Previous Severity= Critical ,New Severity= Critical, Source= 10.106.186.148\nUpdate Time= Fri, 12 Apr 2024 06:22:44 UTC ,Previous Severity= Critical ,New Severity= Critical, Source= 10.106.186.148\nUpdate Time= Fri, 12 Apr 2024 06:17:41 UTC ,Previous Severity= Critical ,New Severity= Critical, Source= 10.106.186.148\nUpdate Time= Fri, 12 Apr 2024 06:12:38 UTC ,Previous Severity= Critical ,New Severity= Critical, Source= 10.106.186.148\nUpdate Time= Fri, 12 Apr 2024 06:07:36 U", "config_cmd": "", "failureobj": "System Disk Usage", "operation_type": "undefined", "device_entity_name": "", "cmd_exec_status": "", "device_family": "", "source_event_id": -1, "source_system_ip": "10.106.186.148", "trap_id": 35, "table_name": "event"}console_event Metrics {"memory_free": 28830060544.0, "disk_used": 81248694272.0, "disk_free": 29632114688.0, "node_type": "", "memory_total": 34355544064.0, "cpu_usage": 0.49, "disk_total": 120522616832.0, "disk_usage": 73.28, "node_id": "", "id": "1be15a09-d078-469c-868a-bfbfcffe5ef1", "disk_total_capacity": 0.0, "page_size": 4096.0, "memory_usage": 16.08, "table_name": "mps_health"}console_mps_health Audit logs {"system_gmt_time":1721868291, "source":"X.X.X.X", "severity":"INFO", "module":"DEVICECONFIG", "event_type":"CMD_EXECUTED", "message":"Sample Mesage", "instance_ip":"X.X.X.X", "app_name":""}console_syslog_messages JSON をアップロードした後、次の詳細を表示できます。

[変換エディター] をクリックし、適切なインサイトに適用される次のクエリを入力し、[実行] をクリックして NetScaler Console のポーリング時間からデータを承認します。
-
SSL -
source | extend TimeGenerated = todatetime(poll_time) | project-rename sslvserver_id = id -
WAF および Bot -
source | extend TimeGenerated = todatetime(rpt_sample_time) -
Gateway インサイト -
source | extend TimeGenerated = todatetime(rpt_sample_time)
-
-
[次へ] をクリックし、[作成] をクリックして完了します。
-
[データ収集ルール] に移動し、作成した DCR をクリックします。
-
[構成] の下の [データソース] をクリックして、作成したテーブルを表示します。

DCR (データ収集ルール) には、監視メトリック発行者ロールへのアクセスが必要です。
-
Azure ポータルの [最近使用した項目] からアクセスできる DCR に移動します。
-
DCR ページから [アクセス制御 (IAM)] をクリックし、[ロールの割り当ての追加] をクリックします。

-
検索バーに「monitor」と入力して [監視メトリック発行者] を選択し、[次へ] をクリックします。
-
[メンバー] タブで、[メンバーの選択] をクリックし、作成した Entra アプリを選択します。
-
[確認 + 割り当て] をクリックします。
データ収集ルール ID をメモしておく必要があります。データ収集ルールページに移動し、DCR を選択し、JSON ビューをクリックして ID をメモします。

-
NetScaler Console でのサブスクリプションの作成
これで準備が整いました。最後のステップは、サブスクリプションを作成し、必要な詳細を追加して NetScaler Console を構成することです。NetScaler Console でサブスクリプションを作成するには、メモした次の詳細が必要です。
- エンドポイント URL
- データ収集ルール ID
- テナント ID
- クライアント ID
- クライアント シークレット
-
NetScaler Console にログインします。
-
[設定] > [可観測性統合] に移動します。
-
[統合] ページで、[追加] をクリックします。
-
[サブスクリプションの作成] ページで、次の詳細を指定します。
-
[サブスクリプション名] フィールドに任意の名前を指定します。
-
[ソース] として [NetScaler Console] を選択し、[次へ] をクリックします。
-
[Microsoft Sentinel] を選択し、[構成] をクリックします。[エンドポイントの構成] ページで、すべての詳細を入力し、[送信] をクリックします。
-
[次へ] をクリックします。
-
-
[インサイトの追加] をクリックし、[機能の選択] タブで、Microsoft Azure に追加したテーブルに応じて、エクスポートする機能を選択し、[選択した項目を追加] をクリックし、[次へ] をクリックします。
-
[インスタンスの選択] タブで、[すべてのインスタンスを選択] または [カスタム選択] のいずれかを選択し、[次へ] をクリックします。
-
すべてのインスタンスを選択 - すべての NetScaler インスタンスから Microsoft Sentinel にデータをエクスポートします。
-
カスタム選択 - リストから NetScaler インスタンスを選択できます。リストから特定のインスタンスを選択した場合、データは選択した NetScaler インスタンスからのみ Microsoft Sentinel にエクスポートされます。
-
-
[送信] をクリックします。
Microsoft Azure でのログの表示
すべてを構成した後、Microsoft Azure で詳細を表示するには 30 分待つことをお勧めします。
-
Azure ポータルで、[Log Analytics ワークスペース] に移動します。
-
[ログ] をクリックし、テーブル名を入力して [実行] をクリックすると結果が表示されます。

構成をトラブルシューティングし、ログを使用して検証することもできます。たとえば、構成されたインサイトに対して NetScaler Console GUI の [今すぐポーリング] オプションを使用し、次の操作を行います。
- SSH クライアントを使用して NetScaler Console にログインします。
- 「shell」と入力して bash モードに入ります。
-
次のコマンドを使用してログを表示します。
tail -f /var/mps/log/nbs/nbs_api.log
次の例は、トラブルシューティングのための考えられるエラーを分析するのに役立ちます。
-

このログは、NetScaler Console ([設定] > [可観測性統合]) の Microsoft Sentinel サブスクリプションに無効なクライアント ID を指定したことを示しています。
回避策: 正しいクライアント ID をコピーしたことを確認し、正しいクライアント ID を指定してサブスクリプションを編集します。詳細については、「Microsoft Entra アプリケーションの作成」を参照してください。
-

このログは、Microsoft Azure で必要な ssl_certkey テーブルを構成していないことを示しています。
回避策: Microsoft Azure で ssl_certkey のテーブルを構成します。詳細については、「データエクスポート用テーブルの作成」を参照してください。