管理客户端网络限制

使用 Kusto 工具和 SDK 时,网络安全是首要任务。 为了保护客户数据、查询和身份验证令牌,Kusto 强制实施 DNS 限制,限制与预定义的受信任域集的连接。 虽然这些限制提高了安全性,但某些方案可能需要绕过它们来支持自定义配置,例如在自定义 URI 后面托管 Kusto 或使用旧版 SDK。 这些方案包括:

  • 使用自定义 URI 托管 Kusto 的客户
  • 为实现冗余或高可用性,将 Kusto 托管在 Azure Front Door 后的客户
  • 使用旧版 SDK 的客户,其中尚不允许使用新域
  • 在新云中使用旧版 SDK 的客户

在这些情况下,Kusto SDK 和工具允许添加自定义津贴以绕过默认限制。

重要

对于后两种情况,解决问题的最佳方式是更新到你使用的 SDK 或工具的最新版本。 仅将自定义域和策略替代用作短期解决方案。

本文提供有关在 Kusto 工具中管理 DNS 限制的分步指南,包括添加受信任的主机、禁用 DNS 验证以及以编程方式自定义验证策略。

使用 Kusto Explorer 绕过 DNS 限制

  1. 打开 Kusto 资源管理器。

  2. 在 “工具” 功能区中,选择“ 选项”。

  3. 选择“连接”。

  4. 在 “其他受信任的主机”中,添加要使用的完全限定主机名或 DNS 后缀(前面有星号 *)。 可以通过用分号 ;分隔多个 FQDN 或 DNS 后缀来列出这些 FQDN 或 DNS 后缀。

    “选项”编辑器的屏幕截图,其中突出显示了“其他受信任的主机”字段。

使用 Azure 数据资源管理器 Web UI 绕过 DNS 限制

  1. 打开 Azure 数据资源管理器。

  2. 选择右上角的 “设置” 图标。

  3. 选择 连接。

  4. 在 “其他受信任的主机”中,添加要使用的完全限定主机名或 DNS 后缀(前面有星号 *)。 列出多个 FQDN 或 DNS 后缀,并用分号 ;将它们分隔开。

    ADX 设置编辑器的屏幕截图,其中突出显示了“其他受信任的主机”字段。

使用命令行应用程序和工具绕过 DNS 限制

对于命令行应用程序和工具,通过传递命令行参数或设置环境变量来完全禁用 DNS 验证。

注释

使用环境变量禁用 DNS 验证会影响使用 C# SDK 的所有应用程序和工具,包括 Kusto Explorer、Light Ingest、Kusto CLI 以及使用 C# Kusto SDK 开发的任何第三方应用程序。

若要禁用使用命令行参数,请将以下参数添加到工具的命令行。

-tweaks:Kusto.Cloud.Platform.Data.EnableWellKnownKustoEndpointsValidation=false

若要禁用使用环境变量,请执行以下作:

SET TWEAKS="Kusto.Cloud.Platform.Data.EnableWellKnownKustoEndpointsValidation=false"

使用 Kusto SDK 绕过 DNS 限制

使用 Kusto SDK 以编程方式控制 DNS 验证,可以通过添加受信任的主机和 DNS 域,或为 SDK 提供一个逻辑条件函数,该函数接收目标主机名,并根据连接是否被允许返回 true 或 false。


using Kusto.Data.Common;
 
// Add a DNS domain
KustoTrustedEndpoints.AddTrustedHosts(
    new[] { new FastSuffixMatcher<EndpointContext>.MatchRule(".domain.com", exact: false, context: KustoTrustedEndpoints.KustoEndpointContext) },
    replace:false);
 
// Add a fully qualified domain name
KustoTrustedEndpoints.AddTrustedHosts(
    new[] { new FastSuffixMatcher<EndpointContext>.MatchRule("mykusto.domain.com", exact: true, context: KustoTrustedEndpoints.KustoEndpointContext) },
    replace:false);

// Set a custom validation policy 
KustoTrustedEndpoints.SetOverridePolicy(
    (hostname) => true, 
    KustoTrustedEndpoints.KustoEndpointContext);