En utilisantAWS AppSyncAPI privées - AWS AppSync

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

En utilisantAWS AppSyncAPI privées

Si vous utilisez Amazon Virtual Private Cloud (Amazon VPC), vous pouvez créerAWS AppSyncLes API privées, qui sont des API accessibles uniquement depuis un VPC. Avec une API privée, vous pouvez restreindre l'accès des API à vos applications internes et vous connecter à vos points de terminaison GraphQL et Realtime sans exposer les données publiquement.

Pour établir une connexion privée entre votre VPC etAWS AppSyncservice, vous devez créer unpoint de terminaison VPC d'interface. Les points de terminaison d'interface sont alimentés par AWS PrivateLink, ce qui vous permet d'accéder en privé aux API AWS AppSync sans passerelle Internet, périphérique NAT, connexion VPN ou connexion AWS Direct Connect. Les instances de votre VPC ne requièrent pas d'adresses IP publiques pour communiquer avec les API AWS AppSync. Trafic entre votre VPC etAWS AppSyncne quitte pas leAWSréseau.

Certains facteurs supplémentaires doivent être pris en compte avant d'activer les fonctionnalités de l'API privée :

  • Configuration des points de terminaison de l'interface VPC pourAWS AppSynclorsque les fonctionnalités de DNS privé sont activées, les ressources du VPC ne pourront pas invoquer d'autresAWS AppSyncAPI publiques utilisant leAWS AppSyncURL de l'API générée. Cela est dû au fait que la demande à l'API publique est acheminée via le point de terminaison de l'interface, ce qui n'est pas autorisé pour les API publiques. Pour invoquer des API publiques dans ce scénario, il est recommandé de configurer des noms de domaine personnalisés sur les API publiques, qui peuvent ensuite être utilisés par les ressources du VPC pour appeler l'API publique.

  • VotreAWS AppSyncLes API privées ne seront disponibles que depuis votre VPC. LeAWS AppSyncconsole L'éditeur de requêtes ne pourra accéder à votre API que si la configuration réseau de votre navigateur peut acheminer le trafic vers votre VPC (par exemple, connexion via VPN ou viaAWS Direct Connect).

  • Avec un point de terminaison d'interface VPC pourAWS AppSync, vous pouvez accéder à n'importe quelle API privée dans le mêmeAWScompte et région. Pour restreindre davantage l'accès aux API privées, vous pouvez envisager les options suivantes :

    • S'assurer que seuls les administrateurs requis peuvent créer des interfaces de point de terminaison VPC pourAWS AppSync.

    • Utilisation de politiques personnalisées relatives aux points de terminaison du VPC pour limiter les API pouvant être invoquées à partir des ressources du VPC.

    • Pour les ressources du VPC, nous vous recommandons d'utiliser l'autorisation IAM pour appelerAWS AppSyncAPI en veillant à ce que les ressources se voient attribuer des rôles délimités aux API.

  • Lorsque vous créez ou utilisez des politiques qui restreignent les principes IAM, vous devez définirauthorizationTypede la méthode pourAWS_IAMouNONE.

CréationAWS AppSyncAPI privées

Les étapes ci-dessous vous montrent comment créer des API privées dansAWS AppSyncservice.

Avertissement

Vous pouvez activer les fonctionnalités de l'API privée uniquement lors de la création de l'API. Ce paramètre ne peut pas être modifié sur unAWS AppSyncAPI ou unAWS AppSyncAPI privée après sa création.

  1. Connectez-vous à AWS Management Console et ouvrez la console AppSync.

    1. Dans le Tableau de bord, choisissez Créer une API.

  2. ChoisissezConcevez une API à partir de zéro, puis choisissezSuivant.

  3. Dans leAPI privéesection, choisissezUtiliser les fonctionnalités de l'API privée.

  4. Configurez le reste des options, passez en revue les données de votre API, puis choisissezCréez.

Avant de pouvoir utiliser votreAWS AppSyncAPI privée, vous devez configurer un point de terminaison d'interface pourAWS AppSyncdans votre VPC. Notez que l'API privée et le VPC doivent se trouver dans le même emplacementAWScompte et région.

