View a markdown version of this page

Menghubungkan ke database Amazon Neptunus 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 Neptunus menggunakan otentikasi IAM dengan Python

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

Prasyarat

  • Python 3.x

  • boto3Perpustakaan: pip install boto3

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

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

Menghubungkan dengan kredensi default

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

Ganti URL endpoint dengan endpoint 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 Neptunus berkemampuan IAM, tandatangani permintaan secara manual dengan menggunakan Signature Version 4 dengan utilitas penandatanganan permintaan dan library (). botocore 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())
catatan

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

Menggunakan kredensial sementara

Untuk akses lintas akun, sesi terbatas waktu, atau sebagai praktik terbaik keamanan untuk menghindari kredensi berumur panjang, gunakan AWS STS untuk mendapatkan kredensil sementara dan buat file. 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

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

SPARQL

Karena boto3 neptunedata klien saat ini tidak mendukung SPARQL, Anda harus menandatangani permintaan secara manual dengan kredensi 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 memberikan kredensil secara otomatis melalui. boto3 Contoh kredensyal default berfungsi tanpa modifikasi.

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