ID do Amazon Virtual Private Cloud para estágio externo, função externa e volume externo

Como parte do compromisso contínuo da Snowflake de aprimorar o controle sobre os dados que saem da Snowflake, estamos migrando nossos pontos de controle de saída para uma nova Amazon Virtual Private Cloud (VPC). Isso resultará em uma alteração no ID de VPC Amazon usado pelo Snowflake ao fazer conexões de saída para funções externas, estágios externos e volumes externos.

Nota

Os clientes que usam armazenamento compatível com Amazon S3 devem confirmar se têm alguma política que possa ser afetada por essa alteração e atualizar suas políticas de acordo.

Os clientes que filtram o tráfego que entra em seus gateways da API ou estágios S3 com base no ID de VPC publicado precisarão atualizar suas políticas para incluir o novo ID de VPC.

Para obter a lista completa de IDs de VPC que precisam ser incluídos na lista de permissões, os clientes devem executar a função SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO.

Mudança de comportamento

Antes da mudança:

A saída de SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO não contém a propriedade snowflake-egress-vpc-ids.

Após a mudança:

A saída da função SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO contém uma nova propriedade snowflake-egress-vpc-ids que inclui as propriedades filhas id, expires e purpose.

A saída da função é semelhante a:

{
  "snowflake-vpc-id": ["<existing VPC ID>"],
  "snowflake-egress-vpc-ids": [
    {
      "id": "<existing VPC ID>",
      "expires": "2025-03-01T00:00:00",
      "purpose": "generic"
    },
    {
      "id": "<new VPC ID>",
      "expires": "2025-03-01T00:00:00",
      "purpose": "generic"
    }
  ]
}

Os clientes devem examinar o campo id dentro da propriedade snowflake-egress-vpc-ids e observar os valores id marcados como "purpose":"generic". IDs generic são IDs VPC que precisarão ser listados para dar suporte à funcionalidade principal do Snowflake.

Essa alteração entrará em vigor na semana de 24 de fevereiro de 2025.

Nota

A função retorna uma lista de IDs de VPC: o ID de VPC usado no momento e o(s) novo(s) ID(s) de VPC. IDs de VPC de snowflake-vpc-id será duplicado em snowflake-egress-vpc-ids, mas marcado como "purpose":"generic". Todos os IDs de VPC com a finalidade genérica devem ser listados como permitidos nas políticas.

A propriedade expires especifica a data e a hora até as quais o ID de VPC associado tem a garantia de permanecer válido. Os clientes devem atualizar qualquer automação ou processo para consultar a função antes da data de expiração para garantir que tenham as informações mais recentes sobre IDs de VPC atuais.

IDs do VPC de saída são estáveis e suas datas de validade são automaticamente atualizadas e estendidas.

Embora a Snowflake possa precisar mudar IDs de VPC no futuro, não há planos de mudança antes de 31 de março de 2025. Essas informações servem principalmente para referência futura.

As seguintes alterações devem ser feitas para continuar a acessar os seguintes recursos do Snowflake:

Estágio e volumes externos:

Siga as instruções em Permissão para IDs do Virtual Private Cloud para especificar IDs de VPC para estágios externos ou volumes externos.

Funções externas:

Siga as instruções em Como proteger seu ponto de extremidade do Amazon API Gateway para especificar IDs de VPC para funções externas.

Linha do tempo

Estágio um:

A partir da semana de 24 de fevereiro de 2025, a função SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO será atualizada em todas as implantações do AWS para incluir os novos IDs de VPC de entrada no elemento snowflake-egress-vpc-ids. Os clientes podem começar a atualizar suas políticas do API Gateway e S3 para permitir a inclusão desses novos IDs de VPC.

Estágio dois:

A partir da semana de 9 de junho de 2025 (anteriormente 24 de maio de 2025), o Snowflake iniciará uma transição gradual para usar o novo VPCs para estágios externos, funções externas e volumes externos. Os clientes devem garantir que suas atualizações de política do S3 e do API Gateway sejam concluídas até essa data.

Perguntas frequentes

Como posso encontrar buckets S3 para estágios externos que podem ser afetados por essa alteração?

Usando a função ACCOUNTADMIN, execute a seguinte consulta para identificar os estágios externos que são afetados pela alteração:

USE ROLE ACCOUNTADMIN;

SELECT stage_url, stage_region, stage_owner, stage_catalog, stage_schema
  FROM SNOWFLAKE.ACCOUNT_USAGE.STAGES
  WHERE STARTSWITH(stage_url, 's3')
    AND stage_url IS NOT NULL
    AND deleted IS NULL;
Copy

Como posso encontrar API Gateways que podem ser afetados por essa mudança?

Usando a função ACCOUNTADMIN, execute a seguinte consulta para identificar os gateways S3 que são afetados pela alteração:

USE ROLE ACCOUNTADMIN;

SELECT function_name, function_definition, function_owner, function_catalog, function_schema
  FROM SNOWFLAKE.ACCOUNT_USAGE.FUNCTIONS
  WHERE function_language = 'EXTERNAL'
    AND function_definition ILIKE '%.execute-api.%.amazonaws.com%'
    AND deleted IS NULL;
Copy

Como posso encontrar buckets S3 para volumes externos que podem ser afetados por essa alteração?

Usando a função ACCOUNTADMIN, execute a seguinte consulta para identificar os buckets S3 que são afetados pela alteração:

use role accountadmin;

DECLARE
res1 RESULTSET;
res2 RESULTSET;
sql_vol VARCHAR;
rpt VARIANT;
rpt_int VARIANT;
BEGIN
  rpt := object_construct();
  sql_vol := 'SELECT PROPERTY, VALUE:"NAME"::VARCHAR as NAME, VALUE:"STORAGE_ALLOWED_LOCATIONS"::VARCHAR as S3_PATH FROM (
SELECT PARSE_JSON(T."property_value") AS VALUE, T."property" as PROPERTY
FROM TABLE(RESULT_SCAN(last_query_id())) T
WHERE T."property_type" = \'String\'
AND T."property" != \'ACTIVE\'
AND VALUE:"STORAGE_PROVIDER"=\'S3\')
;';
  show external volumes;
  LET c1 CURSOR FOR SELECT * FROM TABLE(RESULT_SCAN(last_query_id()));
  OPEN c1;
  FOR record IN c1 DO
    res1 := (execute immediate 'describe external volume ' || record."name");
    res2 := (execute immediate :sql_vol);
    rpt_int := object_construct();
    let c2 CURSOR for res2;
    open c2;
    for inner_record in c2 do
        rpt_int := object_insert( rpt_int, inner_record.NAME, inner_record.S3_PATH);
    end for;

    rpt := object_insert( rpt, record."name", rpt_int );
  END FOR;
  RETURN rpt;
END;
Copy

Como posso encontrar as políticas do AWS que podem conter o ID de VPC Snowflake atual?

Para identificar as políticas potencialmente afetadas pela alteração, use o AWS CLI.

  1. Execute o comando SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO e observe o ID de VPC retornado em snowflake-vpc-id.

  2. Execute o script a seguir para listar de ARNs de políticas IAM e os IDs da API de API Gateways que contêm políticas de recursos com o ID VPC Snowflake atual. Observe que a execução do script pode levar algum tempo.

  3. Analise as políticas listadas e determine quais precisam ser atualizadas para incluir ID(s) de VPC adicional(is), conforme as instruções acima.

SNOWFLAKE_VPC_ID="<VPC ID returned in snowflake-vpc-id>"

# List ARNs of IAM policies that contain the current Snowflake VPC ID.
aws iam list-policies --scope Local --query 'Policies[*].Arn' --output text | tr '\t' '\n' | while read -r policy_arn; do
  version_id=$(aws iam get-policy --policy-arn "${policy_arn}" --query 'Policy.DefaultVersionId' --output text)
  aws iam get-policy-version --policy-arn "${policy_arn}" --version-id "${version_id}" | grep -q "${SNOWFLAKE_VPC_ID}" && echo "${policy_arn}"
done

# List API IDs of API Gateways that contain resource policies with the current Snowflake VPC ID.
aws apigateway get-rest-apis --query 'items[*].id' --output text --profile | tr '\t' '\n' | while read -r api_id; do
  aws apigateway get-rest-api --rest-api-id "${api_id}" --query 'policy' --output text | grep -q "${SNOWFLAKE_VPC_ID}" && echo "${api_id}"
done
Copy

Ref: 1910