限制来自 Azure 数据资源管理器群集的出站访问

限制群集的出站访问对于降低数据外泄等风险非常重要。 恶意参与者可能会为存储帐户创建外部表并提取大量数据。 可以通过定义标注策略来控制群集级别的出站访问。 通过管理标注策略,可允许对指定 SQL、存储或其他端点的出站访问。

本文将介绍标注策略的扩展,使你能够进一步限制来自群集的标注。

标注策略的类型

标注策略可分为以下几种:

  • 不可变标注策略:这些是群集的标准策略。 它们是预配置的,无法修改。
  • 群集标注策略:这些策略可以使用标注策略命令进行修改。

先决条件

运行标注策略命令

  1. 登录到 Azure 数据资源管理器 Web UI

  2. 在左侧菜单中,选择“查询”,然后连接到群集。

  3. 在查询窗口中,运行以下查询以检查群集上的不可变标注策略列表:

    .show cluster policy callout
    

    Screenshot of the restricted query page, showing the immutable callout policies.

下面显示了不可变标注策略的一个示例。 请注意,列表中有几个默认规则允许调用其他服务,例如外部数据。

[
   {
      "CalloutType":"kusto",
      "CalloutUriRegex":"[a-z0-9]{3,22}\\.(\\w+\\.)?kusto(mfa)?\\.chinacloudapi\\.cn/?$",
      "CanCall":true
   },
   {
      "CalloutType":"kusto",
      "CalloutUriRegex":"//[a-z0-9]{3,22}\\.[a-z0-9-]{1,50}\\.(kusto\\.azuresynapse|kustodev\\.azuresynapse-dogfood)\\.net/?$",
      "CanCall":true
   },
   {
      "CalloutType":"kusto",
      "CalloutUriRegex":"^https://([A-Za-z0-9]+\\.)?(ade|adx)\\.(int\\.)?(applicationinsights|loganalytics|monitor)\\.(io|azure(\\.com|\\.us|\\.cn))/",
      "CanCall":true
   },
   {
      "CalloutType":"sql",
      "CalloutUriRegex":"[a-z0-9][a-z0-9\\-]{0,61}[a-z0-9]?\\.database\\.chinacloudapi\\.cn/?$",
      "CanCall":true
   },
   {
      "CalloutType":"sql",
      "CalloutUriRegex":"[a-z0-9-]{0,61}?(-ondemand)?\\.sql\\.azuresynapse(-dogfood)?\\.net/?$",
      "CanCall":true
   },
   {
      "CalloutType":"external_data",
      "CalloutUriRegex":".*",
      "CanCall":true
   },
   {
      "CalloutType":"azure_digital_twins",
      "CalloutUriRegex":"[A-Za-z0-9\\-]{3,63}\\.api\\.[A-Za-z0-9]+\\.digitaltwins\\.azure\\.net/?$",
      "CanCall":true
   }
]

清空不可变标注策略的列表

若要限制群集的出站访问,必须清空不可变标注策略的列表。 可以通过调用 Azure 数据资源管理器 API 使用 Azure CLI 或任何其他工具运行以下命令来执行此操作。

  1. 使用带有更新的 ARM 模板的 Azure CLI 触发 ARM 部署:

    名为“template.json”的示例 ARM 模板文件,其属性 restrictOutboundNetworkAccess 设置为“已启用”:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      ...
      "resources": [
          {
              "type": "Microsoft.Kusto/Clusters",
              "apiVersion": "2021-02-01",
              ...
              "properties": {
                  ...
                  "restrictOutboundNetworkAccess": "Enabled",
                  ...
              }
          }
          ...
      ]
    }
    

    使用 Azure CLI 引用上述模板的示例调用。

    # Replace the <...> placeholders with the correct values
    az deployment group create   --name RestrictOutboundAccess   --resource-group <resource group>   --template-file ./template.json
    

    更新 restrictOutboundNetworkAccess 群集属性会删除群集上的所有不可变策略。 这可以防止向其他服务发起标注,如下例所示。

    Screenshot of the restricted query page, showing an immutable callout policies error.

  2. 再次运行以下命令,并验证它是否返回空列表:

    .show cluster policy callout 
    | where EntityType == "Cluster immutable policy"
    

    Screenshot of the restricted query page, showing no immutable callout policies.

在受限条件下将 FQDN 添加到标注

如果要允许对特定 FQDN 的出站访问,可以将其添加到群集的 allowedFqdnList 列表中。 可以通过对 Azure 数据资源管理器群集的 ARM 模板进行更改来执行此操作。

  1. 使用带有更新的 ARM 模板的 Azure CLI 触发 ARM 部署:

    名为“template.json”的示例 ARM 模板文件,其属性 allowedFqdnList 设置为 ["some.sql.azuresynapse.net", "..."]:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      ...
      "resources": [
          {
              "type": "Microsoft.Kusto/Clusters",
              "apiVersion": "2021-02-01",
              ...
              "properties": {
                  ...
                  "restrictOutboundNetworkAccess": "Enabled",
                  "allowedFqdnList": ["some.sql.azuresynapse.net", "..."]
                  ...
              }
          }
          ...
      ]
    }
    

    使用 Azure CLI 引用上述模板的示例调用。

    # Replace the <...> placeholders with the correct values
    az deployment group create   --name ConfigureAllowedFqdnList   --resource-group <resource group>   --template-file ./template.json
    
  2. 通过将 FQDN 添加到允许列表中,将能够对指定的 FQDN 添加标注。 可以通过执行以下命令来检查部署结果:

    .show cluster policy callout 
    | project Policy=parse_json(Policy)
    | mv-expand Policy
    | where Policy.CalloutType == "sql" 
    

    Screenshot of the restricted query page, showing a configured callout policy.

    注意

    为 Azure 数据资源管理器设置了一组默认策略,以与其内部存储层进行通信。 它们不带有数据外泄的风险。