View a markdown version of this page

Menghubungkan ke database Amazon Neptune menggunakan otentikasi IAM dengan Python - Amazon Neptune

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menghubungkan ke database Amazon Neptune menggunakan otentikasi IAM dengan Python

boto3neptunedataKlien menyediakan cara paling sederhana untuk terhubung ke database IAM-enabled Neptunus dari Python. Klien menangani penandatanganan Signature Version 4 secara otomatis, jadi Anda tidak perlu menandatangani permintaan sendiri.

Prasyarat

  • Python 3.x

  • Per boto3 pustakaan: pip install boto3

  • AWS kredenSIAL dikonfigurasi melalui metode standar apa pun (variabel lingkungan, file AWS konfigurasi, profil instance, atau peran eksekusi Lambda)

  • Kebijakan IAM yang memungkinkan neptune-db:* tindakan pada cluster Neptunus Anda

Menghubungkan dengan kredentif default

Pendekatan ini berfungsi ketika boto3 dapat menyelesaikan kredenSIAL secara otomatis, seperti pada instans Amazon Elastic Compute Cloud dengan profil instans, dalam AWS Lambda fungsi, atau dengan AWS profil yang dikonfigurasi.

Ganti URL titik akhir dengan titik akhir cluster Neptunus Anda.

Gremlin dan 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

boto3neptunedataKlien saat ini tidak mendukung SPARQL. Untuk mengirim kueri SPARQL ke database IAM-enabled Neptune, tanda tangani permintaan secara manual dengan menggunakan Signature Version 4 dengan utilitas botocore penandatanganan permintaan dan requests library (). 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())
catatan

Contoh ini digunakan botocore.session.Session untuk menyelesaikan AWS kredenSIAL secara otomatis dari variabel lingkungan, file AWS konfigurasi, profil instance, atau peran eksekusi Lambda. Anda tidak perlu mengatur kredenSIAL secara eksplisit.

Menggunakan kredensial sementara

Untuk akses lintas akun, sesi terbatas waktu, atau sebagai praktik terbaik keamanan untuk menghindari kredenSIAL berumur panjang, gunakan AWS STS untuk mendapatkan kredenSIAL sementara dan membuat. boto3.Session

Gremlin dan 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'])
catatan

KredenSIAL sementara kedaluwarsa setelah interval tertentu (defaultnya adalah 1 jam) dan tidak diperbarui secara otomatis oleh klien. Untuk aplikasi yang berjalan lama, gunakan kredenSIAL berbasis profil atau profil instance sebagai gantinya.

SPARQL

Karena boto3 neptunedata klien saat ini tidak mendukung SPARQL, Anda harus menandatangani permintaan secara manual dengan kredenSIAL sementara.

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

Menggunakan dengan AWS Lambda

Di Lambda, peran eksekusi menyediakan kredenSIAL secara otomatis melaluiboto3. Contoh kredenSIAL default berfungsi tanpa modifikasi.

Untuk contoh Lambda lengkap dengan manajemen koneksi dan logika coba ulang, lihat. AWS Lambda contoh fungsi untuk Amazon Neptunus