Points de terminaison publics Neptune - Amazon Neptune

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.

Points de terminaison publics Neptune

Présentation

Les clusters Amazon Neptune sont généralement déployés au sein de votre VPC et ne sont accessibles qu'à partir de ce VPC. Cela nécessite de configurer des applications et des environnements de développement au sein du VPC ou d'utiliser des services proxy pour se connecter au VPC, ce qui augmente le temps et les coûts de configuration.

Les points de terminaison publics simplifient cette expérience en permettant des connexions directes à Neptune via Internet, ce qui permet de démarrer plus facilement avec des bases de données de graphes sans connaissances spécifiques en matière de réseau.

Quand utiliser des points de terminaison publics

Envisagez d'utiliser des points de terminaison publics dans les scénarios suivants :

  • Vous souhaitez tester rapidement Neptune dans un environnement de développement ou de test sans configuration réseau complexe

  • Vous n'avez pas de connaissances spécialisées AWS en matière de réseaux

  • Le niveau de sécurité de votre application ne nécessite pas de VPC privé

  • Vous devez vous connecter à Neptune depuis votre environnement de développement local

Considérations sur la sécurité

Lorsque vous utilisez des points de terminaison publics, tenez compte des considérations de sécurité suivantes :

  • L'authentification IAM est requise pour les clusters dont les points de terminaison publics sont activés.

  • L'accès à la base de données est contrôlé par le groupe de sécurité qu'elle utilise.

  • Vous pouvez restreindre les adresses IP autorisées à se connecter à votre cluster.

  • Vous pouvez utiliser les politiques IAM pour contrôler qui peut créer ou modifier des clusters avec un accès public. Voir : Restreindre la création d'accès public

Activation des points de terminaison publics

Par défaut, les nouvelles bases de données Neptune sont créées avec les points de terminaison publics désactivés. Vous devez explicitement activer l'accès public lors de la création ou de la modification d'un cluster.

Les points de terminaison publics sont pris en charge à partir de la version 1.4.6.x du moteur Neptune. Vous devez mettre à niveau les clusters existants vers au moins cette version pour utiliser cette fonctionnalité.

Le paramètre de point de terminaison public est disponible sur l'instance Neptune et non sur le cluster Neptune. Par conséquent, un cluster Neptune peut exister avec certaines instances avec des points de terminaison publics et d'autres non. Toutefois, nous ne recommandons pas d'utiliser un tel paramètre. Pour plus d'informations à ce sujet, reportez-vous à : Fonctionnement des points de terminaison publics

Prérequis

Paramètre d'authentification IAM sur le cluster Neptune

Avant d'activer des points de terminaison publics sur une instance Neptune, assurez-vous que votre cluster prend en charge l'authentification IAM. Sinon, activez-le à l'aide de la commande suivante :

aws neptune modify-db-cluster \ --region us-west-2 \ --engine graphdb \ --engine-version 1.4.6.x \ --db-cluster-identifier neptune-public-endpoint \ --enable-iam-database-authentication

Network settings (Paramètres réseau)

  1. Assurez-vous que votre VPC possède des sous-réseaux qui permettent le routage public (il comporte une entrée pour une passerelle Internet dans la table de routage des sous-réseaux). Si vous ne fournissez aucun db-subnet-group-name paramètre lors de la création du cluster, le groupe de sous-réseaux par défaut est sélectionné pour la création du cluster.

  2. Assurez-vous que le groupe de sécurité attaché au cluster autorise le trafic entrant pour les plages d'adresses IP autorisées et les ports autorisés. Par exemple, si vous souhaitez autoriser le trafic TCP provenant de tous IPs à se connecter à l'instance Neptune exécutée sur le port 8182, la règle entrante doit avoir :

    1. Type : Tout TCP

    2. Protocole : TCP

    3. Portée de ports : 8182

    4. Bloc CIDR : 0.0.0.0/0

Note

Bien que vous puissiez définir la plage de blocs CIDR sur 0.0.0.0/0, nous vous recommandons de la réduire à une plage d'adresses IP spécifique de votre application cliente pour une meilleure sécurité.

Création d'une nouvelle instance avec des points de terminaison publics

Vous pouvez créer une nouvelle instance Neptune avec des points de terminaison publics à l'aide de la console de AWS gestion, de la AWS CLI ou du SDK. AWS

À l'aide de la AWS CLI :

aws neptune create-db-instance \ --region us-west-2 \ --engine graphdb \ --engine-version 1.4.6.x \ --db-cluster-identifier neptune-public-endpoint \ --publicly-accessible

Modification d'une instance existante pour un accès public

Pour modifier une instance Neptune existante afin de permettre l'accès public :

