Conectividade privada com volumes externos para AWS

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. Atualmente, você não pode usar a conectividade privada para acessar as tabelas Iceberg que usam outras integrações de catálogo.

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.

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.

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.