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
- Suscripción a Azure. Cree una cuenta de Azure gratuita.
- Un clúster y una base de datos de Azure Data Explorer. Cree un clúster y una base de datos.
Ejecute comandos de directiva de llamada
Inicie sesión en la interfaz de usuario web de Azure Data Explorer.
En el menú de la izquierda, seleccione Consulta. A continuación, conéctese al clúster.
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
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.
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.Vuelva a ejecutar el siguiente comando y compruebe que devuelve una lista vacía:
.show cluster policy callout | where EntityType == "Cluster immutable policy"
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.
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
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"
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.