Restreindre l’accès sortant à partir de votre cluster Azure Data Explorer
La restriction de l’accès sortant de votre cluster est importante pour atténuer les risques comme l’exfiltration des données. Un acteur malveillant pourrait créer une table externe dans un compte de stockage et extraire de grandes quantités de données. Vous pouvez contrôler l’accès sortant au niveau du cluster en définissant des stratégies de légende. La gestion des stratégies de légende vous permet d’autoriser l’accès sortant aux points de terminaison SQL, de stockage ou à d’autres points de terminaison spécifiés.
Dans cet article, vous allez découvrir comment étendre les stratégies de légende pour restreindre davantage les appels de votre cluster.
Types de stratégies de légende
Les stratégies de légende peuvent être divisées, comme suit :
- Stratégies de légende immuables : il s’agit des stratégies standard d’un cluster. Elles sont préconfigurées et ne peuvent pas être modifiées.
- Stratégies de légende de cluster : il s’agit de stratégies que vous pouvez modifier à l’aide de commandes de stratégie de légende.
Prérequis
- Un abonnement Azure. Créez un compte Azure gratuit.
- Un cluster et une base de données Azure Data Explorer. Créez un cluster et une base de données.
Exécutez les commandes de stratégie de légende
Se connecter à l’interface utilisateur web d’Azure Data Explorer.
Dans le menu de gauche, sélectionnez Requête, puis connectez-vous à votre cluster.
Dans la fenêtre de requête, exécutez la requête suivante pour inspecter la liste des stratégies de légende immuables sur votre cluster :
.show cluster policy callout
Voici un exemple de stratégies de légende immuables. Notez que dans la liste, il existe quelques règles par défaut qui permettent d’effectuer des appels à d’autres services, comme des données externes.
[
{
"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
}
]
Vider la liste des stratégies de légende immuables
Pour restreindre l’accès sortant à partir de votre cluster, vous devez vider la liste des stratégies de légende immuables. Pour ce faire, exécutez la commande suivante à l’aide de l’interface Azure CLI ou d’autres outils en appelant les API Azure Data Explorer.
Déclenchez un déploiement ARM à l’aide de l’interface Azure CLI avec un modèle ARM mis à jour :
Exemple de fichier de modèle ARM nommé « template.json » avec la propriété restrictOutboundNetworkAccess définie sur Activé :
{ "$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", ... } } ... ] }
Exemple d’appel utilisant l’interface Azure CLI faisant référence au modèle ci-dessus.
# Replace the <...> placeholders with the correct values az deployment group create --name RestrictOutboundAccess --resource-group <resource group> --template-file ./template.json
La mise à jour de la propriété
restrictOutboundNetworkAccess
du cluster supprime toutes les stratégies immuables de votre cluster. Cette opération empêche le lancement des appels à d’autres services, comme indiqué dans l’exemple suivant.Réexécutez la commande suivante et vérifiez qu’elle retourne une liste vide :
.show cluster policy callout | where EntityType == "Cluster immutable policy"
Ajouter des noms de domaine complets aux légendes dans des conditions restreintes
Si vous souhaitez autoriser l’accès sortant à un nom de domaine complet spécifique, vous pouvez l’ajouter à la liste allowedFqdnList
de votre cluster. Pour cela, vous pouvez l’exécuter en apportant des modifications au modèle ARM du cluster Azure Data Explorer.
Déclenchez un déploiement ARM à l’aide de l’interface Azure CLI avec un modèle ARM mis à jour :
Exemple de fichier de modèle ARM nommé « template.json » avec la propriété allowedFqdnList définie sur ["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", "..."] ... } } ... ] }
Exemple d’appel utilisant l’interface Azure CLI faisant référence au modèle ci-dessus.
# Replace the <...> placeholders with the correct values az deployment group create --name ConfigureAllowedFqdnList --resource-group <resource group> --template-file ./template.json
En ajoutant le nom de domaine complet à la liste autorisée, vous pourrez effectuer des appels au nom de domaine complet spécifié. Vous pouvez vérifier le résultat du déploiement en exécutant la commande suivante :
.show cluster policy callout | project Policy=parse_json(Policy) | mv-expand Policy | where Policy.CalloutType == "sql"
Notes
Il existe un ensemble de stratégies par défaut définies pour Azure Data Explorer afin de communiquer avec sa couche de stockage interne. Ces stratégies n’exposent aucun risque d’exfiltration de données.