Pontos de extremidade privados do Azure para estágios internos

Este tópico fornece conceitos e instruções detalhadas para conexão com estágios internos do Snowflake através de pontos de extremidade privados do Microsoft Azure.

Neste tópico:

Visão geral

Pontos de extremidade privados do Azure e o Azure Private Link podem ser combinados para fornecer conectividade segura aos estágios internos do Snowflake. Esta configuração garante que as operações de carregamento e descarregamento de dados para os estágios internos do Snowflake utilizem a rede interna do Azure e não ocorram através da Internet pública.

Antes de a Microsoft oferecer suporte a pontos de extremidade privados para acesso a estágios internos, era necessário criar um farm proxy dentro do Azure VNet para facilitar o acesso seguro aos estágios internos do Snowflake. Com o suporte adicional de pontos de extremidade privados para os estágios internos do Snowflake, usuários e aplicativos clientes agora podem acessar os estágios internos do Snowflake através da rede privada Azure. O diagrama a seguir resume este novo suporte:

Connect to internal stage using Azure Private Link

Observe o seguinte em relação aos números no diagrama BEFORE:

  • Os usuários têm duas opções para se conectar a um estágio interno do Snowflake:

    • A opção A permite uma conexão no local diretamente ao estágio interno, como mostra o número 1.

    • A opção B permite uma conexão com o estágio interno através de um farm proxy, como mostrado pelos números 2 e 3.

  • Se o farm proxy for usado, os usuários também podem se conectar diretamente ao Snowflake, como indicado pelo número 4.

Observe o seguinte em relação aos números no diagrama AFTER:

  • Para maior clareza, o diagrama mostra um único ponto de extremidade privado de um Azure VNet apontando para um único estágio interno do Snowflake (6 e 7).

    Observe que é possível configurar vários pontos de extremidade privados, cada um dentro de um VNet diferente, que apontam para o mesmo estágio interno do Snowflake.

  • As atualizações neste recurso eliminam a necessidade de conectar ao Snowflake ou a um estágio interno do Snowflake através de um farm proxy.

  • Um usuário no local pode se conectar diretamente ao Snowflake, como mostrado no número 5.

  • Para conectar-se a um estágio interno do Snowflake, o usuário no local se conecta a um ponto de extremidade privado, número 6, e então usa o Azure Private Link para conectar-se ao estágio interno do Snowflake, como mostrado no número 7.

No Azure, cada conta Snowflake tem uma conta de armazenamento dedicada a ser usada como um estágio interno. Os URIs de conta de armazenamento são diferentes dependendo se a conexão à conta de armazenamento utiliza conectividade privada (ou seja, Azure Private Link). A URL de conectividade privada inclui um segmento privatelink na URL.

URI da conta de armazenamento público

<nome_da_conta_de_armazenamento>.blob.core.windows.net

URI da conta de armazenamento de conectividade privada

<nome_da_conta_de_armazenamento>.privatelink.blob.core.windows.net

Benefícios

A implementação de pontos de extremidade privados para acessar os estágios internos do Snowflake oferece as seguintes vantagens:

  • Os dados do estágio interno não atravessam a Internet pública.

  • Aplicativos clientes e SaaS, tais como Microsoft PowerBI, que funcionam fora do Azure VNet, podem se conectar ao Snowflake com segurança.

  • Os administradores não são obrigados a modificar as configurações do firewall para acessar os dados do estágio interno.

  • Os administradores podem implementar segurança e monitoramento consistentes sobre como os usuários se conectam às contas de armazenamento.

Limitações

Um único ponto de extremidade privado pode se comunicar com um único ponto de extremidade do servidor Snowflake. Esta configuração um a um é uma limitação do Microsoft Azure, não uma limitação do Snowflake. Note que você pode ter múltiplas configurações um a um que se conectam ao mesmo estágio interno do Snowflake.

Configuração de pontos de extremidade privados para acesso aos estágios internos do Snowflake

Para configurar pontos de extremidade privados para acessar os estágios internos do Snowflake, é necessário ter o suporte das três seguintes funções em sua organização:

  1. O administrador da conta Snowflake (ou seja, um usuário com a função do sistema Snowflake ACCOUNTADMIN).

  2. O administrador do Microsoft Azure.

  3. O administrador da rede.

