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
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éfinir
authorizationType
de la méthode pourAWS_IAM
ouNONE
.
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.
-
Connectez-vous à AWS Management Console et ouvrez la console AppSync
. -
Dans le Tableau de bord, choisissez Créer une API.
-
-
ChoisissezConcevez une API à partir de zéro, puis choisissezSuivant.
-
Dans leAPI privéesection, choisissezUtiliser les fonctionnalités de l'API privée.
-
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.
Pour utiliser l'option DNS privé, vous devez définirenableDnsHostnames
etenableDnsSupportattributes
valeurs 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 à transmettreHost
ou en tant que x-appsync-domain
en-tête de la demande. Ces exemples utilisent unTodoAPI
qui 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 utiliseboucle{ }
dans les commandes ci-dessous avec les valeurs correspondantes de votreAWScompte.
Tester l'opération de mutation —createTodo
Demander
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 —createTodo
Ré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 —listTodos
Demander
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 —listTodos
Demander
{ "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 àcreateTodo
mutation
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 utilisantwscatAPI
KEY
pour 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 lewscat
commande 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 IAMCondition
déclarationsà utiliser avec des API privées. Levisibility
un champ peut être inclus dans les déclarations de politique IAM pourappsync:CreateGraphqlApi
opé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" } } }