Partilhar via


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

Executar comandos de política de nota de aviso

  1. Inicie sessão na IU da Web do Azure Data Explorer.

  2. No menu esquerdo, selecione Consulta e, em seguida, ligue-se ao cluster.

  3. 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
    

    Captura de ecrã da página de consulta restrita a mostrar as políticas de nota de aviso imutáveis.

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.

  1. 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.

    Captura de ecrã da página de consulta restrita a mostrar um erro de políticas de nota de aviso imutável.

  2. Execute novamente o seguinte comando e verifique se devolve uma lista vazia:

    .show cluster policy callout 
    | where EntityType == "Cluster immutable policy"
    

    Captura de ecrã a mostrar a página de consulta restrita, sem políticas de nota de aviso imutáveis.

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.

  1. 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
    
  2. 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" 
    

    Captura de ecrã da página de consulta restrita a mostrar uma política de nota de aviso configurada.

    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.