Dependendo da organização, pode ser necessário coordenar os esforços de configuração com mais de uma pessoa ou equipe para implementar as seguintes etapas de configuração.

Complete as seguintes etapas para configurar e implementar o acesso seguro aos estágios internos do Snowflake através de pontos de extremidade privados do Azure:

  1. Verifique se sua assinatura Azure está registrada junto ao gerente de recursos do Azure Storage. Esta etapa permite a conexão com o estágio interno a partir de um ponto de extremidade privado.

  2. Como administrador de conta Snowflake, execute as seguintes instruções em sua conta Snowflake e registre o ResourceID da conta de armazenamento do estágio interno definido pela chave privatelink_internal_stage. Para obter mais informações, consulte ENABLE_INTERNAL_STAGES_PRIVATELINK e SYSTEM$GET_PRIVATELINK_CONFIG.

    use role accountadmin;
    alter account set ENABLE_INTERNAL_STAGES_PRIVATELINK = true;
    select key, value from table(flatten(input=>parse_json(system$get_privatelink_config())));
    
    Copy
  3. Como administrador do Azure, crie um ponto de extremidade privado através do portal Azure.

    Veja as propriedades do ponto de extremidade privado e registre o valor da ID do recurso. Este valor será o valor privateEndpointResourceID na próxima etapa.

    Verifique se o valor Target sub-resource está definido para blob.

    Para obter mais informações, consulte a documentação do Microsoft Azure Private Link.

  4. Como administrador do Snowflake, chame a função SYSTEM$AUTHORIZE_STAGE_PRIVATELINK_ACCESS usando o valor privateEndpointResourceID como argumento da função. Esta etapa autoriza o acesso ao estágio interno do Snowflake através do ponto de extremidade privado.

    use role accountadmin;
    select system$authorize_stage_privatelink_access('<privateEndpointResourceID>');
    
    Copy

    Se necessário, complete estas etapas para revogar o acesso ao estágio interno.

  5. Como administrador da rede, atualize as configurações de DNS para resolver as URLs como a seguir:

    <nome_da_conta_de_armazenamento>.blob.core.windows.net a <nome_da_conta_de_armazenamento>.privatelink.blob.core.windows.net

    Ao utilizar uma zona privada DNS em uma zona Azure VNet, crie o registro de alias para <nome_da_conta_de_armazenamento>.privatelink.blob.core.windows.net.

    Para obter mais informações, consulte Configuração de DNS dos pontos de extremidade privados do Azure.

    Dica

    • Use uma conta Snowflake separada para testes e configure uma zona DNS privada em um VNet de teste para testar o recurso de forma que o teste seja isolado e não tenha impacto em suas outras cargas de trabalho.

    • Se não for possível usar uma conta Snowflake separada, use um usuário de teste para acessar o Snowflake a partir de um VPC de teste onde as alterações DNS são feitas.

    • Para testar a partir de aplicativos no local, use o encaminhamento de DNS para encaminhar solicitações para o DNS privado do Azure no VNet onde as configurações de DNS são feitas. Execute o seguinte comando da máquina cliente para verificar se o endereço IP retornado é o endereço IP privado para a conta de armazenamento:

      dig <storage_account_name>.blob.core.windows.net
      
      Copy

Bloqueio do acesso público (opcional)

Depois de configurar pontos de extremidade privados para acessar o estágio interno por meio do Azure Private Link, você poderá, opcionalmente, bloquear solicitações de endereços IP públicos para o estágio interno. Depois que o acesso público for bloqueado, todo o tráfego deverá passar pelo ponto de extremidade privado.

Controlar o acesso público a um estágio interno do Azure é diferente de controlar o acesso público ao serviço Snowflake. Você usa a função SYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESS, e não uma política de redes, para bloquear solicitações para o estágio interno. Ao contrário das políticas de redes, esta função não pode bloquear alguns endereços IP públicos enquanto permite outros. Quando você chama SYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESS, todos os endereços IP públicos são bloqueados.

Importante

Confirme se o tráfego por meio de conectividade privada está alcançando o estágio interno antes de bloquear o acesso público. Bloquear o acesso público sem configurar a conectividade privada pode causar interrupções não intencionais, incluindo interferência com serviços geridos como o Azure Data Factory.

