Connectivité privée AWS avec les zones de préparation externe

Cette rubrique fournit des détails de configuration pour définir une connectivité privée sortante vers une zone de préparation externe sur AWS. La principale différence entre la connectivité publique sortante et la connectivité privée sortante réside dans la manière dont vous configurez l’intégration de stockage ou la zone de préparation. Par exemple, vous pouvez spécifier la propriété USE_PRIVATELINK_ENDPOINT pour l’intégration de stockage, puis faire référence à cette intégration de stockage dans la zone de préparation externe. La zone de préparation externe hérite de la configuration du point de terminaison privé de l’intégration de stockage. Par la suite, votre connexion à la zone de préparation S3 AWS passe par le réseau interne AWS. En configurant votre intégration de stockage et votre zone de préparation pour utiliser une connectivité privée sortante, vous ajoutez une sécurité supplémentaire à vos opérations de déchargement des données en bloquant l’accès public au compte de stockage.

Coûts de la connectivité privée sortante

Vous payez pour le point de terminaison de la connectivité privée et pour toutes les données traitées. Pour connaître les prix de ces éléments, consultez le tableau de consommation des services de Snowflake.

Vous pouvez connaître le coût de ces éléments en filtrant sur les types de services suivants lors de la requête des vues de facturation dans les schémas ACCOUNT_USAGE et ORGANIZATION_USAGE :

  • OUTBOUND_PRIVATELINK_ENDPOINT

  • OUTBOUND_PRIVATELINK_DATA_PROCESSED

Par exemple, vous pouvez interroger la vue USAGE_IN_CURRENCY_DAILY et filtrer sur ces types de services.

Considérations

Vous pouvez configurer la connectivité publique sortante et la connectivité privée sortante pour le même compte de stockage. Pour ce faire, créez une intégration de stockage dédiée à la connectivité publique sortante et spécifiez USE_PRIVATELINK_ENDPOINT = FALSE.

Mises à jour de la syntaxe

Intégration de stockage

Vous pouvez spécifier la propriété USE_PRIVATELINK_ENDPOINT lorsque vous créez une intégration de stockage comportant un ou plusieurs emplacements :

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

Vous pouvez modifier une intégration de stockage et définir la propriété USE_PRIVATELINK_ENDPOINT :

ALTER STORAGE INTEGRATION my_int
  SET USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }
Copy
Zones de préparation externes

Une zone de préparation qui fait référence à une intégration de stockage spécifiant la propriété USE_PRIVATELINK_ENDPOINT hérite de la configuration du point de terminaison privé. Par conséquent, vous ne devez pas spécifier la propriété USE_PRIVATELINK_ENDPOINT dans la zone de préparation et vous ne pouvez pas modifier la zone de préparation pour définir la propriété USE_PRIVATELINK_ENDPOINT.

Si vous utilisez la propriété CREDENTIALS de la zone de préparation au lieu de référencer une intégration de stockage, vous devez spécifier la propriété USE_PRIVATELINK_ENDPOINT lorsque vous créez ou modifiez la zone de préparation.

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

La commande DESCRIBE STAGE inclut la propriété USE_PRIVATELINK_ENDPOINT et sa valeur.

Configurer l’accès à la zone de préparation externe

Ces étapes sont propres à l’utilisation de la connectivité privée sortante avec une intégration de stockage pour décharger les données vers une zone de préparation externe sur AWS. Vous devez modifier le flux si vous utilisez la propriété CREDENTIALS de la zone de préparation au lieu de faire référence à une intégration de stockage.

  1. Dans Snowflake, appelez la fonction système SYSTEM$PROVISION_PRIVATELINK_ENDPOINT pour provisionner un point de terminaison de connectivité privée dans votre Snowflake VNet afin de permettre à Snowflake de se connecter à votre stockage S3 AWS externe à l’aide d’une connectivité privée.

    Comme le montre l’exemple suivant, vous devez utiliser un caractère générique (*) au lieu de spécifier un compartiment S3 AWS. L’utilisation du caractère générique ne signifie pas que tous les compartiments S3 sont accessibles via une connexion privée. Seuls les compartiments référencés par une zone de préparation externe configurée pour une connectivité privée sont accessibles via le point de terminaison VPC.

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

    Cette fonction lie le point de terminaison privé au nom d’hôte, ce qui permet à l’intégration de stockage d’utiliser le point de terminaison privé pour se connecter à l’emplacement de stockage.

  2. Dans Snowflake, appelez la fonction SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO.

    Lorsque la sortie de la fonction comprend "status": "APPROVED, votre connexion de Snowflake à votre compte de stockage pourra utiliser la connectivité privée (après que les autres objets Snowflake nécessaires ont été activés pour la connectivité privée sortante).

    Vous pouvez passer aux étapes suivantes en attendant le statut "APPROVED".

  3. Limitez l’accès au compartiment S3 au seul point de terminaison VPC en mettant à jour la politique du compartiment avec ce qui suit.

    {
      "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. Créez une intégration de stockage qui spécifie à la fois le rôle limité STORAGE_AWS_ROLE_ARN et la propriété 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. Créez une zone de préparation externe qui fait référence à l’intégration de stockage :

    CREATE OR REPLACE STAGE my_storage_private_stage
      URL = 's3://mybucket1/path1/'
      STORAGE_INTEGRATION = outbound_private_link_int;
    
    Copy
  6. Une fois que le point de terminaison privé a le statut « APPROVED », testez le déchargement des données de Snowflake vers la zone de préparation externe :

    COPY INTO @my_storage_private_stage
      FROM mytable
      FILE_FORMAT = (FORMAT_NAME = my_csv_format);
    
    Copy
  7. Observez le résultat dans votre zone de préparation AWS.

Déprovisionner un point de terminaison

Si vous n’avez plus besoin du point de terminaison de connectivité privée pour la zone de préparation externe, désactivez la propriété USE_PRIVATELINK_ENDPOINT sur la zone de préparation ou l’intégration de stockage, puis appelez la fonction système SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT.