与 Microsoft Sentinel 集成
您可以将 NetScaler Console 与 Microsoft Sentinel 集成,以将以下分析数据从 NetScaler Console 导出到 Microsoft Sentinel:
-
WAF 违规
-
Bot 违规
-
SSL 证书洞察
-
网关洞察
-
指标和事件
-
NetScaler® Console 审计日志
Microsoft Sentinel 提供集中式数据收集,可从应用程序、服务器等各种来源收集数据。作为管理员,您可以在 Microsoft Sentinel 中报告洞察或违规后查看数据并做出决策。
要成功集成,请确保您拥有有效的 Azure 订阅,然后按照每个部分下的步骤操作:
配置 Log Analytics 工作区
需要 Log Analytics 工作区来存储和分析收集的数据。
-
登录 Azure。
-
单击 创建资源。

-
在搜索栏中,键入 log analytics workspace 并在 Log Analytics Workspace 下单击 Create。

-
在 Log Analytics Workspace 主页中,单击 Create。

-
在 创建 Log Analytics 工作区 中:
-
选择活动的订阅和资源组。注意:如果您有权限,也可以单击 Create new 以添加资源组。
-
指定一个您选择的名称。
-
从列表中选择您的区域。
-
单击 查看 + 创建。

-
出现验证通过消息。单击 Create 以部署工作区。

-
您可以看到部署正在进行的消息。在看到部署完成消息后,单击 Go to resource。
工作区已成功创建。
-
创建 Microsoft Entra 应用程序
您必须创建一个与 Azure 订阅关联的 Entra 应用程序,以便代表 Log Analytics 工作区进行通信。创建应用程序后,您还必须授予 Microsoft Sentinel Contributor 角色权限。该应用程序还提供诸如 Client ID、Tenant ID 和 Client Secret 等详细信息。建议您记下这些详细信息。在 NetScaler Console 中创建订阅以完成集成过程时,需要这些详细信息。
-
在 Azure 门户中,在搜索栏中键入关键字。
-
点击 Microsoft Entra ID 选项。

-
单击 Add 并选择 App registration。

-
为应用程序指定名称,在 Supported account types 下选择默认选项,然后单击 Register。

-
注册应用程序后:
-
记下 Client ID 和 Tenant ID。

-
为您的应用程序创建 Secret ID。单击 Certificates & secrets,然后在 Client secrets 下单击 New client secret。提供描述、有效期,然后单击 Add 为您的应用程序创建 Secret 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 |
| 网关洞察 | 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 机器人 {"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 网关洞察 (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 网关洞察 (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 网关洞察 (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 网关洞察 (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 网关洞察 (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 事件 {"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 指标 {"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 审计日志 {"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 后,您可以查看以下详细信息:
单击 Transformation editor,输入适用于相应洞察的以下查询,然后单击 Run 以接受从 NetScaler Console 中的轮询时间开始的数据。-
SSL -
source | extend TimeGenerated = todatetime(poll_time) | project-rename sslvserver_id = id -
WAF 和 Bot -
source | extend TimeGenerated = todatetime(rpt_sample_time) -
网关洞察 -
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,然后点击 Configure。在 Configure Endpoint 页面中,输入所有详细信息,然后点击 Submit。
-
点击 Next。
-
-
点击 Add Insights,然后在 Select Feature 选项卡中,根据您在 Microsoft Azure 中添加的表,选择要导出的功能,然后点击 Add Selected,再点击 Next。
-
在 Select Instance 选项卡中,您可以选择 Select All Instances 或 Custom select,然后点击 Next。
-
Select All Instances - 将所有 NetScaler 实例的数据导出到 Microsoft Sentinel。
-
Custom select - 允许您从列表中选择 NetScaler 实例。如果您从列表中选择特定实例,则数据将仅从选定的 NetScaler 实例导出到 Microsoft Sentinel。
-
-
点击 Submit。
在 Microsoft Azure 中查看日志
配置完成后,建议您等待 30 分钟,然后在 Microsoft Azure 中查看详细信息。
-
在您的 Azure 门户中,导航到您的 Log Analytics Workspace。
-
点击 Logs,提供表名,然后点击 Run 查看结果。

您还可以排查故障并使用日志来验证配置。例如,在 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 配置一个表。有关更多信息,请参阅创建表以导出数据。