Gérer les points de terminaison de la connectivité privée : AWS

Cette rubrique fournit des informations sur la gestion des points de terminaison de connectivité privée à utiliser avec la connectivité privée sortante vers AWS.

Fournir des points de terminaison de connectivité privée

Vous pouvez utiliser la fonction système SYSTEM$PROVISION_PRIVATELINK_ENDPOINT pour créer un point de terminaison de connectivité privée en spécifiant le service ou la ressource, ainsi que le nom d’hôte. Vous devez utiliser le rôle ACCOUNTADMIN pour utiliser cette fonction système.

Note

Si vous utilisez la connectivité privée pour une zone de préparation externe ou un volume externe, vous devez utiliser un caractère générique (*) pour spécifier le nom d’hôte. 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 un objet Snowflake activé pour la connectivité privée (c’est-à-dire la zone de préparation externe ou le volume externe) sont accessibles via le point de terminaison VPC.

La fonction SYSTEM$PROVISION_PRIVATELINK_ENDPOINT accepte comme arguments le nom du service du fournisseur et le nom de l’hôte. Vous pouvez obtenir ces valeurs en utilisant la sous-commande describe-vpc-endpoint-services à partir de la ligne de commande AWS. Comme décrit dans la documentation AWS, cette sous-commande AWS renvoie un objet JSON avec un champ ServiceName et un champ PrivateDnsName. Utilisez la table suivante pour déterminer les valeurs à utiliser pour la fonction SYSTEM$PROVISION_PRIVATELINK_ENDPOINT :

Argument SYSTEM$PROVISION_PRIVATELINK_ENDPOINT

Sortie describe-vpc-endpoint-services

provider_service_name

ServiceName

host_name

PrivateDnsName

Si vous utilisez la connectivité privée pour des zones de préparation externe ou des volumes externes, vous devez utiliser la valeur avec un caractère générique.

Par exemple, pour créer un PrivateLink avec un accès externe à Amazon S3, exécutez l’instruction SQL suivante pour configurer un point de terminaison pour us-west-2 :

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

Si le service cible est un service de point de terminaison VPC, le service de point de terminaison doit permettre à Snowflake de s’y connecter. Avant de créer un point de terminaison, ajoutez la valeur de privatelink-account-principal à partir de la sortie de SYSTEM$GET_PRIVATELINK_CONFIG en tant que principal autorisé du service de point de terminaison VPC.

L’instruction SQL suivante configure un point de terminaison en un service de point de terminaison VPC. Notez que le service doit se trouver dans la même région que votre compte Snowflake :

SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
  'com.amazonaws.vpce.us-west-2.vpce-svc-012345678910f1234',
  'my.onprem.storage.com'
);
Copy

Après la création d’un point de terminaison, il y a un délai avant que vous puissiez l’utiliser. Pour des informations sur la vérification du statut d’un point de terminaison créé, voir SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO.

Configurer la connectivité à un point de terminaison inaccessible directement

Tous les services ne permettent pas à Snowflake de se connecter directement à des instances spécifiques via un point de terminaison d’interface. Dans ce cas, vous pouvez activer l’accès au service en configurant un proxy et en exposant le service en tant que service de point de terminaison VPC.

Pour une présentation spécifique à Amazon RDS, consultez l’article de blog Connecting To Amazon RDS Using Private Connectivity from Snowflake.

Découvrir si un service est disponible pour un accès direct

Snowflake peut généralement accéder à un service AWS directement via la connectivité privée si l’une des conditions suivantes est vraie :

  • Le nom DNS du service - sa valeur PrivateDnsName à partir de la sortie de AWS DescribeVpcEndpointServices— comporte un préfixe composé d’un caractère générique.

    Si le nom du service DNS commence par un caractère générique *, il est probable que AWS permette d’accéder directement aux ressources individuelles de ce service. Le nom DNS se présente généralement sous cette forme :

    *.<service>.<region>.amazonaws.com
    
    Copy
  • Le service est essentiellement un plan de données. AWS Bedrock Runtime est un exemple.

    Pour découvrir ces informations sur un service donné, consultez la documentation et les articles de blog concernant AWS.

Accéder à un service lorsque l’accès direct n’est pas disponible

Lorsqu’un service n’est pas disponible par accès direct via un point de terminaison d’interface, vous pouvez permettre l’accès au service en configurant un proxy et en exposant le service en tant que service de point de terminaison VPC.

Voici quelques exemples de ces services :

  • Les instances d’Amazon EC2 à l’adresse suivante ec2.us-west-2.amazonaws.com

  • Serveurs Amazon Relational Database Service (RDS) à l’adresse suivante rds.us-west-2.amazonaws.com

Configurez AWS pour l’accès via un proxy

Pour exposer une instance de service par l’intermédiaire d’un proxy, vous devez configurer un Cloud privé virtuel (VPC) et un équilibreur de charge sur AWS, puis créer un point de terminaison Private Link Snowflake en utilisant le nom du service et le nom DNS de l’équilibreur de charge du service du point terminaison AWS.

