

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
<a name="iam-auth-connecting-python"></a>

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
<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 ermöglicht

## 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-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
<a name="iam-auth-connecting-python-temp-creds"></a>

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
<a name="iam-auth-connecting-python-lambda"></a>

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](lambda-functions-examples.md)