Restringir o acesso de saída do cluster do Azure Data Explorer
Restringir o acesso de saída do cluster é importante para mitigar riscos como a exfiltração de dados. Um ator malicioso pode potencialmente criar uma tabela externa para uma conta de armazenamento e extrair grandes quantidades de dados. Pode controlar o acesso de saída ao nível do cluster ao definir políticas de nota de aviso. A gestão de políticas de nota de aviso permite-lhe permitir o acesso de saída a SQL, armazenamento ou outros pontos finais especificados.
Neste artigo, ficará a saber mais sobre uma extensão para políticas de nota de aviso que lhe permite restringir ainda mais as chamadas do cluster.
Tipos de políticas de nota de aviso
As políticas de nota de aviso podem ser divididas da seguinte forma:
- Políticas de nota de aviso imutáveis: estas são as políticas padrão de um cluster. Estão pré-configurados e não podem ser modificados.
- Políticas de nota de aviso de cluster: estas são políticas que pode modificar com comandos de política de nota de aviso.
Pré-requisitos
- Uma subscrição do Azure. Crie uma conta gratuita do Azure.
- Um cluster e uma base de dados do Azure Data Explorer. Criar um cluster e uma base de dados.
Executar comandos de política de nota de aviso
Inicie sessão na IU da Web do Azure Data Explorer.
No menu esquerdo, selecione Consulta e, em seguida, ligue-se ao cluster.
Na janela de consulta, execute a seguinte consulta para inspecionar a lista de políticas de nota de aviso imutáveis no cluster:
.show cluster policy callout
Segue-se um exemplo de políticas de nota de aviso imutáveis. Repare que na lista existem algumas regras predefinidas que permitem efetuar chamadas para outros serviços, como dados 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
}
]
Esvaziar a lista de políticas de nota de aviso imutáveis
Para restringir o acesso de saída a partir do cluster, tem de esvaziar a lista de políticas de nota de aviso imutáveis. Pode fazê-lo ao executar o seguinte comando com a CLI do Azure ou quaisquer outras ferramentas ao chamar as APIs do Azure Data Explorer.
Acione uma implementação do ARM com a CLI do Azure com um modelo arm atualizado:
Ficheiro de modelo arm de exemplo com o nome "template.json" com a propriedade restrictOutboundNetworkAccess definida como Ativado:
{ "$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", ... } } ... ] }
Chamada de exemplo com a CLI do Azure que se refere ao modelo acima.
# Replace the <...> placeholders with the correct values az deployment group create --name RestrictOutboundAccess --resource-group <resource group> --template-file ./template.json
Atualizar a propriedade do
restrictOutboundNetworkAccess
cluster remove todas as políticas imutáveis no cluster. Isto impede o início de chamadas para outros serviços, conforme mostrado no exemplo seguinte.Execute novamente o seguinte comando e verifique se devolve uma lista vazia:
.show cluster policy callout | where EntityType == "Cluster immutable policy"
Adicionar FQDNs às chamadas em condições restritas
Se quiser permitir o acesso de saída a um FQDN específico, pode adicioná-lo à lista do allowedFqdnList
cluster. Pode fazê-lo ao executar alterações ao modelo arm do cluster do Azure Data Explorer.
Acione uma implementação do ARM com a CLI do Azure com um modelo arm atualizado:
Exemplo de ficheiro de modelo do ARM com o nome "template.json" com a propriedade allowedFqdnList definida 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", "..."] ... } } ... ] }
Chamada de exemplo com a CLI do Azure que se refere ao modelo acima.
# Replace the <...> placeholders with the correct values az deployment group create --name ConfigureAllowedFqdnList --resource-group <resource group> --template-file ./template.json
Ao adicionar o FQDN à lista permitida, poderá fazer chamadas para o FQDN especificado. Pode verificar o resultado da implementação ao executar o seguinte comando:
.show cluster policy callout | project Policy=parse_json(Policy) | mv-expand Policy | where Policy.CalloutType == "sql"
Nota
Existe um conjunto de políticas predefinidas definidas para o Azure Data Explorer comunicar com a respetiva camada de armazenamento interna. Não expõem qualquer risco de exfiltração de dados.