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 dos dados. Um ator mal-intencionado poderia potencialmente criar uma tabela externa para uma conta de armazenamento e extrair grandes quantidades de dados. Você pode controlar o acesso de saída no nível do cluster definindo políticas de texto explicativo. Com o gerenciamento de políticas de texto explicativo, você pode permitir o acesso de saída a um SQL, armazenamento ou outros pontos de extremidade especificados.
Neste artigo, você aprenderá sobre uma extensão às políticas de texto explicativo que permite restringir ainda mais as saídas de chamadas do cluster.
Tipos de políticas de texto explicativo
As políticas de texto explicativo podem ser divididas da seguinte maneira:
- Políticas de texto explicativo imutáveis: são as políticas padrão de um cluster. Elas são pré-configuradas e não podem ser modificadas.
- Políticas de texto explicativo de cluster: são as políticas que você pode modificar usando os comandos de política de texto explicativo.
Pré-requisitos
- Uma assinatura do Azure. Criar uma conta gratuita do Azure.
- Um cluster e um banco de dados do Azure Data Explorer. Criar um cluster e um banco de dados.
Executar comandos de política de texto explicativo
Entre na interface do usuário da Web do Azure Data Explorer.
No menu à esquerda, selecione Consulta e conecte-se ao cluster.
Na janela de consulta, execute a seguinte consulta para inspecionar a lista de políticas de texto explicativo imutáveis no cluster:
.show cluster policy callout
O exemplo a seguir mostra um exemplo de políticas de texto explicativo imutáveis. Observe que na lista há algumas regras padrão que permitem fazer 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 texto explicativo imutáveis
Para restringir o acesso de saída do cluster, você precisa esvaziar a lista de políticas de texto explicativo imutáveis. Você pode fazer isso executando o comando a seguir usando a CLI do Azure ou qualquer outra ferramenta chamando as APIs do Azure Data Explorer.
Dispare uma implantação do ARM usando a CLI do Azure com um modelo do ARM atualizado:
Arquivo de exemplo do modelo do ARM chamado "template.json" com a propriedade restrictOutboundNetworkAccess definida como Habilitada:
{ "$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 usando 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
A atualização da propriedade de cluster
restrictOutboundNetworkAccess
remove todas as políticas imutáveis no cluster. Isso impede o início de chamadas para outros serviços, conforme mostrado no exemplo a seguir.Execute o seguinte comando novamente e verifique se ele retorna uma lista vazia:
.show cluster policy callout | where EntityType == "Cluster immutable policy"
Adicionar FQDNs aos textos explicativos sob condições restritas
Se você quiser permitir o acesso de saída a um FQDN específico, poderá adicioná-lo à lista allowedFqdnList
para seu cluster. Você pode fazer isso fazendo alterações no modelo do ARM do cluster do Azure Data Explorer.
Dispare uma implantação do ARM usando a CLI do Azure com um modelo do ARM atualizado:
Arquivo de exemplo do modelo do ARM chamado "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 usando 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 de permissões, você poderá fazer chamadas ao FQDN especificado. Você pode conferir o resultado da implantação executando o seguinte comando:
.show cluster policy callout | project Policy=parse_json(Policy) | mv-expand Policy | where Policy.CalloutType == "sql"
Observação
Há um conjunto de políticas padrão definidas para que o Azure Data Explorer se comunique com a camada de armazenamento interna dele. Elas não expõem nenhum risco de exfiltração dos dados.