NetScaler Console サービス

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 ワークスペースが必要です。

  1. Azure にログインします。

  2. [リソースの作成] をクリックします。

    Resource

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

    Log analytics workspace

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

    Workspace creation

  5. [Log Analytics ワークスペースの作成] で、以下を行います。

    1. アクティブなサブスクリプションとリソースグループを選択します。

      注:

      権限がある場合は、[新規作成] をクリックしてリソースグループを追加することもできます。

    2. 任意の名前を指定します。

    3. リストからリージョンを選択します。

    4. [確認 + 作成] をクリックします。

      Workspace creation pre final stage

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

      Workspace creation

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

      Workspace resource

      ワークスペースが正常に作成されました。

Microsoft Entra アプリケーションの作成

Log Analytics ワークスペースの代わりに通信するために、Azure サブスクリプションに関連付けられた Entra アプリケーションを作成する必要があります。アプリケーションを作成した後、Microsoft Sentinel Contributor ロールでアクセス許可を付与する必要もあります。アプリケーションは、クライアント IDテナント IDクライアント シークレットなどの詳細も提供します。これらの詳細をメモしておくことをお勧めします。これらの詳細は、連携プロセスを完了するために NetScaler Console でサブスクリプションを作成する際に必要になります。

  1. Azure ポータルで、検索バーにキーワードを入力します。

  2. [Microsoft Entra ID] をクリックします。

    Entra app

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

    Register an app

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

    App registration

  5. アプリケーションを登録した後、以下を行います。

    1. クライアント IDテナント ID をメモします。

      Client and tenant ids

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

      Client Secret ID

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

      Value ID

Microsoft Entra ID データコネクタを使用した Microsoft Sentinel へのデータ送信

Microsoft Entra ID ログは、Entra テナントにアクセスするユーザー、アプリケーション、ネットワークに関する包括的な情報を提供します。詳細については、「Microsoft Entra ID データコネクタを使用して Microsoft Sentinel にデータを送信する」を参照してください。

データ収集エンドポイントの設定

エンドポイント URL を取得するには、データ収集エンドポイントを作成する必要があります。これは、NetScaler Console でサブスクリプションを作成する際に必要です。

  1. Azure ポータルで、[Azure サービス] の下にある [データ収集エンドポイント] を選択するか、検索バーにキーワードを入力します。

    DCR select

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

    DCR create

  3. [データ収集エンドポイントの作成] で、以下を行います。

    1. 任意の名前を指定します。

    2. [サブスクリプション][リソースグループ][リージョン] を選択します。

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

    4. 検証成功のメッセージが表示されたら、[作成] をクリックします。

エンドポイント URL をメモしておく必要があります。[データ収集エンドポイント] メインページで、作成したエンドポイントを選択し、[JSON ビュー] をクリックしてエンドポイント ID をメモします。

DCR ID

データエクスポート用テーブルの作成

NetScaler Console から Microsoft Sentinel にエクスポートする各インサイトについて、テーブルを作成し、JSON 情報を提供する必要があります。各インサイトのテーブル要件については、以下の詳細を参照してください。

インサイト 必要なテーブルの総数
SSL インサイト 3
WAF 1
Bot 1
Gateway インサイト 5

