コマンドラインからの IAM 認証を使用した Amazon Neptune データベースへの接続 - Amazon Neptune

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

コマンドラインからの IAM 認証を使用した Amazon Neptune データベースへの接続

このドキュメントの多くの例に示されるように、Neptune DB クラスターにクエリを送信するためのコマンドラインツールがあると非常に便利です。curl ツールは、IAM 認証が有効になっていない場合に Neptune エンドポイントと通信するための優れたオプションです。

ただし、データを安全に保つには、IAM 認証を有効にするのが最善です。

IAM 認証が有効になっている場合、各リクエストは署名バージョン 4 (Sig4) を使用して署名する必要があります。サードパーティの awscurl コマンドラインツールは、curl と同じ構文を使用し、Sig4 署名を使用してクエリに署名できます。以下の awscurl の使用 セクションでは、一時的な認証情報で awscurl を安全に使用する方法について説明します。

HTTPS を使用するコマンドラインツールのセットアップ

Neptune では、すべての接続で HTTPS を使用する必要があります。HTTPS を使用するには、curl または awscurl などのコマンドラインツールが適切な証明書にアクセスする必要があります。curl または awscurl が適切な証明書を見つけられる限り、HTTP 接続と同じように HTTPS 接続を処理し、追加のパラメータを必要としません。このドキュメントの例はこのシナリオに基づいています。

そのような証明書を取得する方法と、curl が使える証明書を認証局 (CA) 証明書ストアに適切にフォーマットする方法については、curl ドキュメント内の「SSL 証明書の検証」を参照してください。

次に、CURL_CA_BUNDLE 環境変数を使用してこの CA 証明書ストアの場所を指定できます。Windows では、curl は自動的に curl-ca-bundle.crt という名前のファイルを検索します。まず curl.exe と同じディレクトリで curl.exe を検索し、次にこのパスの他の場所を検索します。詳細については、「SSL Certificate Verification」を参照してください。

一時的な認証情報で awscurl を使用して、IAM 認証が有効になっている DB クラスターに安全に接続する

awscurl ツールは、curl と同じ構文を使用しますが、追加情報も必要です。

  • --access_key — 有効なアクセスキー。このパラメータを使用して指定しなかった場合は、AWS_ACCESS_KEY_ID 環境変数または設定ファイルで指定する必要があります。

  • --secret_key - アクセスキーに対応する有効なシークレットキー。このパラメータを使用して指定しなかった場合は、AWS_SECRET_ACCESS_KEY 環境変数または設定ファイルで指定する必要があります。

  • --security_token — 有効なセッショントークン。このパラメータを使用して指定しなかった場合は、AWS_SECURITY_TOKEN 環境変数または設定ファイルで指定する必要があります。

以前は、IAM ユーザー認証情報やルート認証情報などの永続認証情報を awscurl で使用するのが一般的でしたが、これは推奨されません。代わりに、AWS セキュリティトークンサービス (STS) API のいずれか、またはそのAWS CLI ラッパーのいずれかを使用して、一時的な認証情報を生成してください。

STS 呼び出しによって返される AccessKeyIdSecretAccessKey、および SessionToken 値は、設定ファイルではなく、シェルセッション内の適切な環境変数に置くのが最善です。その後、シェルを終了すると、認証情報は自動的に破棄されますが、設定ファイルの場合はそうではありません。同様に、一時的な認証情報について、必要と思われる期間よりも長い期間をリクエストしないでください。

次の例は、Linux シェルで sts assume-role を使用して 30 分有効な一時的な認証情報を取得し、awscurl で検索できる環境変数に格納する手順を示しています。

aws sts assume-role \ --duration-seconds 1800 \ --role-arn "arn:aws:iam::(account-id):role/(rolename)" \ --role-session-name AWSCLI-Session > $output AccessKeyId=$(cat $output | jq '.Credentials''.AccessKeyId') SecretAccessKey=$(cat $output | jq '.Credentials''.SecretAccessKey') SessionToken=$(cat $output | jq '.Credentials''.SessionToken') export AWS_ACCESS_KEY_ID=$AccessKeyId export AWS_SECRET_ACCESS_KEY=$SecretAccessKey export AWS_SESSION_TOKEN=$SessionToken

その後、awscurl を使用して DB クラスターに次のような署名付きリクエストを行うことができます。

awscurl (your cluster endpoint):8182/status \ --region us-east-1 \ --service neptune-db