Conectividade privada AWS com estágios externos

Este tópico fornece detalhes de configuração para definir a conectividade privada de saída para um estágio externo no AWS. A principal diferença entre a conectividade pública de saída e a conectividade privada de saída é como você configura a integração ou o estágio de armazenamento. Por exemplo, é possível especificar a propriedade USE_PRIVATELINK_ENDPOINT para a integração de armazenamento e, em seguida, fazer referência a essa integração de armazenamento no estágio externo. O estágio externo herda a configuração do ponto de extremidade privado da integração de armazenamento. Posteriormente, sua conexão com o estágio S3 do AWS passa pela rede interna do AWS. Ao configurar a integração e o estágio de armazenamento 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.

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 a mesma conta de armazenamento. Se quiser fazer isso, crie uma integração de armazenamento dedicada para a conectividade pública de saída e especifique USE_PRIVATELINK_ENDPOINT = FALSE.

Atualizações de sintaxe

Integração de armazenamento

É possível especificar a propriedade USE_PRIVATELINK_ENDPOINT ao criar uma integração de armazenamento que tenha um ou mais locais:

CREATE OR REPLACE STORAGE INTEGRATION my_int
  ...
  USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }
Copy

É possível modificar uma integração de armazenamento e definir a propriedade USE_PRIVATELINK_ENDPOINT:

ALTER STORAGE INTEGRATION my_int
  SET USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }
Copy
Estágios externos

Um estágio que faz referência a uma integração de armazenamento que especifica a propriedade USE_PRIVATELINK_ENDPOINT herda a configuração do ponto de extremidade privado. Como resultado, você não precisa especificar a propriedade USE_PRIVATELINK_ENDPOINT no estágio e não pode modificar o estágio para definir a propriedade USE_PRIVATELINK_ENDPOINT.

Se você estiver usando a propriedade CREDENTIALS do estágio em vez de fazer referência a uma integração de armazenamento, precisará especificar a propriedade USE_PRIVATELINK_ENDPOINT ao criar ou modificar o estágio.

CREATE OR REPLACE STAGE my_sas_private_stage
  URL = '...'
  CREDENTIALS=(AWS_KEY_ID='1a2b3c' AWS_SECRET_KEY='4x5y6z')
  USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }

ALTER STAGE my_sas_private_stage
  SET USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }
Copy

O comando DESCRIBE STAGE inclui a propriedade USE_PRIVATELINK_ENDPOINT e seu valor.

Configuração do acesso ao estágio externo

Essas etapas são exclusivas do uso da conectividade privada de saída com uma integração de armazenamento para descarregar dados em um estágio externo no AWS. Você precisará modificar o fluxo se estiver usando a propriedade CREDENTIALS do estágio em vez de fazer referência a uma integração de armazenamento.

  1. No Snowflake, chame a função de sistema SYSTEM$PROVISION_PRIVATELINK_ENDPOINT para provisionar um ponto de extremidade de conectividade privada em sua VNet Snowflake para permitir que o Snowflake se conecte ao seu armazenamento externo S3 do AWS usando 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 estágio externo configurado para conectividade privada podem ser acessados por meio do ponto de extremidade da VPC.

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

    Essa função vincula o ponto de extremidade privado ao nome do host, o que permite que a integração de armazenamento use o ponto de extremidade privado para se conectar ao local de armazenamento.

  2. No Snowflake, 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 conectividade privada (depois que os outros objetos Snowflake necessários estiverem habilitados para conectividade privada de saída).

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

  3. Restrinja o acesso ao bucket S3 para acessar somente pelo ponto de extremidade da VPC atualizando a política do bucket com o seguinte.

    {
      "Sid": "Access-to-specific-VPCE-only",
      "Effect": "Deny",
      "Principal": {
        "AWS": "arn:aws:iam::001234567890:role/myrole"
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::mybucket1",
        "arn:aws:s3:::mybucket1/*"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": "vpce-01c31eb5f4a1e817d"
        },
      },
    }
    
    Copy
  4. Crie uma integração de armazenamento que especifique a função STORAGE_AWS_ROLE_ARN limitada e a propriedade USE_PRIVATELINK_ENDPOINT:

    CREATE OR REPLACE STORAGE INTEGRATION outbound_private_link_int
      TYPE = EXTERNAL_STAGE
      STORAGE_PROVIDER = 'S3'
      STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::001234567890:role/myrole'
      STORAGE_ALLOWED_LOCATIONS = ('s3://mybucket1/path1/');
      USE_PRIVATELINK_ENDPOINT = TRUE
      ENABLED = TRUE;
    
    Copy
  5. Crie um estágio externo que faça referência à integração de armazenamento:

    CREATE OR REPLACE STAGE my_storage_private_stage
      URL = 's3://mybucket1/path1/'
      STORAGE_INTEGRATION = outbound_private_link_int;
    
    Copy
  6. Depois que o ponto de extremidade privado tiver o status «APPROVED», teste o descarregamento de dados Snowflake para o estágio externo:

    COPY INTO @my_storage_private_stage
      FROM mytable
      FILE_FORMAT = (FORMAT_NAME = my_csv_format);
    
    Copy
  7. Visualize o resultado em seu estágio AWS.

Desprovisionamento de um ponto de extremidade

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