Conectividade privada com volumes externos para Google Cloud

Este tópico descreve como configurar a conectividade privada de saída para um volume externo no Google Cloud Storage (GCS). 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 Google Cloud Storage passa pela rede interna do Google Cloud. 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

Você pode usar o Google Cloud Private Service Connect 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.

Limitações

A conectividade privada de saída para volumes do Google Cloud Storage não aceita buckets multirregionais.

Especificar a conectividade privada para um volume externo

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, conforme mostrado nos exemplos a seguir.

Use a seguinte sintaxe para criar um volume externo:

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

Use a seguinte sintaxe para alterar um volume externo que já existe:

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.

Provisionar um ponto de extremidade privado

Siga as etapas a seguir para provisionar um ponto de extremidade privado para seu volume do Google Cloud Storage:

  1. No Snowflake, chame a função de sistema SYSTEM$PROVISION_PRIVATELINK_ENDPOINT. Forneça como argumentos um ponto de extremidade regional da API Storage e o nome do host. Por exemplo:

    USE ROLE ACCOUNTADMIN;
    
    SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
      'storage.us-east4.rep.googleapis.com',
      'storage.us-east4.rep.googleapis.com');
    
    Copy

    Nota

    O Snowflake oferece suporte apenas aos pontos de extremidade regionais da API Storage do Google Cloud. Os buckets multirregionais do|google-cloud| não são compatíveis.

    Use SYSTEM$PROVISION_PRIVATELINK_ENDPOINT para provisionar um ponto de extremidade privado no Snowflake VNet para que o Snowflake possa se conectar ao Google Cloud Storage externo pela conectividade privada. Somente os buckets referenciados por um volume externo com a propriedade USE_PRIVATELINK_ENDPOINT ativada podem ser acessados usando o ponto de extremidade.

  2. No Snowflake, chame a função SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO.

    Se a saída de SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO 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".

Configuração de acesso ao volume externo

Siga as etapas a seguir para configurar a conectividade privada com seu volume de armazenamento externo:

  1. Crie o volume externo e defina a propriedade USE_PRIVATELINK_ENDPOINT como TRUE. Por exemplo:

    CREATE EXTERNAL VOLUME external_volume
      STORAGE_LOCATIONS =
      (
        (
          NAME = 'my-gcs-loc'
          STORAGE_PROVIDER = 'gcs'
          STORAGE_BASE_URL =  'gcs://<bucket>/<prefix>/'
          USE_PRIVATELINK_ENDPOINT = true
        )
      )
      ALLOW_WRITES=true;
    
    Copy
  2. 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
  3. Depois que o ponto de extremidade privado tiver o status APPROVED, teste o descarregamento de dados do Snowflake para o volume externo.

Desativação da conectividade privada

Se você não precisar mais de conectividade privada para o volume externo, poderá definir a propriedade USE_PRIVATELINK_ENDPOINT do volume como FALSEe, em seguida, chamar a função do sistema SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT para desprovisionar o ponto de extremidade. Por exemplo:

ALTER EXTERNAL VOLUME <ext_volume_name>
  UPDATE STORAGE_LOCATION = '<storage_location_name>'
  USE_PRIVATELINK_ENDPOINT = false;

SELECT SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT('storage.us-east4.rep.googleapis.com');
Copy