Les étapes de base sont décrites ci-dessous :

  1. Sur AWS, créez un Cloud privé virtuel (VPC) avec des sous-réseaux couvrant trois zones de disponibilité différentes.

    Choisissez des zones de disponibilité initiales (par exemple, az1 et az2) pour vos ressources ; il se peut que Snowflake ne prenne pas en charge les AZs plus récentes dans certaines régions. Veillez à ce que les points de terminaison et les autres ressources soient créés dans les mêmes zones de disponibilité afin d’éviter le trafic inter-zones.

  2. Dans les paramètres réseau de l’instance de service à laquelle vous souhaitez accéder, assurez-vous que l’instance se trouve dans le VPC que vous avez créé.

  3. Créez un groupe cible qui contient l’instance de service à laquelle vous voulez accéder.

  4. Créez un équilibreur de charge réseau qui achemine le trafic vers le groupe cible que vous avez créé.

  5. Créez un service de point de terminaison avec l’équilibreur de charge réseau que vous avez créé.

    Enregistrez le nom du service de point de terminaison, endpoint_service_name, pour l’utiliser lors de la configuration de Snowflake pour l’accès au service.

  6. Dans Snowflake, exécutez la requête suivante pour récupérer le principal de compte Snowflake afin d’autoriser la création de points de terminaison :

    SELECT key, value FROM TABLE(FLATTEN(INPUT => PARSE_JSON(SYSTEM$GET_PRIVATELINK_CONFIG())));
    
    Copy
  7. À partir des résultats de la requête, localisez la clé privatelink-account-principal et notez sa valeur.

  8. Sur AWS, pour le service du point de terminaison de service que vous avez créé, mettez à jour la section Allow principals pour ajouter un principal dont ARN est la valeur clé privatelink-account-principal de Snowflake.

  9. Dans Snowflake, créez un point de terminaison privé vers le service de point de terminaison AWS que vous avez créé.

    Lorsque vous exécutez la fonction SYSTEM$PROVISION_PRIVATELINK_ENDPOINT, utilisez les valeurs suivantes comme arguments :

    Argument SYSTEM$PROVISION_PRIVATELINK_ENDPOINT

    Valeur de la configuration d’AWS

    provider_service_name

    Point de terminaison AWS Service name, la valeur endpoint_service_name, de la section des détails du service de point de terminaison.

    host_name

    DNS Name de l’équilibreur de charge réseau que vous avez créé.

  10. Sur AWS, approuvez la connexion PrivateLink :

    1. Naviguez jusqu’aux connexions de point de terminaison pour le service de point de terminaison que vous avez créé.

    2. Sélectionnez la connexion du point de terminaison pertinent dans un état d’attente.

    3. Cliquez sur Accept Endpoint Connection Request.

  11. Vérifiez le statut du point de terminaison en exécutant la requête suivante.

    Assurez-vous que le statut du point de terminaison est passé de pendingAcceptance à available.

    SELECT SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO();
    
    Copy

Supprimer un point de terminaison de connectivité privée aux services

Vous pouvez utiliser la fonction système SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT pour supprimer un point de terminaison de connectivité privée en spécifiant le service ou la ressource.

Une fois le point de terminaison supprimé, il est placé dans une file d’attente pour être supprimé au bout de 7 jours.

Vous devez utiliser le rôle ACCOUNTADMIN pour utiliser cette fonction système.

Par exemple, pour supprimer un site PrivateLink avec un accès externe à Amazon S3, exécutez l’instruction SQL suivante :

SELECT SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT('com.amazonaws.us-west-2.s3');
Copy

Rétablir des services d’un point de terminaison de connectivité privée

Vous pouvez utiliser la fonction système SYSTEM$RESTORE_PRIVATELINK_ENDPOINT pour rétablir un point de terminaison de connectivité privée supprimé qui se trouve encore dans la file d’attente de suppression en spécifiant le service ou la ressource. Si le point de terminaison n’est pas trouvé dans la file d’attente de suppression, vous ne pouvez pas le rétablir.

Vous devez utiliser le rôle ACCOUNTADMIN pour utiliser cette fonction système.

Par exemple, pour rétablir un site PrivateLink avec un accès externe à Amazon S3, exécutez l’instruction SQL suivante :

SELECT SYSTEM$RESTORE_PRIVATELINK_ENDPOINT('com.amazonaws.us-west-2.s3');
Copy

Lister tous les points de terminaison de connectivité privée vers les services

Vous pouvez utiliser la fonction système SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO pour dresser la liste de tous les points de terminaison de connectivité privée, ainsi que des informations sur ces points de terminaison, dans votre compte.

Vous devez utiliser le rôle ACCOUNTADMIN pour utiliser cette fonction système.

Par exemple, pour établir la liste de tous les points de terminaison AWS PrivateLink avec les services AWS, exécutez l’instruction SQL suivante :

SELECT SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO();
Copy

Pour une description des champs de l’objet JSON renvoyé par la fonction, voir Renvoie.

Note

Vous pouvez également interroger la vue OUTBOUND_PRIVATELINK_ENDPOINTS du schéma ACCOUNT_USAGE pour obtenir la liste des points de terminaison privés de votre compte.