

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con Python
<a name="iam-auth-connecting-python"></a>

El `boto3` `neptunedata` cliente proporciona la forma más sencilla de conectarse a una base de datos Neptune habilitada para IAM desde Python. El cliente gestiona automáticamente la firma de la versión 4 de Signature, por lo que no es necesario que firme las solicitudes usted mismo.

## Requisitos previos
<a name="iam-auth-connecting-python-prereqs"></a>
+ Python 3.x
+ La `boto3` biblioteca: `pip install boto3`
+ AWS credenciales configuradas mediante cualquier método estándar (variables de entorno, archivo de AWS configuración, perfil de instancia o función de ejecución de Lambda)
+ Una política de IAM que permite realizar `neptune-db:*` acciones en su clúster de Neptune

## Conectarse con las credenciales predeterminadas
<a name="iam-auth-connecting-python-default"></a>

Este enfoque funciona cuando se `boto3` pueden resolver las credenciales automáticamente, como en las instancias de Amazon Elastic Compute Cloud con perfiles de instancia, en AWS Lambda funciones o con AWS perfiles configurados.

Sustituya la URL del punto final por el punto final del clúster de Neptune.

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

El `boto3` `neptunedata` cliente no es compatible actualmente con SPARQL. Para enviar consultas de SPARQL a una base de datos de Neptune habilitada para IAM, firme las solicitudes manualmente mediante Signature Version 4 con las utilidades de firma de solicitudes y `botocore` la biblioteca (). `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**  
Este ejemplo se utiliza `botocore.session.Session` para resolver automáticamente AWS las credenciales de las variables de entorno, los archivos de AWS configuración, los perfiles de instancia o las funciones de ejecución de Lambda. No es necesario establecer las credenciales de forma explícita.

## Uso de credenciales temporales
<a name="iam-auth-connecting-python-temp-creds"></a>

Para acceder a varias cuentas, realizar sesiones con un límite de tiempo o, como medida de seguridad recomendada para evitar que las credenciales duren mucho tiempo, utilícelas AWS STS para obtener credenciales temporales y crear una. `boto3.Session`

**Gremlin y 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**  
Las credenciales temporales caducan después de un intervalo específico (el valor predeterminado es de 1 hora) y el cliente no las actualiza automáticamente. En el caso de las aplicaciones de ejecución prolongada, utilice credenciales basadas en perfiles o perfiles de instancia en su lugar.

**SPARQL**

Como el `boto3` `neptunedata` cliente no es compatible actualmente con SPARQL, debe firmar las solicitudes manualmente con las credenciales temporales.

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

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

En Lambda, la función de ejecución proporciona credenciales automáticamente de forma automática. `boto3` El ejemplo de credenciales predeterminadas funciona sin modificaciones.

Para ver un ejemplo completo de Lambda con administración de conexiones y lógica de reintentos, consulte. [AWS Lambda ejemplos de funciones para Amazon Neptune](lambda-functions-examples.md)