aws neptune modify-db-instance \ --region us-west-2 \ --engine graphdb \ --engine-version 1.4.6.x \ --db-instance-identifier neptune-public-endpoint \ --publicly-accessible
Note

L'accès public est activé au niveau de l'instance, et non au niveau du cluster. Pour garantir que votre cluster est toujours accessible via des points de terminaison publics, l'accès public doit être activé pour toutes les instances du cluster.

Utilisation des points de terminaison publics

Pour vérifier si votre base de données est accessible, vérifiez son état à l'aide de l'NeptuneDataAPI AWS CLI :

aws neptunedata get-engine-status \ --endpoint-url https://my-cluster-name.cluster-abcdefgh1234.us-east-1.neptune.amazonaws.com:8182

Si la base de données est accessible, la réponse est la suivante :

{ "status": "healthy", "startTime": "Sun Aug 10 06:54:15 UTC 2025", "dbEngineVersion": "1.4.6.0.R1", "role": "writer", "dfeQueryEngine": "viaQueryHint", "gremlin": { "version": "tinkerpop-3.7.1" }, "sparql": { "version": "sparql-1.1" }, "opencypher": { "version": "Neptune-9.0.20190305-1.0" }, "labMode": { "ObjectIndex": "disabled", "ReadWriteConflictDetection": "enabled" }, "features": { "SlowQueryLogs": "disabled", "InlineServerGeneratedEdgeId": "disabled", "ResultCache": { "status": "disabled" }, "IAMAuthentication": "disabled", "Streams": "disabled", "AuditLog": "disabled" }, "settings": { "StrictTimeoutValidation": "true", "clusterQueryTimeoutInMs": "120000", "SlowQueryLogsThreshold": "5000" } }

Exemples d'interrogation de la base de données

AWS CLI

aws neptunedata execute-open-cypher-query \ --open-cypher-query "MATCH (n) RETURN n LIMIT 10" \ --endpoint-url https://my-cluster-name.cluster-abcdefgh1234.us-east-1.neptune.amazonaws.com:8182

Python

import boto3 import json from botocore.config import Config # Configuration - Replace with your actual Neptune cluster details cluster_endpoint = "my-cluster-name.cluster-abcdefgh1234.my-region.neptune.amazonaws.com" port = 8182 region = "my-region" # Configure Neptune client # This disables retries and sets the client timeout to infinite # (relying on Neptune's query timeout) endpoint_url = f"https://{cluster_endpoint}:{port}" config = Config( region_name=region, retries={'max_attempts': 1}, read_timeout=None ) client = boto3.client("neptunedata", config=config, endpoint_url=endpoint_url) cypher_query = "MATCH (n) RETURN n LIMIT 5" try: response = client.execute_open_cypher_query(openCypherQuery=cypher_query) print("openCypher Results:") for item in response.get('results', []): print(f" {item}") except Exception as e: print(f"openCypher query failed: {e}")

JavaScript

