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

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

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

标注策略的类型

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

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

先决条件

运行标注策略命令

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

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

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

    .show cluster policy callout
    

    受限查询页的屏幕截图,其中显示了不可变标注策略。

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

[
   {
      "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 群集属性会删除群集上的所有不可变策略。 这可以防止向其他服务发起标注,如下例所示。

    受限查询页的屏幕截图,其中显示了不可变标注策略错误。

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

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

    受限查询页的屏幕截图,其中未显示不可变标注策略。

在受限条件下将 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" 
    

    受限查询页的屏幕截图,其中显示了配置的标注策略。

    注意

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