Création d'un point de terminaison d'interface pourAWS AppSync

Vous pouvez créer un point de terminaison d'interface pourAWS AppSyncà l'aide de la console Amazon VPC ou duAWS Command Line Interface(AWS CLI). Pour de plus amples informations, veuillez consulter Création d'un point de terminaison d'interface dans le Guide de l'utilisateur Amazon VPC.

Console
  1. Connectez-vous auAWS Management Consoleet ouvrez lePoints de terminaisonpage de la console Amazon VPC.

  2. Choisissez Créer un point de terminaison.

    1. Dans leCatégorie de servicechamp, vérifiez queAWSservicesest sélectionné.

    2. Dans leServicestable, choisissezcom.amazonaws.{region}.appsync-api. Vérifiez queTypela valeur de la colonne estInterface.

    3. Dans leVPCdans ce champ, choisissez un VPC et ses sous-réseaux.

    4. Pour activer les fonctionnalités DNS privées pour le point de terminaison de l'interface, cochezActiver le nom DNScase à cocher.

    5. Dans leGroupe de sécuritédans ce champ, sélectionnez un ou plusieurs groupes de sécurité.

  3. Choisissez Créer un point de terminaison.

CLI

Utilisez la commande create-vpc-endpoint et spécifiez l'ID du VPC, le type du point de terminaison de VPC (interface), le nom du service, les sous-réseaux qui utiliseront le point de terminaison et les groupes de sécurité à associer aux interfaces réseau du point de terminaison. Par exemple :

$ aws ec2 create-vpc-endpoint —vpc-id vpc-ec43eb89 \ —vpc-endpoint-type Interface \ —service-name com.amazonaws.{region}.appsync-api \ —subnet-id subnet-abababab —security-group-id sg-1a2b3c4d

Pour utiliser l'option DNS privé, vous devez définirenableDnsHostnamesetenableDnsSupportattributesvaleurs de votre VPC. Pour plus d'informations, consultez Affichage et mise à jour de la prise en charge de DNS pour votre VPC dans le Guide de l'utilisateur Amazon VPC. Si vous activez les fonctionnalités DNS privées pour le point de terminaison de l'interface, vous pouvez envoyer des demandes à votreAWS AppSyncAPI GraphQL et point de terminaison en temps réel utilisant ses points de terminaison DNS publics par défaut en utilisant le format ci-dessous :

https://{api_url_identifier}.appsync-api.{region}.amazonaws.com/graphql

Pour plus d'informations sur les points de terminaison de service, voirPoints de terminaison de service et quotasdans leAWSRéférence générale.

Pour plus d'informations sur les interactions de service avec les points de terminaison de l'interface, voirAccès à un service via un point de terminaison d'interfacedans leGuide de l'utilisateur d'Amazon VPC.

Pour plus d'informations sur la création et la configuration d'un point de terminaison à l'aideAWS CloudFormation, consultez leAWSPoint de terminaison ::EC2 : :VPCressource dans leAWS CloudFormationGuide de l'utilisateur.

Exemples avancés

Si vous activez les fonctionnalités DNS privées pour le point de terminaison de l'interface, vous pouvez envoyer des demandes à votreAWS AppSyncAPI GraphQL et point de terminaison en temps réel utilisant ses points de terminaison DNS publics par défaut en utilisant le format ci-dessous :

https://{api_url_identifier}.appsync-api.{region}.amazonaws.com/graphql

À l'aide des noms d'hôtes DNS publics du point de terminaison VPC de l'interface, l'URL de base pour appeler l'API sera au format suivant :

https://{vpc_endpoint_id}-{endpoint_dns_identifier}.appsync-api.{region}.vpce.amazonaws.com/graphql

Vous pouvez également utiliser le nom d'hôte DNS spécifique à AZ si vous avez déployé un point de terminaison dans l'AZ :

https://{vpc_endpoint_id}-{endpoint_dns_identifier}-{az_id}.appsync-api.{region}.vpce.amazonaws.com/graphql.

