Compartir vía


Restricción del acceso saliente de un clúster de Azure Data Explorer

Restringir el acceso saliente de los clústeres es importante para mitigar riesgos como la filtración de datos. Un actor malintencionado podría crear una tabla externa a partir de una cuenta de almacenamiento y extraer grandes cantidades de datos. Para controlar el acceso saliente en el nivel de clúster, puede definir directivas de llamada. Administrar directivas de llamada le permitirá habilitar el acceso saliente a puntos de conexión especificados, como SQL o de almacenamiento.

En este artículo, obtendrá información sobre una extensión para las directivas de llamada que le permitirá restringir aún más las llamadas desde un clúster.

Tipos de directivas de llamada

Las directivas de llamada se pueden dividir de la siguiente manera:

  • Directivas de llamada inmutables: son las directivas estándar de un clúster. Estas vienen preconfiguradas y no se pueden modificar.
  • Directivas de llamada de clúster: son directivas que se pueden modificar mediante comandos de directiva de llamada.

Requisitos previos

Ejecute comandos de directiva de llamada

  1. Inicie sesión en la interfaz de usuario web de Azure Data Explorer.

  2. En el menú de la izquierda, seleccione Consulta. A continuación, conéctese al clúster.

  3. En la ventana de consulta, ejecute la siguiente consulta para inspeccionar la lista de directivas de llamada inmutables del clúster:

    .show cluster policy callout
    

    Captura de pantalla de la página de consultas restringidas, en la que se muestran las directivas de llamada inmutables.

A continuación se muestra un ejemplo de directivas de llamada inmutables. Observe que la lista incluye algunas reglas predeterminadas que permiten realizar llamadas a otros servicios, como a datos externos.

[
   {
      "CalloutType":"kusto",
      "CalloutUriRegex":"[a-z0-9]{3,22}\\.(\\w+\\.)?kusto(mfa)?\\.windows\\.net/?$",
      "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\\.windows\\.net/?$",
      "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
   }
]

Vacíe la lista de directivas de llamada inmutables

Para restringir el acceso saliente del clúster, deberá vaciar la lista de directivas de llamada inmutables. Para ello, ejecute el siguiente comando mediante la CLI de Azure, o cualquier otra herramienta, mediante una llamada a las API de Azure Data Explorer.

  1. Desencadene una implementación de ARM mediante la CLI de Azure con una plantilla de ARM actualizada:

    A continuación, se muestra un archivo de plantilla de ARM de ejemplo, denominado "template.json", con la propiedad restrictOutboundNetworkAccess establecida como Habilitado:

    {
      "$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",
                  ...
              }
          }
          ...
      ]
    }
    

    La siguiente llamada de ejemplo mediante la CLI de Azure hace referencia a la plantilla anterior.

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

    Al actualizar la propiedad restrictOutboundNetworkAccess del clúster, se quitarán todas las directivas inmutables de este. Esto impedirá iniciar llamadas a otros servicios, tal y como se muestra en el siguiente ejemplo.

    Captura de pantalla de la página de consultas restringidas, en la que se muestra un error en las directivas de llamada inmutables.

  2. Vuelva a ejecutar el siguiente comando y compruebe que devuelve una lista vacía:

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

    Captura de pantalla de la página de consultas restringidas, en la que no se muestra ninguna directiva de llamada inmutable.

Cómo agregar FQDN a las llamadas bajo condiciones restringidas

Si desea permitir el acceso saliente a un FQDN específico, puede agregarlo a la lista allowedFqdnList del clúster. Para ello, realice cambios en la plantilla de ARM del clúster de Azure Data Explorer.

  1. Desencadene una implementación de ARM mediante la CLI de Azure con una plantilla de ARM actualizada:

    A continuación, se muestra un archivo de plantilla de ARM de ejemplo, denominado "template.json", con la propiedad allowedFqdnList establecida como ["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", "..."]
                  ...
              }
          }
          ...
      ]
    }
    

    La siguiente llamada de ejemplo mediante la CLI de Azure hace referencia a la plantilla anterior.

    # Replace the <...> placeholders with the correct values
    az deployment group create   --name ConfigureAllowedFqdnList   --resource-group <resource group>   --template-file ./template.json
    
  2. Tras agregar el FQDN especificado a la lista de permitidos, podrá realizar llamadas a este. Para comprobar el resultado de la implementación, puede ejecutar el siguiente comando:

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

    Captura de pantalla de la página de consultas restringidas, en la que se muestra una directiva de llamada configurada.

    Nota

    Para permitir que Azure Data Explorer se comunique con su capa de almacenamiento interna, existe un conjunto de directivas predeterminadas. Tenga en cuenta que estas no suponen ningún riesgo de filtración de datos.