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

Note

AWS ne prend pas en charge les points de terminaison d’interface VPC interrégionaux pour le service Amazon S3. Par conséquent, PrivateLink interrégional n’est pas pris en charge pour la connectivité sortante vers des zones de préparation et des volumes externes qui utilisent le service Amazon S3.

La prise en charge interrégionale pour AWS PrivateLink n’est pas disponible dans les régions gouvernementales ni en République populaire de Chine.

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 le caractère générique * lorsque vous spécifiez 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.

Par exemple, pour créer un point de terminaison PrivateLink qui se connecte à 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

Note

Lorsque vous configurez un point de terminaison pour Amazon S3 ou une autre plateforme en tant que service (PaaS), par exemple KMS, ce service doit se trouver dans la même région que votre compte Snowflake.

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.

You can create a private connectivity endpoint to a VPC endpoint service in an AWS region that is different from your Snowflake region. If you do, ensure that the VPC endpoint service supports the Snowflake region. For information about finding the region names for your account, see Find the cloud-provider’s name of the region for your account.

Important

Avant de spécifier provider_service_name comme argument pour la fonction SYSTEM$PROVISION_PRIVATELINK_ENDPOINT, reportez-vous à la section Tarification de la connectivité interrégionale sur la page AWS PrivateLink Tarification pour déterminer la région appropriée.

Si le service cible est un service de point de terminaison VPC, le service de point de terminaison doit autoriser Snowflake à s’y connecter. Avant de créer un point de terminaison, ajoutez la valeur de privatelink-account-principal depuis la sortie de SYSTEM$GET_PRIVATELINK_CONFIG en tant que principal autorisé https://docs.aws.amazon.com/vpc/latest/privatelink/configure-endpoint-service.html#add-remove-permissions du service de point de terminaison VPC.

L’instruction SQL suivante configure un point de terminaison vers un service de point de terminaison VPC :

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

Note

Dans cet exemple, le service peut se trouver dans une région différente de votre compte Snowflake.

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

Modifier le nom d’hôte d’un point de terminaison de connexion privée

Vous pouvez uniquement modifier le nom d’hôte d’un point de terminaison de connexion privée déjà provisionné, sans changer sa ressource réseau. La modification du nom d’hôte d’un point de terminaison indique à Snowflake que ce point de terminaison se connecte désormais au même service en utilisant un nom d’hôte différent. Pour modifier le nom d’hôte, appelez la fonction système SYSTEM$SET_PRIVATELINK_ENDPOINT_HOSTNAME.

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.