Conectividade privada com volumes externos para Amazon Web Services

Este tópico fornece os detalhes de configuração para definir a conectividade privada de saída para um volume externo no AWS. A principal diferença entre a conectividade pública de saída e a conectividade privada de saída é como você define a propriedade USE_PRIVATELINK_ENDPOINT para o volume externo.

Quando o volume externo está configurado para usar a conectividade privada, sua conexão com o serviço de armazenamento em nuvem AWS passa pela rede interna AWS. Ao configurar o volume externo para usar a conectividade privada de saída, você acrescenta segurança adicional às operações de descarregamento de dados, bloqueando o acesso público à conta de armazenamento.

Para obter mais informações sobre o uso de volumes externos para se conectar ao armazenamento em nuvem externo para tabelas Iceberg, consulte Configuração de um volume externo.

Nota

É possível usar o AWS PrivateLink para acessar tabelas Iceberg gerenciadas pelo Snowflake e tabelas Iceberg que usam uma integração de catálogo para armazenamento de objetos. Além disso, você pode usar o AWS PrivateLink para acessar tabelas Iceberg gerenciadas externamente e criadas usando os arquivos Delta no armazenamento de objetos.

Custos de conectividade privada de saída

Você paga por cada ponto de extremidade de conectividade privada, juntamente com o total de dados processados. Para ver o preço desses itens, consulte a Tabela de consumo do serviço Snowflake.

Você pode explorar o custo desses itens filtrando os seguintes tipos de serviço ao consultar as exibições de faturamento nos esquemas ACCOUNT_USAGE e ORGANIZATION_USAGE:

  • OUTBOUND_PRIVATELINK_ENDPOINT

  • OUTBOUND_PRIVATELINK_DATA_PROCESSED

Por exemplo, você pode consultar a exibição USAGE_IN_CURRENCY_DAILY e filtrar por esses tipos de serviço.

Considerações

É possível configurar a conectividade pública de saída e a conectividade privada de saída para o mesmo serviço de armazenamento em nuvem. Se quiser fazer isso, crie um volume externo dedicado para a conectividade pública de saída e especifique USE_PRIVATELINK_ENDPOINT = FALSE.

Configurar a conectividade privada de saída com um volume externo

Para configurar a conectividade privada de saída com um volume externo, você pode usar o SQL ou usar o Snowsight.

Uso de SQL

Atualizações de sintaxe

A propriedade USE_PRIVATELINK_ENDPOINT de um volume externo determina se ele é acessado por meio de conectividade privada ou atravessando a rede pública. Para usar a conectividade privada, defina USE_PRIVATELINK_ENDPOINT = TRUE ao criar ou modificar um volume externo.

A nova sintaxe para CREATE EXTERNAL VOLUME e ALTER EXTERNAL VOLUME é a seguinte:

CREATE OR REPLACE EXTERNAL VOLUME <ext_volume_name>
  STORAGE_LOCATIONS =
  (
    (
      NAME = 'my-s3-loc'
      STORAGE_PROVIDER = 's3'
      STORAGE_BASE_URL = 's3://<bucket>[/<path>/]'
      STORAGE_AWS_ROLE_ARN = '<iam_role>'
      USE_PRIVATELINK_ENDPOINT = [ TRUE | FALSE ]
    )
  )
  ALLOW_WRITES=true;

ALTER EXTERNAL VOLUME <ext_volume_name>
  UPDATE STORAGE_LOCATION = '<storage_location_name>'
  USE_PRIVATELINK_ENDPOINT = [ TRUE | FALSE ];
Copy

O comando DESCRIBE EXTERNAL VOLUME inclui a propriedade USE_PRIVATELINK_ENDPOINT e seu valor.

Configuração de acesso ao volume externo

