View a markdown version of this page

Conexión a bases de datos de Amazon Neptune mediante la autenticación de IAM con Python - Amazon Neptune

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

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

  • 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

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

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

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