

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Connessione ai database Amazon Neptune utilizzando l'autenticazione IAM con Python
<a name="iam-auth-connecting-python"></a>

Il `boto3` `neptunedata` client fornisce il modo più semplice per connettersi a un database Neptune abilitato per IAM da Python. Il client gestisce automaticamente la firma della versione 4 di Signature, quindi non è necessario firmare personalmente le richieste.

## Prerequisiti
<a name="iam-auth-connecting-python-prereqs"></a>
+ Python 3.x
+ La `boto3` libreria: `pip install boto3`
+ AWS credenziali configurate tramite qualsiasi metodo standard (variabili di ambiente, file di AWS configurazione, profilo di istanza o ruolo di esecuzione Lambda)
+ Una policy IAM che consente `neptune-db:*` azioni sul cluster Neptune

## Connessione con credenziali predefinite
<a name="iam-auth-connecting-python-default"></a>

Questo approccio funziona quando `boto3` è possibile risolvere automaticamente le credenziali, ad esempio su istanze Amazon Elastic Compute Cloud con profili di istanza, AWS Lambda funzioni o profili configurati. AWS 

Sostituisci l'URL dell'endpoint con l'endpoint del cluster Neptune.

**Gremlin e 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**

Il `boto3` `neptunedata` client attualmente non supporta SPARQL. Per inviare query SPARQL a un database Neptune abilitato a IAM, firma le richieste manualmente utilizzando Signature Version 4 con le utilità di firma delle richieste e `botocore` la libreria (). `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())
```

**Nota**  
Questo esempio consente `botocore.session.Session` di risolvere automaticamente AWS le credenziali da variabili di ambiente, file di AWS configurazione, profili di istanza o ruoli di esecuzione Lambda. Non è necessario impostare le credenziali in modo esplicito.

## Utilizzo di credenziali temporanee
<a name="iam-auth-connecting-python-temp-creds"></a>

Per l'accesso a più account, per sessioni a tempo limitato o come best practice di sicurezza per evitare credenziali di lunga durata, utilizza l'opzione per ottenere credenziali temporanee e AWS STS creare un. `boto3.Session`

**Gremlin e 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'])
```

**Nota**  
Le credenziali temporanee scadono dopo un intervallo specificato (l'impostazione predefinita è 1 ora) e non vengono aggiornate automaticamente dal client. Per le applicazioni a esecuzione prolungata, utilizza invece credenziali basate sul profilo o profili di istanza.

**SPARQL**

Poiché il `boto3` `neptunedata` client attualmente non supporta SPARQL, è necessario firmare le richieste manualmente con le credenziali temporanee.

```
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())
```

## Utilizzo con AWS Lambda
<a name="iam-auth-connecting-python-lambda"></a>

In Lambda, il ruolo di esecuzione fornisce automaticamente le credenziali tramite. `boto3` L'esempio di credenziali predefinite funziona senza modifiche.

Per un esempio completo di Lambda con gestione delle connessioni e logica dei tentativi, vedi. [AWS Lambda esempi di funzioni per Amazon Neptune](lambda-functions-examples.md)