各ワークスペースでは、最大 10 個のテーブルを作成できます。10 個を超えるテーブルを作成する場合は、別のワークスペースを作成する必要があります。

  1. Azure ポータルでワークスペースに移動し、[設定] の下にある [テーブル] をクリックします。

  2. [作成] をクリックし、[新しいカスタムログ (DCR ベース)] を選択します。

    Table

  3. [カスタムログの作成] で、以下を行います。

    1. テーブル名を指定します。テーブル名は console_insightname の形式である必要があります。例: console_ns_sslvserverconsole_ns_ssl_certkey。各インサイトに適用されるテーブル名については、手順 4 を参照してください。

    2. テーブル名に関する詳細情報を追加するための説明を提供します。これはオプションです。

    3. 新しいデータ収集ルールを作成して追加します。

    4. リストからデータ収集エンドポイントを選択します。

      Table parameters

    5. [次へ] をクリックします。

  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
    SSL (3) {"id": "2baffd1a-7ed6-4035-91e8-ad3a3125bff4", "certkeypair_name": "cert1", "ns_ip_address": "10.106.186.127", "poll_time": 1715671567, "partition_name": "", "display_name": "10.106.186.127", "hostname": "", "entity_name": "secure_gateway", "entity_type": "sslvserver", "table_name": "ns_sslcertkey_binding"} console_ns_sslcertkey_binding
    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
    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 をアップロードした後、以下の詳細を表示できます。

    JSON details

    [変換エディター] をクリックし、適切なインサイトに適用される以下のクエリを入力し、[実行] をクリックして 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)

      Table run

  5. [次へ] をクリックし、[作成] をクリックして完了します。

  6. [データ収集ルール] に移動し、作成した DCR をクリックします。

  7. [構成] の下にある [データソース] をクリックして、作成したテーブルを表示します。

    Table source

    DCR (データ収集ルール) には、Monitoring Metrics Publisher ロールへのアクセスが必要です。

    1. Azure ポータルの [最近使用した項目] からアクセスできる DCR に移動します。

    2. DCR ページから [アクセス制御 (IAM)] をクリックし、[ロールの割り当ての追加] をクリックします。

      Role assign

    3. 検索バーに「monitor」と入力して [Monitoring Metrics Publisher] を選択し、[次へ] をクリックします。

    4. [メンバー] タブで [メンバーの選択] をクリックし、作成した Entra アプリを選択します。

    5. [確認 + 割り当て] をクリックします。

      データ収集ルール ID をメモしておく必要があります。データ収集ルールページに移動し、DCR を選択して JSON ビューをクリックし、ID をメモします。

      DCR ID

NetScaler Console でのサブスクリプションの作成

これで準備が整いました。最後のステップは、サブスクリプションを作成し、必要な詳細を追加して NetScaler Console を設定することです。NetScaler Console でサブスクリプションを作成するには、メモした以下の詳細が必要です。

  • エンドポイント URL
  • データ収集ルール ID
  • テナント ID
  • クライアント ID
  • クライアント シークレット
  1. NetScaler Console にログインします。

  2. [設定] > [可観測性連携] に移動します。

  3. [連携] ページで [追加] をクリックします。

  4. [サブスクリプションの作成] ページで、以下の詳細を指定します。

    1. [サブスクリプション名] フィールドに任意の名前を指定します。

    2. [ソース] として [NetScaler Console] を選択し、[次へ] をクリックします。

    3. [Microsoft Sentinel] を選択し、[設定] をクリックします。[エンドポイントの設定] ページで、すべての詳細を入力し、[送信] をクリックします。

    4. [次へ] をクリックします。

  5. [インサイトの追加] をクリックし、[機能の選択] タブで、Microsoft Azure で追加したテーブルに応じてエクスポートする機能を選択し、[選択した項目を追加] をクリックして、[次へ] をクリックします。

  6. [インスタンスの選択] タブで、[すべてのインスタンスを選択] または [カスタム選択] のいずれかを選択し、[次へ] をクリックします。

    • すべてのインスタンスを選択 - すべての NetScaler インスタンスから Microsoft Sentinel にデータをエクスポートします。

    • カスタム選択 - リストから NetScaler インスタンスを選択できます。リストから特定のインスタンスを選択した場合、データは選択した NetScaler インスタンスからのみ Microsoft Sentinel にエクスポートされます。

  7. [送信] をクリックします。

Microsoft Azure でのログの表示

すべての設定が完了したら、Microsoft Azure で詳細を表示するまで 30 分ほど待つことをお勧めします。

  1. Azure ポータルで、[Log Analytics ワークスペース] に移動します。

  2. [ログ] をクリックし、テーブル名を入力して [実行] をクリックすると、結果が表示されます。

    View logs

Microsoft Sentinel との連携