import { NeptunedataClient, GetPropertygraphSummaryCommand } from "@aws-sdk/client-neptunedata"; import { inspect } from "util"; import { NodeHttpHandler } from "@smithy/node-http-handler"; /** * Main execution function */ async function main() { // Configuration - Replace with your actual Neptune cluster details const clusterEndpoint = 'my-cluster-name.cluster-abcdefgh1234.my-region.neptune.amazonaws.com'; const port = 8182; const region = 'my-region'; // Configure Neptune client // This disables retries and sets the client timeout to infinite // (relying on Neptune's query timeout) const endpoint = `https://${clusterEndpoint}:${port}`; const clientConfig = { endpoint: endpoint, sslEnabled: true, region: region, maxAttempts: 1, // do not retry requestHandler: new NodeHttpHandler({ requestTimeout: 0 // no client timeout }) }; const client = new NeptunedataClient(clientConfig); try { try { const command = new GetPropertygraphSummaryCommand({ mode: "basic" }); const response = await client.send(command); console.log("Graph Summary:", inspect(response.payload, { depth: null })); } catch (error) { console.log("Property graph summary failed:", error.message); } } catch (error) { console.error("Error in main execution:", error); } } // Run the main function main().catch(console.error);

Go

package main import ( "context" "fmt" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/neptunedata" "os" "encoding/json" "net/http" ) func main() { // Configuration - Replace with your actual Neptune cluster details clusterEndpoint := "my-cluster-name.cluster-abcdefgh1234.my-region.neptune.amazonaws.com" port := 8182 region := "my-region" // Configure Neptune client // Configure HTTP client with no timeout // (relying on Neptune's query timeout) endpoint := fmt.Sprintf("https://%s:%d", clusterEndpoint, port) // Load AWS SDK configuration sdkConfig, _ := config.LoadDefaultConfig( context.TODO(), config.WithRegion(region), config.WithHTTPClient(&http.Client{Timeout: 0}), ) // Create Neptune client with custom endpoint client := neptunedata.NewFromConfig(sdkConfig, func(o *neptunedata.Options) { o.BaseEndpoint = aws.String(endpoint) o.Retryer = aws.NopRetryer{} // Do not retry calls if they fail }) gremlinQuery := "g.addV('person').property('name','charlie').property(id,'charlie-1')" serializer := "application/vnd.gremlin-v1.0+json;types=false" gremlinInput := &neptunedata.ExecuteGremlinQueryInput{ GremlinQuery: &gremlinQuery, Serializer: &serializer, } gremlinResult, err := client.ExecuteGremlinQuery(context.TODO(), gremlinInput) if err != nil { fmt.Printf("Gremlin query failed: %v\n", err) } else { var resultMap map[string]interface{} err = gremlinResult.Result.UnmarshalSmithyDocument(&resultMap) if err != nil { fmt.Printf("Error unmarshaling Gremlin result: %v\n", err) } else { resultJSON, _ := json.MarshalIndent(resultMap, "", " ") fmt.Printf("Gremlin Result: %s\n", string(resultJSON)) } } }

Comment fonctionnent les points de terminaison publics

Lorsqu'une instance Neptune est accessible au public :

  • Son point de terminaison DNS est résolu vers l'adresse IP privée depuis le VPC du cluster de base de données.

  • Il est résolu vers l'adresse IP publique depuis l'extérieur du VPC du cluster.

  • L'accès est contrôlé par le groupe de sécurité attribué au cluster.

  • Seules les instances accessibles au public sont accessibles via Internet.

Comportement du terminal du lecteur

  • Si toutes les instances du lecteur sont accessibles au public, le point de terminaison du lecteur sera toujours résolu via l'Internet public.

  • Si seules certaines instances de lecteur sont accessibles au public, le point de terminaison du lecteur ne sera résolu publiquement que s'il sélectionne une instance accessible au public pour répondre à la requête de lecture.

Comportement des terminaux du cluster

  • Le point de terminaison du cluster de base de données est toujours le point de terminaison de l'instance du rédacteur.

  • Si le point de terminaison public est activé sur l'instance du rédacteur, le point de terminaison du cluster sera accessible au public, sinon il ne le sera pas.

Comportement après le basculement d'un cluster

  • Un cluster Neptune peut avoir des instances dans différents paramètres accessibles au public.

  • Si un cluster possède un rédacteur public et un lecteur non public, publiez un basculement du cluster, le nouveau rédacteur (lecteur précédent) devient non public et le nouveau lecteur (rédacteur précédent) devient public.

Exigences en matière de configuration du réseau

Pour que les points de terminaison publics fonctionnent correctement :

  1. Les instances Neptune doivent se trouver dans des sous-réseaux publics au sein de votre VPC.

  2. Les tables de routage associées à ces sous-réseaux doivent disposer d'une route vers une passerelle Internet pour 0.0.0.0/0.

  3. Le groupe de sécurité doit autoriser l'accès à partir des adresses IP publiques ou des plages d'adresses CIDR auxquelles vous souhaitez accorder l'accès.

Restreindre la création d'accès public

Vous pouvez utiliser les politiques IAM pour restreindre les personnes autorisées à créer ou à modifier des clusters Neptune avec un accès public. L'exemple de politique suivant refuse la création d'instances Neptune accessibles au public :

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "rds:CreateDBInstance", "rds:ModifyDBInstance", "rds:RestoreDBInstanceFromDBSnapshot", "rds:RestoreDBInstanceToPointInTime" ], "Resource": "*", "Condition": { "Bool": { "rds:PubliclyAccessible": true } } } ] }

En savoir plus sur la clé de condition rds:PublicAccessEnabled IAM : Amazon RDS Service Authorization Reference

AWS CloudFormation soutien

Vous pouvez l'utiliser AWS CloudFormation pour lancer des clusters Neptune avec des points de terminaison publics activés en spécifiant le PubliclyAccessible paramètre dans votre modèle. AWS CloudFormation

Compatibilité avec les fonctionnalités de Neptune

Un cluster dont les points de terminaison publics sont activés prend en charge toutes les fonctionnalités Neptune prises en charge par un cluster uniquement VPC, notamment :

  • Établi Neptune

  • Intégration de la recherche en texte intégral

  • Neptune Streams

  • Points de terminaison personnalisés

  • Neptune sans serveur

  • Explorateur de graphes

Tarification

Les terminaux publics sont disponibles sans frais supplémentaires au-delà de la tarification standard de Neptune. Cependant, la connexion de votre environnement local à Neptune via une adresse IP publique peut entraîner une augmentation des coûts de transfert de données.