Siga as etapas a seguir para usar a conectividade privada de saída e descarregar dados em um volume externo no AWS:

  1. Chame a função do sistema SYSTEM$PROVISION_PRIVATELINK_ENDPOINT para provisionar um ponto de extremidade privado em Snowflake VNet para permitir que o Snowflake se conecte ao armazenamento em nuvem externo AWS por meio de conectividade privada.

    Conforme demonstrado no exemplo a seguir, é necessário usar um caractere curinga (*) em vez de especificar um bucket S3 individual do AWS. O uso do curinga não significa que todos os buckets S3 sejam acessados por meio de uma conexão privada. Somente os buckets referenciados por um volume externo que tenha o parâmetro USE_PRIVATELINK_ENDPOINT ativado podem ser acessados por meio do ponto de extremidade.

    USE ROLE ACCOUNTADMIN;
    
    SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
        'com.amazonaws.us-west-2.s3',
        '*.s3.us-west-2.amazonaws.com');
    
    Copy

    Esta função vincula o ponto de extremidade privado ao nome de host, o que permite que o volume externo use o ponto de extremidade privado para se conectar ao local de armazenamento, desde que o AWS PrivateLink esteja ativado no objeto.

  2. Chame a função SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO.

    Quando a saída da função incluir "status": "APPROVED, sua conexão do Snowflake com a conta de armazenamento poderá usar a conectividade privada.

    É possível continuar com as próximas etapas enquanto aguarda o status "APPROVED".

  3. Crie o volume externo, certificando-se de definir a propriedade USE_PRIVATELINK_ENDPOINT como TRUE. Por exemplo:

    CREATE EXTERNAL VOLUME external_volume
      STORAGE_LOCATIONS =
        (
          (
            NAME = 'my-s3-loc'
            STORAGE_PROVIDER = 's3'
            STORAGE_BASE_URL = 's3://bucketinuswest2/'
            STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::001234567890:role/myrole'
            USE_PRIVATELINK_ENDPOINT = TRUE
          )
        )
      ALLOW_WRITES=TRUE;
    
    Copy
  4. Use o comando CREATE ICEBERG TABLE para criar uma tabela Iceberg que faça referência ao volume externo. Por exemplo:

    CREATE ICEBERG TABLE rand_table (data string)
      BASE_LOCATION='table'
      EXTERNAL_VOLUME=external_volume
      CATALOG='snowflake';
    
    Copy
  5. Depois que o ponto de extremidade privado tiver um status "APPROVED", teste o descarregamento de dados Snowflake para o volume externo.

Uso de Snowsight

Para configurar o acesso ao volume externo usando a conectividade privada no Snowsight, siga estas etapas:

  1. Chame a função do sistema SYSTEM$PROVISION_PRIVATELINK_ENDPOINT para provisionar um ponto de extremidade privado em Snowflake VNet para permitir que o Snowflake se conecte ao armazenamento em nuvem externo AWS por meio de conectividade privada.

    Conforme demonstrado no exemplo a seguir, é necessário usar um caractere curinga (*) em vez de especificar um bucket S3 individual do AWS. O uso do curinga não significa que todos os buckets S3 sejam acessados por meio de uma conexão privada. Somente os buckets referenciados por um volume externo que tenha o parâmetro USE_PRIVATELINK_ENDPOINT ativado podem ser acessados por meio do ponto de extremidade.

    USE ROLE ACCOUNTADMIN;
    
    SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
        'com.amazonaws.us-west-2.s3',
        '*.s3.us-west-2.amazonaws.com');
    
    Copy

    Esta função vincula o ponto de extremidade privado ao nome de host, o que permite que o volume externo use o ponto de extremidade privado para se conectar ao local de armazenamento, desde que o AWS PrivateLink esteja ativado no objeto.

  2. Chame a função SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO.

    Quando a saída da função incluir "status": "APPROVED, sua conexão do Snowflake com a conta de armazenamento poderá usar a conectividade privada.

    É possível continuar com as próximas etapas enquanto aguarda o status "APPROVED".

  3. Siga as etapas para criar um volume externo para o S3 usando o Snowsight e habilite a conectividade privada ao configurar o volume externo.

    Importante

    Para habilitar a conectividade privada, na página Configure external volume, no campo Connectivity, você deve selecionar Private (Azure Private Endpoint).

  4. Use o comando CREATE ICEBERG TABLE para criar uma tabela Iceberg que faça referência ao volume externo. Por exemplo:

    CREATE ICEBERG TABLE rand_table (data string)
      BASE_LOCATION='table'
      EXTERNAL_VOLUME=external_volume
      CATALOG='snowflake';
    
    Copy
  5. Depois que o ponto de extremidade privado tiver um status "APPROVED", teste o descarregamento de dados Snowflake para o volume externo.

Desprovisionamento de um ponto de extremidade

Se você não precisar mais do ponto de extremidade de conectividade privada para o volume externo, desmarque a propriedade USE_PRIVATELINK_ENDPOINT no volume externo e, em seguida, chame a função de sistema SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT.