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. Além disso, você pode usar o Google Cloud Private Service Connect 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.

Limitações

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

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

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

Uso de SQL

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.

Uso de Snowsight

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

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

  3. Siga as etapas para configurar um volume externo para o Google Cloud Storage 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 (Private Service Connect).

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