ID Amazon Virtual Private Cloud pour la zone de préparation externe, la fonction externe et le volume externe

Dans le cadre de l’engagement continu de Snowflake à améliorer le contrôle des données quittant Snowflake, nous migrons nos points de contrôle de sortie vers un nouveau Virtual Private Cloud Amazon (VPC). Cela entraînera une modification de l’ID Amazon VPC utilisé par Snowflake lors de l’établissement de connexions sortantes pour les fonctions externes, les zones de préparation externes et les volumes externes.

Note

Les clients qui utilisent le stockage compatible Amazon S3 doivent vérifier s’ils ont des politiques susceptibles d’être affectées par ce changement, et mettre à jour leurs politiques en conséquence.

Les clients qui filtrent le trafic entrant dans leurs API Gateways ou leurs zones de préparation S3 sur la base de l’ID VPC publié, devront mettre à jour leurs politiques pour inclure la nouvelle version de l’ID VPC.

Pour obtenir la liste complète des IDs VPC qui doivent être mis sur liste d’autorisation, les clients doivent exécuter la fonction SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO.

Modification de comportement

Avant la modification:

La sortie de SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO ne contient pas la propriété snowflake-egress-vpc-ids.

Après la modification:

La sortie de la fonction SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO contient une nouvelle propriété snowflake-egress-vpc-ids qui comprend les propriétés enfants id, expires et purpose.

La sortie de la fonction ressemble à :

{
  "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"
    }
  ]
}

Les clients doivent examiner le champ id dans la propriété snowflake-egress-vpc-ids et noter que les valeurs id marquées comme IDs "purpose":"generic". generic sont des IDs VPC qui devront être autorisés pour prendre en charge la fonctionnalité principale de Snowflake.

Cette modification entrera en vigueur au cours de la semaine du 24 février 2025.

Note

La fonction renvoie une liste d’IDs VPC : l’ID VPC actuellement utilisés et les nouveaux ID(s) VPC. Les IDs VPC de snowflake-vpc-id seront dupliqués dans snowflake-egress-vpc-ids mais marqués comme "purpose":"generic". Tous les IDs VPC ayant un objectif générique doivent être autorisés dans les politiques.

La propriété expires spécifie la date et l’heure jusqu’à laquelle la validité de l’ID VPC associé est garantie. Les clients doivent mettre à jour toute automatisation ou tout processus de requête de la fonction avant la date d’expiration afin de s’assurer qu’ils disposent des dernières informations sur les IDs VPC.

Les IDs VPC de sortie sont stables et leurs dates d’expiration sont automatiquement mises à jour et prolongées.

Il est possible que Snowflake change les IDs VPC à l’avenir, mais pas avant le 31 mars 2025. Cette information est principalement fournie à titre de référence ultérieure.

Les modifications suivantes doivent être apportées pour continuer à accéder aux fonctions suivantes de Snowflake :

Zone de préparation externe et volumes:

Suivez les instructions de Autoriser les IDs Virtual Private Cloud pour spécifier des IDs VPC pour les zones de préparation externe ou les volumes externes.

Fonctions externes:

Suivez les instructions de Sécurisez votre point de terminaison de l’API Gateway Amazon pour spécifier des IDs VPC pour les fonctions externes.

Chronologie

Première zone de préparation:

À partir de la semaine du 24 février 2025, la fonction SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO sera mise à jour dans tous les déploiements AWS pour inclure les nouveaux IDs VPC de sortie sous l’élément snowflake-egress-vpc-ids. Les clients peuvent commencer à mettre à jour leurs politiques S3 et l’API Gateway pour autoriser ces nouveaux IDs VPC.

Deuxième zone de préparation:

À partir de la semaine du 9 juin 2025 (contre le 24 mai 2025 auparavant), Snowflake entamera une transition progressive vers l’utilisation des nouveaux VPCs pour les zones de préparation externe, les fonctions externes et les volumes externes. Les clients doivent s’assurer que les mises à jour de leurs politiques pour S3 et l’API Gateway sont terminées à cette date.

Questions fréquemment posées

Comment identifier les compartiments S3 pour les zones de préparation externe qui peuvent être impactés par ce changement ?

En utilisant le rôle ACCOUNTADMIN, exécutez la requête suivante pour identifier les zones de préparation externes affectées par la modification :

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

Comment identifier les API Gateways qui peuvent être affectées par ce changement ?

À l’aide du rôle ACCOUNTADMIN, exécutez la requête suivante pour identifier les passerelles S3 concernées par la modification :

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

Comment identifier les compartiments S3 pour le volume externe qui peuvent être impactés par ce changement ?

À l’aide du rôle ACCOUNTADMIN, exécutez la requête suivante pour identifier les compartiments S3 concernés par la modification :

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

Comment identifier les politiques AWS qui peuvent contenir l’ID VPC actuel de Snowflake ?

Pour identifier les politiques potentiellement affectées par le changement, utilisez AWS CLI.

  1. Exécutez la commande SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO et notez l’ID VPC renvoyé dans Snowflake-vpc-id.

  2. Exécutez le script suivant pour dresser la liste des politiques ARNs de IAM et des IDs d’API de API Gateways qui contiennent des politiques de ressources avec l’ID VPC Snowflake actuel. Notez que l’exécution du script peut prendre du temps.

  3. Passez en revue les politiques annoncées et déterminez celles qui doivent être mises à jour pour inclure un ou des ID VPC supplémentaire(s), conformément aux instructions ci-dessus.

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

Réf : 1910