A função SYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESS impõe suas restrições alterando as configurações Networking da conta de armazenamento do Azure onde o estágio interno está localizado. Estas configurações do Azure são normalmente referidas como «configurações de firewall da conta de armazenamento». A execução da função Snowflake faz o seguinte no Azure:

  • Define o campo Public network access como Enabled from selected virtual networks and IP addresses.

  • Adiciona IDs de sub-rede VNet do Snowflake à seção Virtual Networks.

  • Limpa todos os endereços IP da seção Firewall.

Para bloquear todo o tráfego de endereços IP públicos para o estágio interno, execute:

SELECT SYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESS();
Copy

A função pode levar alguns minutos para terminar a execução.

Como garantir que o acesso público seja bloqueado

Você pode determinar se endereços IP públicos podem acessar um estágio interno executando a função SYSTEM$INTERNAL_STAGES_PUBLIC_ACCESS_STATUS.

Se as configurações do Azure estiverem bloqueando todo o tráfego público, a função retornará Public Access to internal stages is blocked. Isso verifica se as configurações não foram alteradas desde que a função SYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESS foi executada.

Se pelo menos alguns endereços IP públicos puderem acessar o estágio interno, a função retornará Public Access to internal stages is unblocked.

Desbloqueio do acesso público

Você pode executar a função SYSTEM$UNBLOCK_INTERNAL_STAGES_PUBLIC_ACCESS para permitir o acesso público a um estágio interno que foi bloqueado anteriormente.

A execução da função altera as configurações Networking da conta de armazenamento do Azure onde o estágio interno está localizado. Ela define o campo Public network access do Azure como Enabled from all networks.

Revogação de pontos de extremidade privados para acesso aos estágios internos do Snowflake

Complete as seguintes etapas para revogar o acesso aos estágios internos do Snowflake através de pontos de extremidade privados do Microsoft Azure:

  1. Como administrador do Snowflake, defina o parâmetro ENABLE_INTERNAL_STAGES_PRIVATELINK para FALSE e chame a função SYSTEM$REVOKE_STAGE_PRIVATELINK_ACCESS para revogar o acesso ao ponto de extremidade privado, usando o mesmo valor privateEndpointResourceID que foi usado para autorizar originalmente o acesso ao ponto de extremidade privado.

    use role accountadmin;
    alter account set enable_internal_stages_privatelink = false;
    select system$revoke_stage_privatelink_access('<privateEndpointResourceID>');
    
    Copy
  2. Como administrador do Azure, exclua o ponto de extremidade privado através do portal Azure.

  3. Como administrador de rede, remova os registros de DNS e alias que foram usados para resolver as URLs da conta de armazenamento.

Neste ponto, o acesso ao ponto de extremidade privado está revogado e a consulta resultante da chamada à função SYSTEM$GET_PRIVATELINK_CONFIG não deve retornar a chave privatelink_internal_stage e seu valor.

Solução de problemas

Aplicativos Azure que acessam os estágios do Snowflake através da Internet pública e também utilizam um serviço privado DNS para resolver nomes de hosts de serviço não podem acessar os estágios do Snowflake se for estabelecida uma conexão de ponto de extremidade privado para o estágio, conforme descrito neste tópico.

Uma vez criada uma conexão de ponto de extremidade privado, o Microsoft Azure cria automaticamente um registro CNAME no serviço público DNS que indica o host da conta de armazenamento para sua contraparte do Azure Private Link (ou seja, .privatelink.blob.core.windows.net). Se algum aplicativo tiver configurado uma região DNS privada para o mesmo domínio, então o Microsoft Azure tenta resolver o host da conta de armazenamento consultando o serviço privado DNS. Se a entrada para a conta de armazenamento não for encontrada no serviço privado DNS, ocorre um erro de conexão.

Há duas opções para resolver este problema:

  1. Remover ou dissociar a região privada DNS do aplicativo.

  2. Criar um registro CNAME para o nome de host privado da conta de armazenamento (ou seja, <nome_da_conta_de_armazenamento>.privatelink.blob.core.windows.net) no serviço privado DNS e apontar para o nome de host especificado pela saída deste comando:

    dig CNAME <storage_account_name>.privatelink.blob.core.windows.net
    
    Copy