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 |
各ワークスペースでは、最大 10 個のテーブルを作成できます。10 個を超えるテーブルを作成する場合は、別のワークスペースを作成する必要があります。
-
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 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 をアップロードした後、以下の詳細を表示できます。
[変換エディター] をクリックし、適切なインサイトに適用される以下のクエリを入力し、[実行] をクリックして 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 (データ収集ルール) には、Monitoring Metrics Publisher ロールへのアクセスが必要です。
-
Azure ポータルの [最近使用した項目] からアクセスできる DCR に移動します。
-
DCR ページから [アクセス制御 (IAM)] をクリックし、[ロールの割り当ての追加] をクリックします。
-
検索バーに「monitor」と入力して [Monitoring Metrics Publisher] を選択し、[次へ] をクリックします。
-
[メンバー] タブで [メンバーの選択] をクリックし、作成した 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 ワークスペース] に移動します。
-
[ログ] をクリックし、テーブル名を入力して [実行] をクリックすると、結果が表示されます。