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 }
É 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 }
- 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 propriedadeUSE_PRIVATELINK_ENDPOINT
no estágio e não pode modificar o estágio para definir a propriedadeUSE_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 propriedadeUSE_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 }
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.
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');
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.
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"
.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" }, }, }
Crie uma integração de armazenamento que especifique a função
STORAGE_AWS_ROLE_ARN
limitada e a propriedadeUSE_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;
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;
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);
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.