View a markdown version of this page

Python による IAM 認証を使用した Amazon Neptune データベースへの接続 - Amazon Neptune

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Python による IAM 認証を使用した Amazon Neptune データベースへの接続

boto3 neptunedata クライアントは、Python から IAM 対応の Neptune データベースに接続する最も簡単な方法を提供します。クライアントは署名バージョン 4 の署名を自動的に処理するため、自分でリクエストに署名する必要はありません。

前提条件

  • Python 3.x

  • boto3 ライブラリ: pip install boto3

  • AWS 標準メソッド (環境変数、 AWS 設定ファイル、インスタンスプロファイル、または Lambda 実行ロール) を使用して設定された 認証情報

  • Neptune クラスターでneptune-db:*アクションを許可する IAM ポリシー

デフォルトの認証情報を使用した接続

このアプローチboto3は、インスタンスプロファイルを持つ Amazon Elastic Compute Cloud インスタンス、 AWS Lambda 関数、設定済み AWS プロファイルなど、 が認証情報を自動的に解決できる場合に役立ちます。

エンドポイント URL を Neptune クラスターエンドポイントに置き換えます。

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

boto3 neptunedata クライアントは現在 SPARQL をサポートしていません。SPARQL クエリを IAM 対応 Neptune データベースに送信するには、リクエスト署名ユーティリティとrequestsライブラリ () で署名バージョン 4 を使用してbotocoreリクエストを手動で署名します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())
注記

この例ではbotocore.session.Session、 を使用して、環境変数、 AWS 設定ファイル、インスタンスプロファイル、または Lambda 実行ロールから AWS 認証情報を自動的に解決します。認証情報を明示的に設定する必要はありません。

一時的な認証情報を使用する

クロスアカウントアクセス、時間制限付きセッション、または存続期間の長い認証情報を避けるためのセキュリティのベストプラクティスとして、 AWS STS を使用して一時的な認証情報を取得し、 を作成しますboto3.Session

Gremlin と 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'])
注記

一時的な認証情報は、指定された間隔 (デフォルトは 1 時間) 後に期限切れになり、クライアントによって自動的に更新されません。長時間実行されるアプリケーションの場合は、代わりにプロファイルベースの認証情報またはインスタンスプロファイルを使用します。

SPARQL

boto3 neptunedata クライアントは現在 SPARQL をサポートしていないため、一時的な認証情報を使用してリクエストを手動で署名する必要があります。

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

での の使用 AWS Lambda

Lambda では、実行ロールは を介して認証情報を自動的に提供しますboto3。デフォルトの認証情報の例では、変更なしで動作します。

接続管理と再試行ロジックの完全な Lambda の例については、「」を参照してくださいAWS Lambda Amazon Neptune の 関数の例