L'utilisation du nom DNS public du point de terminaison du VPC nécessiteraAWS AppSyncNom d'hôte du point de terminaison de l'API à transmettreHostou en tant que x-appsync-domainen-tête de la demande. Ces exemples utilisent unTodoAPIqui a été créé dans leLancer un exemple de schémaguide :

curl https://{vpc_endpoint_id}-{endpoint_dns_identifier}.appsync-api.{region}.vpce.amazonaws.com/graphql \ -H "Content-Type:application/graphql" \ -H "x-api-key:da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}" \ -H "Host:{api_url_identifier}.appsync-api.{region}.amazonaws.com" \ -d '{"query":"mutation add($createtodoinput: CreateTodoInput!) {\n createTodo(input: $createtodoinput) {\n id\n name\n where\n when\n description\n }\n}","variables":{"createtodoinput":{"name":"My first GraphQL task","when":"Friday Night","where":"Day 1","description":"Learn more about GraphQL"}}}'

Dans les exemples suivants, nous utiliseronsTodoapplication générée dansLancer un exemple de schémaguide. Pour tester l'exemple d'API Todo, nous allons utiliser le DNS privé pour appeler l'API. Vous pouvez utiliser n'importe quel outil de ligne de commande de votre choix ; cet exemple utilisebouclepour envoyer des requêtes et des mutations etwscatpour configurer des abonnements. Pour imiter notre exemple, remplacez les valeurs entre crochets{ }dans les commandes ci-dessous avec les valeurs correspondantes de votreAWScompte.

Tester l'opération de mutation —createTodoDemander

curl https://{api_url_identifier}.appsync-api.{region}.amazonaws.com/graphql \ -H "Content-Type:application/graphql" \ -H "x-api-key:da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}" \ -d '{"query":"mutation add($createtodoinput: CreateTodoInput!) {\n createTodo(input: $createtodoinput) {\n id\n name\n where\n when\n description\n }\n}","variables":{"createtodoinput":{"name":"My first GraphQL task","when":"Friday Night","where":"Day 1","description":"Learn more about GraphQL"}}}'

Tester l'opération de mutation —createTodoRéponse

{ "data": { "createTodo": { "id": "<todo-id>", "name": "My first GraphQL task", "where": "Day 1", "when": "Friday Night", "description": "Learn more about GraphQL" } } }

Tester le fonctionnement de la requête —listTodosDemander

curl https://{api_url_identifier}.appsync-api.{region}.amazonaws.com/graphql \ -H "Content-Type:application/graphql" \ -H "x-api-key:da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}" \ -d '{"query":"query ListTodos {\n listTodos {\n items {\n description\n id\n name\n when\n where\n }\n }\n}\n","variables":{"createtodoinput":{"name":"My first GraphQL task","when":"Friday Night","where":"Day 1","description":"Learn more about GraphQL"}}}'

Tester le fonctionnement de la requête —listTodosDemander

{ "data": { "listTodos": { "items": [ { "description": "Learn more about GraphQL", "id": "<todo-id>", "name": "My first GraphQL task", "when": "Friday night", "where": "Day 1" } ] } } }

Test du fonctionnement de l'abonnement — Abonnement àcreateTodomutation

Pour configurer les abonnements GraphQL dansAWS AppSync, voirCréation d'un système en temps réelWebSocketclient. À partir d'une instance Amazon EC2 dans un VPC, vous pouvez tester votreAWS AppSyncPoint de terminaison d'abonnement à une API privée utilisantwscat. L'exemple ci-dessous utilise unAPI KEYpour autorisation.

