Limitare l'accesso in uscita dal cluster di Azure Esplora dati
Limitare l'accesso in uscita del cluster è importante per ridurre i rischi, ad esempio l'esfiltrazione dei dati. Un attore malintenzionato potrebbe potenzialmente creare una tabella esterna in un account di archiviazione ed estrarre grandi quantità di dati. È possibile controllare l'accesso in uscita a livello di cluster definendo i criteri di callout. La gestione dei criteri di callout consente di consentire l'accesso in uscita a SQL, archiviazione o altri endpoint specificati.
In questo articolo si apprenderà come un'estensione per i criteri di callout che consente di limitare ulteriormente le chiamate dal cluster.
Tipi di criteri di callout
I criteri di callout possono essere divisi, come indicato di seguito:
- Criteri di callout non modificabili: si tratta dei criteri standard di un cluster. Sono preconfigurati e non possono essere modificati.
- Criteri di callout del cluster: si tratta di criteri che è possibile modificare usando i comandi dei criteri di callout.
Prerequisiti
- Una sottoscrizione di Azure. Creare un account Azure gratuito.
- Un cluster e un database di Esplora dati di Azure. Creare un cluster e un database.
Eseguire i comandi dei criteri di callout
Accedere all'interfaccia utente Web di Azure Esplora dati.
Nel menu a sinistra selezionare Query e quindi connettersi al cluster.
Nella finestra di query eseguire la query seguente per esaminare l'elenco dei criteri di callout non modificabili nel cluster:
.show cluster policy callout
Di seguito è riportato un esempio di criteri di callout non modificabili. Si noti che nell'elenco sono presenti alcune regole predefinite che consentono di effettuare chiamate ad altri servizi, ad esempio dati esterni.
[
{
"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
}
]
Svuotare l'elenco dei criteri di callout non modificabili
Per limitare l'accesso in uscita da un cluster, è necessario svuotare l'elenco dei criteri di callout non modificabili. A tale scopo, eseguire il comando seguente usando l'interfaccia della riga di comando di Azure o qualsiasi altro strumento chiamando le API di Azure Esplora dati.
Attivare una distribuzione arm usando l'interfaccia della riga di comando di Azure con un modello di Resource Manager aggiornato:
File di modello di Resource Manager di esempio denominato "template.json" con la proprietà restrictOutboundNetworkAccess impostata su Enabled:
{ "$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", ... } } ... ] }
Chiamata di esempio con l'interfaccia della riga di comando di Azure che fa riferimento al modello precedente.
# Replace the <...> placeholders with the correct values az deployment group create --name RestrictOutboundAccess --resource-group <resource group> --template-file ./template.json
L'aggiornamento della
restrictOutboundNetworkAccess
proprietà del cluster rimuove tutti i criteri non modificabili nel cluster. Ciò impedisce l'avvio di chiamate ad altri servizi, come illustrato nell'esempio seguente.Eseguire di nuovo il comando seguente e verificare che restituisca un elenco vuoto:
.show cluster policy callout | where EntityType == "Cluster immutable policy"
Aggiungere FQDN ai callout in condizioni limitate
Se si vuole consentire l'accesso in uscita a un FQDN specifico, è possibile aggiungerlo all'elenco per il allowedFqdnList
cluster. A tale scopo, è possibile eseguire apportando modifiche al modello di Resource Manager del cluster di Azure Esplora dati.
Attivare una distribuzione arm usando l'interfaccia della riga di comando di Azure con un modello di Resource Manager aggiornato:
File di modello arm di esempio denominato "template.json" con la proprietà allowedFqdnList impostata su ["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", "..."] ... } } ... ] }
Chiamata di esempio con l'interfaccia della riga di comando di Azure che fa riferimento al modello precedente.
# Replace the <...> placeholders with the correct values az deployment group create --name ConfigureAllowedFqdnList --resource-group <resource group> --template-file ./template.json
Aggiungendo il nome di dominio completo all'elenco consentito, sarà possibile effettuare chiamate al nome di dominio completo specificato. È possibile controllare il risultato della distribuzione eseguendo il comando seguente:
.show cluster policy callout | project Policy=parse_json(Policy) | mv-expand Policy | where Policy.CalloutType == "sql"
Nota
È disponibile un set di criteri predefiniti impostati per Azure Esplora dati per comunicare con il livello di archiviazione interno. Non espongono alcun rischio per l'esfiltrazione dei dati.