View a markdown version of this page

Verbindung zu Amazon Neptune-Datenbanken mithilfe der IAM-Authentifizierung mit Python herstellen - Amazon Neptune

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verbindung zu Amazon Neptune-Datenbanken mithilfe der IAM-Authentifizierung mit Python herstellen

Der boto3 neptunedata Der Client bietet die einfachste Möglichkeit, eine Verbindung zu einem herzustellen IAM-enabled Neptune-Datenbank von Python. Der Client verarbeitet das Signieren mit Signature Version 4 automatisch, sodass Sie Anfragen nicht selbst signieren müssen.

Voraussetzungen

  • Python 3.x

  • Das boto3 Bibliothek: pip install boto3

  • AWS Anmeldeinformationen, die mit einer beliebigen Standardmethode konfiguriert wurden (Umgebungsvariablen, AWS Konfigurationsdatei, Instanzprofil oder Lambda-Ausführungsrolle)

  • Eine IAM-Richtlinie, die Folgendes ermöglicht neptune-db:* Aktionen auf Ihrem Neptune-Cluster

Verbindung mit Standardanmeldedaten herstellen

Dieser Ansatz funktioniert, wenn boto3 kann Anmeldeinformationen automatisch auflösen, z. B. auf Amazon Elastic Compute Cloud-Instanzen mit Instanzprofilen, in AWS Lambda Funktionen oder mit konfigurierten AWS Profile.

Ersetzen Sie die Endpunkt-URL durch Ihren Neptune-Cluster-Endpunkt.

Gremlin und OpenCypher

import boto3 from botocore.config import Config cfg = Config(retries={"total_max_attempts": 1, "mode": "standard"}, read_timeout=None) neptune = boto3.client('neptunedata', config=cfg, region_name='us-east-1', endpoint_url='https://your-neptune-endpoint:8182') # Gremlin resp = neptune.execute_gremlin_query(gremlinQuery='g.V().limit(1)') print(resp['result']) # openCypher resp = neptune.execute_open_cypher_query(openCypherQuery='MATCH (n) RETURN n LIMIT 1') print(resp['results'])

SPARQL

Der boto3 neptunedata Der Client unterstützt SPARQL derzeit nicht. Um SPARQL-Abfragen an einen zu senden IAM-enabled Neptune-Datenbank, signieren Sie Anfragen manuell, indem Sie Signature Version 4 mit dem botocore Dienstprogramme zum Signieren von Anfragen und requests Bibliothek (pip install boto3 requests).

import requests from botocore.auth import SigV4Auth from botocore.awsrequest import AWSRequest from botocore.session import Session endpoint = 'https://your-neptune-endpoint:8182' region = 'us-east-1' query = 'SELECT ?s ?p ?o WHERE { ?s ?p ?o } LIMIT 1' request = AWSRequest(method='POST', url=f'{endpoint}/sparql/', data={'query': query}) SigV4Auth(Session().get_credentials(), 'neptune-db', region).add_auth(request) resp = requests.post(f'{endpoint}/sparql/', headers=request.headers, data={'query': query}) print(resp.json())
Anmerkung

Dieses Beispiel verwendet botocore.session.Session zu lösen AWS Anmeldeinformationen automatisch aus Umgebungsvariablen, AWS Konfigurationsdateien, Instanzprofile oder Lambda-Ausführungsrollen. Sie müssen die Anmeldeinformationen nicht explizit festlegen.

Verwenden temporärer Anmeldeinformationen

Für kontoübergreifenden Zugriff, zeitlich begrenzte Sitzungen oder als bewährte Sicherheitsmethode zur Vermeidung langlebiger Anmeldeinformationen verwenden Sie AWS STS um temporäre Anmeldeinformationen abzurufen und eine zu erstellen boto3.Session.

Gremlin und OpenCypher

import boto3 from botocore.config import Config sts = boto3.client('sts') creds = sts.assume_role( RoleArn='arn:aws:iam::123456789012:role/NeptuneRole', RoleSessionName='neptune-session' )['Credentials'] session = boto3.Session( aws_access_key_id=creds['AccessKeyId'], aws_secret_access_key=creds['SecretAccessKey'], aws_session_token=creds['SessionToken'], region_name='us-east-1' ) cfg = Config(retries={"total_max_attempts": 1, "mode": "standard"}, read_timeout=None) neptune = session.client('neptunedata', config=cfg, endpoint_url='https://your-neptune-endpoint:8182') # Gremlin resp = neptune.execute_gremlin_query(gremlinQuery='g.V().limit(1)') print(resp['result']) # openCypher resp = neptune.execute_open_cypher_query(openCypherQuery='MATCH (n) RETURN n LIMIT 1') print(resp['results'])
Anmerkung

Temporäre Anmeldeinformationen laufen nach einem bestimmten Intervall ab (die Standardeinstellung ist 1 Stunde) und werden nicht automatisch vom Client aktualisiert. Verwenden Sie für Anwendungen mit langer Laufzeit stattdessen profilbasierte Anmeldeinformationen oder Instanzprofile.

SPARQL

Weil der boto3 neptunedata Der Client unterstützt SPARQL derzeit nicht, Sie müssen Anfragen manuell mit den temporären Anmeldeinformationen signieren.

import boto3 import requests from botocore.auth import SigV4Auth from botocore.awsrequest import AWSRequest from botocore.credentials import ReadOnlyCredentials sts = boto3.client('sts') creds = sts.assume_role( RoleArn='arn:aws:iam::123456789012:role/NeptuneRole', RoleSessionName='neptune-session' )['Credentials'] endpoint = 'https://your-neptune-endpoint:8182' region = 'us-east-1' query = 'SELECT ?s ?p ?o WHERE { ?s ?p ?o } LIMIT 1' request = AWSRequest(method='POST', url=f'{endpoint}/sparql/', data={'query': query}) SigV4Auth(ReadOnlyCredentials( creds['AccessKeyId'], creds['SecretAccessKey'], creds['SessionToken'] ), 'neptune-db', region).add_auth(request) resp = requests.post(f'{endpoint}/sparql/', headers=request.headers, data={'query': query}) print(resp.json())

Verwendung mit AWS Lambda

In Lambda stellt die Ausführungsrolle Anmeldeinformationen automatisch bereit über boto3. Das Beispiel für Standardanmeldeinformationen funktioniert ohne Änderung.

Ein vollständiges Lambda-Beispiel mit Verbindungsverwaltung und Wiederholungslogik finden Sie unter AWS Lambda Funktionsbeispiele für Amazon Neptune.