Application Delivery Management

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. [リソースの作成] をクリックします。

    リソース

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

    Log Analytics ワークスペース

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

    ワークスペースの作成

  5. [Log Analytics ワークスペースの作成] で:

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

      注:

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

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

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

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

      ワークスペース作成の最終段階前

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

      ワークスペースの作成

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

      ワークスペースリソース

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

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

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

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

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

    Entra アプリ

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

    アプリの登録

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

    アプリの登録

  5. アプリケーションを登録した後:

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

      クライアント ID とテナント ID

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

      クライアント シークレット ID

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

      値 ID

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

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

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

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

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

    DCR の選択

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

    DCR の作成

  3. [データ収集エンドポイントの作成] で:

    1. 任意のエンドポイント名を指定します。

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

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

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

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

DCR ID

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

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

インサイト 必要なテーブルの総数
SSL インサイト 3
WAF 1
Bot 1
Gateway インサイト 5
イベント 1
メトリック 1
監査ログ 1

各データ収集ルール (DCR) につき最大 10 個のテーブルを作成できます。10 個を超えるテーブルを作成する場合は、別の DCR を作成する必要があります。

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

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

    テーブル

  3. [カスタムログの作成] で:

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

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

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

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

      テーブルパラメータ

    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
    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 をアップロードした後、次の詳細を表示できます。

    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)

      テーブルの実行

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

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

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

    テーブルソース

    DCR (データ収集ルール) には、監視メトリック発行者ロールへのアクセスが必要です。

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

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

      ロールの割り当て

    3. 検索バーに「monitor」と入力して [監視メトリック発行者] を選択し、[次へ] をクリックします。

    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. [ログ] をクリックし、テーブル名を入力して [実行] をクリックすると結果が表示されます。

    ログの表示

構成をトラブルシューティングし、ログを使用して検証することもできます。たとえば、構成されたインサイトに対して NetScaler Console GUI の [今すぐポーリング] オプションを使用し、次の操作を行います。

  1. SSH クライアントを使用して NetScaler Console にログインします。
  2. 「shell」と入力して bash モードに入ります。
  3. 次のコマンドを使用してログを表示します。

    tail -f /var/mps/log/nbs/nbs_api.log

次の例は、トラブルシューティングのための考えられるエラーを分析するのに役立ちます。

  1. 無効なログ

    このログは、NetScaler Console ([設定] > [可観測性統合]) の Microsoft Sentinel サブスクリプションに無効なクライアント ID を指定したことを示しています。

    回避策: 正しいクライアント ID をコピーしたことを確認し、正しいクライアント ID を指定してサブスクリプションを編集します。詳細については、「Microsoft Entra アプリケーションの作成」を参照してください。

  2. 無効な SSL キー

    このログは、Microsoft Azure で必要な ssl_certkey テーブルを構成していないことを示しています。

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

Microsoft Sentinel との統合