View a markdown version of this page

Herstellen einer Verbindung zu Amazon Neptune Neptune-Datenbanken mithilfe der IAM-Authentifizierung mit Python - 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.

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

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

Voraussetzungen

  • Python 3.x

  • Die 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 neptune-db:* Aktionen auf Ihrem Neptune-Cluster ermöglicht

Verbindung mit Standardanmeldedaten herstellen

Dieser Ansatz funktioniert, wenn Anmeldeinformationen automatisch aufgelöst werden boto3 können, z. B. auf Amazon Elastic Compute Cloud-Instances mit Instanzprofilen, in AWS Lambda Funktionen oder mit konfigurierten AWS Profilen.

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 Client unterstützt SPARQL derzeit nicht. Um SPARQL-Abfragen an eine IAM-fähige Neptune-Datenbank zu senden, signieren Sie Anfragen manuell, indem Sie Signature Version 4 mit den Dienstprogrammen zur botocore Anforderungssignierung und der Bibliothek () verwenden. requests 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

In diesem Beispiel botocore.session.Session werden AWS Anmeldeinformationen automatisch aus Umgebungsvariablen, AWS Konfigurationsdateien, Instanzprofilen oder Lambda-Ausführungsrollen aufgelöst. Sie müssen die Anmeldeinformationen nicht explizit festlegen.

Verwenden temporärer Anmeldeinformationen

Verwenden Sie für kontoübergreifenden Zugriff, zeitlich begrenzte Sitzungen oder als bewährte Sicherheitsmethode zur Vermeidung langlebiger Anmeldeinformationen, temporäre Anmeldeinformationen abzurufen und eine AWS STS 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 vom Client nicht automatisch aktualisiert. Verwenden Sie für Anwendungen mit langer Laufzeit stattdessen profilbasierte Anmeldeinformationen oder Instanzprofile.

SPARQL

Da der boto3 neptunedata Client SPARQL derzeit nicht unterstützt, müssen Sie 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())

Verwenden mit AWS Lambda

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

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