与 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 应用程序
您必须创建一个与 Azure 订阅关联的 Entra 应用程序,以便代表 Log Analytics 工作区进行通信。创建应用程序后,您还必须授予“Microsoft Sentinel 参与者”角色权限。该应用程序还提供诸如“客户端 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 |
| 事件 | 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 |
| 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 |
| 事件 | {"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 后,您可以查看以下详细信息:

单击“**转换编辑器**”,输入适用于相应洞察的以下查询,然后单击“**运行**”以接受从 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(数据收集规则)需要访问“监视指标发布者”角色。
-
导航到您的 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,然后单击“配置”。在“配置终结点”页面中,输入所有详细信息,然后单击“提交”。
-
单击“下一步”。
-
-
单击“添加洞察”,然后在“选择功能”选项卡中,根据您在 Microsoft Azure 中添加的表,选择要导出的功能,然后单击“添加选定项”,再单击“下一步”。
-
在“选择实例”选项卡中,您可以选择“选择所有实例”或“自定义选择”,然后单击“下一步”。
-
选择所有实例 - 将所有 NetScaler 实例的数据导出到 Microsoft Sentinel。
-
自定义选择 - 使您能够从列表中选择 NetScaler 实例。如果您从列表中选择特定实例,则数据仅从选定的 NetScaler 实例导出到 Microsoft Sentinel。
-
-
单击“提交”。
在 Microsoft Azure 中查看日志
配置所有内容后,我们建议您等待 30 分钟,然后在 Microsoft Azure 中查看详细信息。
-
在 Azure 门户中,导航到您的“Log Analytics 工作区”。
-
单击“日志”,提供表名称,然后单击“运行”以查看结果。

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