

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-Datenbanken mithilfe der IAM-Authentifizierung mit Python
<a name="iam-auth-connecting-python"></a>

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

## Voraussetzungen
<a name="iam-auth-connecting-python-prereqs"></a>
+ 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 zulässt

## Verbindung mit Standardanmeldedaten herstellen
<a name="iam-auth-connecting-python-default"></a>

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-enabled Neptune-Datenbank zu senden, signieren Sie Anfragen manuell, indem Sie Signature Version 4 mit den Dienstprogrammen zum `botocore` Signieren von Anfragen 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 werden AWS Anmeldeinformationen automatisch aus Umgebungsvariablen, AWS Konfigurationsdateien, Instanzprofilen oder Lambda-Ausführungsrollen aufgelöst. `botocore.session.Session` Sie müssen die Anmeldeinformationen nicht explizit festlegen.

## Verwenden temporärer Anmeldeinformationen
<a name="iam-auth-connecting-python-temp-creds"></a>

Für kontoübergreifenden Zugriff, zeitlich begrenzte Sitzungen oder als bewährte Sicherheitsmethode zur Vermeidung langlebiger Anmeldeinformationen verwenden Sie diese Option, um 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 nicht automatisch vom Client 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
<a name="iam-auth-connecting-python-lambda"></a>

In Lambda stellt die Ausführungsrolle Anmeldeinformationen automatisch über `boto3` bereit. 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](lambda-functions-examples.md)