Microsoft Sentinelとの統合
NetScaler ConsoleをMicrosoft Sentinelと統合して、以下のアナリティクスをNetScaler ConsoleからMicrosoft Sentinelにエクスポートできます:
- WAF 違反
- ボット違反
- SSL 証明書に関するインサイト
- Gateway insight
Microsoft Sentinel は、アプリケーションやサーバーなどのさまざまなソースからデータを収集する一元的なデータ収集を提供します。管理者は、Microsoft Sentinel でインサイトや違反が報告された後に、データを表示して決定を下すことができます。
統合を成功させるには、アクティブな Azure サブスクリプションがあることを確認し、各セクションの手順に従ってください:
ログ分析ワークスペースの設定
収集したデータを保存および分析するには、ログ分析ワークスペースが必要です。
-
Azure にログインします。
-
[ リソースの作成] をクリックします。
-
検索バーに「ログ分析ワークスペース」と入力し、[ログ分析ワークスペース] の [作成] をクリックします。
-
ログ分析ワークスペースのメインページで 、「 作成」をクリックします。
-
[ログ分析の作成] ワークスペースで:
- アクティブなサブスクリプションとリソースグループを選択します。
注:
権限がある場合は、「 新規作成 」をクリックしてリソースグループを追加することもできます。
-
任意の名前を指定してください。
-
リストから地域を選択します。
-
[ レビュー] + [作成] をクリックします。
-
検証に合格したことを示すメッセージが表示されます。「 作成 」をクリックしてワークスペースをデプロイします。
-
デプロイが進行中というメッセージが表示されます。デプロイ完了メッセージが表示されたら、[ Go to resource] をクリックします。
ワークスペースは正常に作成されました。
- アクティブなサブスクリプションとリソースグループを選択します。
Microsoft Entra アプリケーションを作成する
Log Analytics Workspace に代わって通信するには、Azure サブスクリプションに関連付けられた Entra アプリケーションを作成する必要があります。アプリケーションを作成したら、 Microsoft Sentinel コントリビューターロールの権限も付与する必要があります。アプリケーションには、 クライアント ID、テナント ID、クライアントシークレットなどの詳細も表示されます**。これらの詳細を書き留めておくことをお勧めします。これらの情報は、NetScaler Consoleでサブスクリプションを作成して統合プロセスを完了するときに必要です。
-
Azure Portalの検索バーにキーワードを入力します。
-
「 Microsoft Entra ID」をクリックします。
-
[ 追加 ] をクリックし、[ アプリ登録] を選択します。
-
アプリの名前を指定し、「 サポートされているアカウントタイプ」でデフォルトオプションを選択し、「 登録」をクリックします。
-
アプリケーションを登録したら:
-
クライアント IDとテナント ID**をメモしておきます。
-
アプリケーションのシークレット ID を作成します。[ 証明書とシークレット ] をクリックし、[ クライアントシークレット] で [ 新しいクライアントシークレット] をクリックします。説明と有効期間を入力し、[ 追加 ] をクリックしてアプリケーションのシークレットIDを作成します。
-
アプリケーションの詳細が表示されます。シークレットが作成された直後に、[ 値 ] に表示されている ID を書き留めておいてください。この値は、他の GUI オプションに移動すると非表示になります。
-
Entra アプリケーションに権限を割り当てる
アプリケーションに Microsoft Sentinel コントリビューターロールを割り当てる必要があります。権限を付与するには:
-
Azure Portalの Microsoft Entra ID に移動します。
-
[ アプリ登録 ] をクリックし、アプリケーションを選択します。
-
[ アクセス制御 (IAM) ] をクリックし、[ 役割の割り当てを追加] をクリックします。
-
検索バーに「Sentinel」というキーワードを入力し、[Microsoft Sentinelコントリビューター] を選択して、[次へ] をクリックします。
-
「 メンバー 」タブで「 メンバーを選択」をクリックし、作成した entra アプリを選択します。
-
[Review + assign] をクリックします。
データ収集エンドポイントの設定
エンドポイント URL を取得するには、データ収集エンドポイントを作成する必要があります。これは、NetScaler コンソールでサブスクリプションを作成する場合に必要です。
-
Azure Portalの Azure サービスで、[ データ収集エンドポイント ] を選択するか、検索バーにキーワードを入力します。
-
「 データ収集エンドポイント 」ページで「 作成 」をクリックします。
-
「 データ収集エンドポイントの作成」で:
-
任意のエンドポイント名を指定してください
-
サブスクリプション、リソースグループ、 およびリージョンを選択します。
-
[ レビュー] + [作成] をクリックします。
-
「検証合格」というメッセージが表示されたら、「 作成」をクリックします。
-
エンドポイント URL をメモしておく必要があります。データ収集エンドポイントのメインページで 、作成したエンドポイントを選択し、 JSON ビューをクリックして、エンドポイント ID をメモします。
テーブルを作成してデータをエクスポートする
テーブルを作成し、NetScaler ConsoleからMicrosoft Sentinelにエクスポートする各インサイトのJSON情報を提供する必要があります。各インサイトの要件表には、以下の詳細情報が記載されています:
Insight | 必要なテーブルの総数 |
---|---|
SSL Insight | 3 |
WAF | 1 |
ボット | 1 |
Gateway insights | 5 |
各ワークスペースには、最大 10 個のテーブルを作成できます。10 テーブルを超える場合は、別のワークスペースを作成する必要があります。
-
Azure Portalのワークスペースに移動し、[ 設定 ] の [ テーブル] をクリックします。
-
[ 作成 ] をクリックし、[ 新しいカスタムログ (DCRベース)] を選択します
-
「 カスタムログの作成」で:
-
テーブル名を指定します。テーブル名は console_insightnameの形式でなければなりません。例:console_ns_sslvserver、console_ns_ssl_certkey。ステップ 4 を参照して、各インサイトに適用できるテーブル名を取得できます。
-
説明を入力して、テーブル名に関する詳細情報を追加します。これはオプションです。
-
新しいデータ収集ルールを作成して追加します。
-
リストからデータ収集エンドポイントを選択します。
-
[次へ] をクリックします。
-
-
「 スキーマと変換 」タブで、エクスポートするインサイトの JSON サンプルログをアップロードする必要があります。インサイトごとに以下のサンプル JSON を使用し、アップロードする JSON ファイルを作成できます:
Insight 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"}
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_report JSON をアップロードすると、次の詳細を表示できます:
[ トランスフォーメーションエディター]をクリックし、該当するインサイトに適用できる次のクエリを入力し、[ 実行 ]をクリックしてNetScaler Consoleのポーリング時間からのデータを受け入れます。
-
SSL -
source | extend TimeGenerated = todatetime(poll_time) | project-rename sslvserver_id = id
-
WAFとボット -
source | extend TimeGenerated = todatetime(rpt_sample_time)
-
Gateway Insight -
source | extend TimeGenerated = todatetime(rpt_sample_time)
-
-
[ 次へ ] をクリックし、[ 作成 ] をクリックして完了します。
-
[ データ収集ルール] に移動し、作成した DCR をクリックします。
-
[ 構成] で [ データソース ] をクリックして、作成されたテーブルを表示します。
DCR(データ収集ルール)には、 モニタリングメトリックパブリッシャーロールへのアクセスが必要です 。
-
Azure Portalの [ 最近] からアクセスできる DCR に移動します。
-
DCR ページの [ アクセス制御 (IAM) ] をクリックし、[ 役割の割り当てを追加] をクリックします。
-
検索バーに「モニター」というキーワードを入力して「 モニタリング指標パブリッシャー 」を選択し、「 次へ」をクリックします。
-
「 メンバー 」タブで「 メンバーを選択」 をクリックし、作成したEntraアプリを選択します。
-
[Review + assign] をクリックします。
データ収集ルール ID をメモしておく必要があります。データ収集ルールページに移動して DCR を選択し、JSON ビューをクリックして ID をメモします。
-
NetScaler コンソールでサブスクリプションを作成する
これですべての準備が整いました。最後のステップは、サブスクリプションを作成し、必要な詳細を追加してNetScaler Consoleを構成することです。NetScaler Consoleでサブスクリプションを作成するには、メモしておいた次の詳細が必要です:
- エンドポイント URL
- データ収集ルール ID
- テナント ID
- クライアントID
- クライアントシークレット
-
NetScaler コンソールにログインします。
-
[ 設定] > [オブザーバビリティ統合]に移動します。
-
「 インテグレーション 」ページで、「 追加」をクリックします。
-
「 サブスクリプションの作成 」ページで、次の詳細を指定します:
-
[ サブスクリプション名] フィールドに任意の名前を指定します 。
-
ソースとして「NetScaler コンソール」を選択し、[次へ] をクリックします。
-
Microsoft Sentinelを選択し、[設定] をクリックします。「 エンドポイントの設定 」ページで、すべての詳細を入力し、「 送信」をクリックします。
-
[次へ] をクリックします。
-
-
[ インサイトの追加 ] をクリックし、Microsoft Azure に追加したテーブルに応じて [ 機能の選択 ] タブで、エクスポートする機能を選択し、[ 選択項目の追加] をクリックして [ 次へ] をクリックします。
-
[インスタンスの選択 ] タブでは、[ すべてのインスタンスを選択] または [ カスタム選択] を選択し、[ 次へ] をクリックします。
-
すべてのインスタンスを選択 -すべてのNetScalerインスタンスからMicrosoft Sentinelにデータをエクスポートします。
-
カスタム選択-一覧からNetScalerインスタンスを選択できます 。リストから特定のインスタンスを選択した場合、データは選択したNetScalerインスタンスからのみMicrosoft Sentinelにエクスポートされます。
-
-
[Submit] をクリックします。
Microsoft Azureでログを表示する
すべての設定が完了したら、Microsoft Azure で詳細が表示されるまで 30 分待つことをお勧めします。
-
Azure Portalで、 ログ分析ワークスペースに移動します。
-
[ Logs] をクリックし、テーブル名を指定し、[ Run ] をクリックして結果を表示します。