$ header=`echo '{"host":"{api_url_identifier}.appsync-api.{region}.amazonaws.com","x-api-key":"da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}"}' | base64 | tr -d '\n'` $ wscat -p 13 -s graphql-ws -c "wss://{api_url_identifier}.appsync-realtime-api.us-west-2.amazonaws.com/graphql?header=$header&payload=e30=" Connected (press CTRL+C to quit) > {"type": "connection_init"} < {"type":"connection_ack","payload":{"connectionTimeoutMs":300000}} < {"type":"ka"} > {"id":"f7a49717","payload":{"data":"{\"query\":\"subscription onCreateTodo {onCreateTodo {description id name where when}}\",\"variables\":{}}","extensions":{"authorization":{"x-api-key":"da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}","host":"{api_url_identifier}.appsync-api.{region}.amazonaws.com"}}},"type":"start"} < {"id":"f7a49717","type":"start_ack"}

Vous pouvez également utiliser le nom de domaine du point de terminaison du VPC tout en vous assurant de spécifierHôteen-tête dans lewscatcommande pour établir le websocket :

$ header=`echo '{"host":"{api_url_identifier}.appsync-api.{region}.amazonaws.com","x-api-key":"da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}"}' | base64 | tr -d '\n'` $ wscat -p 13 -s graphql-ws -c "wss://{vpc_endpoint_id}-{endpoint_dns_identifier}.appsync-api.{region}.vpce.amazonaws.com/graphql?header=$header&payload=e30=" --header Host:{api_url_identifier}.appsync-realtime-api.us-west-2.amazonaws.com Connected (press CTRL+C to quit) > {"type": "connection_init"} < {"type":"connection_ack","payload":{"connectionTimeoutMs":300000}} < {"type":"ka"} > {"id":"f7a49717","payload":{"data":"{\"query\":\"subscription onCreateTodo {onCreateTodo {description id priority title}}\",\"variables\":{}}","extensions":{"authorization":{"x-api-key":"da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}","host":"{api_url_identifier}.appsync-api.{region}.amazonaws.com"}}},"type":"start"} < {"id":"f7a49717","type":"start_ack"}

Exécutez le code de mutation ci-dessous :

curl https://{api_url_identifier}.appsync-api.{region}.amazonaws.com/graphql \ -H "Content-Type:application/graphql" \ -H "x-api-key:da2-{xxxxxxxxxxxxxxxxxxxxxxxxxx}" \ -d '{"query":"mutation add($createtodoinput: CreateTodoInput!) {\n createTodo(input: $createtodoinput) {\n id\n name\n where\n when\n description\n }\n}","variables":{"createtodoinput":{"name":"My first GraphQL task","when":"Friday Night","where":"Day 1","description":"Learn more about GraphQL"}}}'

Ensuite, un abonnement est déclenché et le message de notification apparaît comme indiqué ci-dessous :

< {"id":"f7a49717","type":"data","payload":{"data":{"onCreateTodo":{"description":"Go to the shops","id":"169ce516-b7e8-4a6a-88c1-ab840184359f","priority":5,"title":"Go to the shops"}}}}

Utiliser les politiques IAM pour limiter la création d'API publiques

AWS AppSyncprend en charge IAMConditiondéclarationsà utiliser avec des API privées. Levisibilityun champ peut être inclus dans les déclarations de politique IAM pourappsync:CreateGraphqlApiopération permettant de contrôler quels rôles et utilisateurs IAM peuvent créer des API privées et publiques. Cela permet à un administrateur IAM de définir une politique IAM qui permettra uniquement à un utilisateur de créer une API GraphQL privée. Un utilisateur qui tente de créer une API publique recevra un message non autorisé.

Par exemple, un administrateur IAM peut créer la déclaration de politique IAM suivante pour permettre la création d'API privées :

{ "Sid": "AllowPrivateAppSyncApis", "Effect": "Allow", "Action": "appsync:CreateGraphqlApi", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "appsync:Visibility": "PRIVATE" } } }

Un administrateur IAM peut également ajouter les éléments suivantspolitique de contrôle des servicespour bloquer tous les utilisateurs d'unAWSorganisation depuis la créationAWS AppSyncAPI autres que les API privées :

{ "Sid": "BlockNonPrivateAppSyncApis", "Effect": "Deny", "Action": "appsync:CreateGraphqlApi", "Resource": "*", "Condition": { "ForAnyValue:StringNotEquals": { "appsync:Visibility": "PRIVATE" } } }