コマンドラインから IAM 認証を使用して DB インスタンスに接続する: AWS CLI および psql クライアント - Amazon Relational Database Service

コマンドラインから IAM 認証を使用して DB インスタンスに接続する: AWS CLI および psql クライアント

以下に示すように、AWS CLI および psql コマンドラインツールを使用して、コマンドラインから Amazon RDS for PostgreSQL DB インスタンスに接続できます。

前提条件

IAM 認証を使用して DB インスタンスに接続するための前提条件は以下のとおりです。

注記

pgAdminを使用してIAM認証でデータベースに接続する方法については、ブログ記事IAM認証を使用してpgAdmin Amazon Aurora PostgreSQLまたはAmazon RDS for PostgreSQLで接続するを参照してください。

IAM 認証トークンの生成

認証トークンは数百の文字で構成されるため、コマンドラインでは手に負えなくなる可能性があります。この問題を回避する 1 つの方法は、環境可変にトークンを保存し、接続時にその可変を使用することです。次の例では、AWS CLI コマンドを使用して署名された認証トークンを取得するために generate-db-auth-token を使用し、PGPASSWORD 環境可変に格納する方法を示しています。

export RDSHOST="rdspostgres.123456789012.us-west-2.rds.amazonaws.com" export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region us-west-2 --username jane_doe )"

例では、generate-db-auth-token コマンドへのパラメータは次のとおりです。

  • --hostname - アクセス先の DB インスタンス のホスト名

  • --port - DB インスタンスへの接続に使用するポート番号

  • --region - DB インスタンスが実行中の AWS リージョン

  • --username - アクセス先のデータベースアカウント

生成されたトークンの初期の複数の文字は次のようになります。

rdspostgres.123456789012.us-west-2.rds.amazonaws.com:5432/?Action=connect&DBUser=jane_doe&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=900...
注記

DB インスタンスエンドポイントの代わりにカスタム Route 53 DNS レコードを使用して認証トークンを生成することはできません。

Amazon RDS PostgreSQL インスタンスへの接続

psql を使用して接続する全般的な形式を次に示します。

psql "host=hostName port=portNumber sslmode=verify-full sslrootcert=full_path_to_ssl_certificate dbname=DBName user=userName password=authToken"

パラメータは次のとおりです。

  • host - アクセス先の DB インスタンス のホスト名

  • port - DB インスタンスへの接続に使用するポート番号

  • sslmode - 使用する SSL モード

    sslmode=verify-full を使用すると、SSL 接続で DB インスタンスのエンドポイントを SSL 証明書のエンドポイントと照合します。

  • sslrootcert -公開キーを含む SSL 証明書ファイルへのフルパス

    詳細については、「PostgreSQL DB インスタンスで SSL を使用する」を参照してください。

    SSL 証明書をダウンロードするには SSL/TLS を使用した DB インスタンスまたはクラスターへの接続の暗号化 を参照ください。

  • dbname - アクセス先のデータベース

  • user - アクセス先のデータベースアカウント

  • password - 署名済みの IAM 認証トークン

注記

DB インスタンスエンドポイントの代わりにカスタム Route 53 DNS レコードを使用して認証トークンを生成することはできません。

次の例は、psql を使用して接続する方法を示しています。この例の psql では、環境変数 RDSHOST をホスト用に、また、環境変数 PGPASSWORD を生成されたトークン用に使用しています。また、/sample_dir/ は公開キーを含む SSL 証明書ファイルへの完全なパスを示します。

export RDSHOST="rdspostgres.123456789012.us-west-2.rds.amazonaws.com" export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region us-west-2 --username jane_doe )" psql "host=$RDSHOST port=5432 sslmode=verify-full sslrootcert=/sample_dir/global-bundle.pem dbname=DBName user=jane_doe password=$PGPASSWORD"

プロキシ経由で DB インスタンスに接続する場合は、「IAM 認証を使用したプロキシへの接続」を参照してください。