Skip to content

RDS PostgreSQL接続時の「no pg_hba.conf entry」エラー解決

問題の本質

AWS RDS PostgreSQLへの接続時に発生するエラー「no pg_hba.conf entry for host...」は、主に次のいずれかが原因で発生します:

  1. SSL/TLS暗号化が必須な環境で非暗号化接続を試行
  2. クライアントIPアドレスがRDSセキュリティグループで許可されていない
  3. クライアント証明書検証の失敗
  4. RDS側の認証設定(pg_hba.conf) に適合しない接続方法

推奨解決策:安全なSSL接続の確立

方法1:クライアント側でSSLを強制(ベストプラクティス)

ts
import fs from 'fs';
import pg from 'pg';

const pool = new pg.Pool({
  user: 'your_user',
  host: 'your-rds-endpoint',
  database: 'your_db',
  password: 'your_password',
  port: 5432,
  ssl: {
    rejectUnauthorized: true,
    ca: fs.readFileSync('path/to/rds-ca-2019-root.pem').toString()
  }
});

必要な手順:

  1. AWS公式からリージョン対応のCA証明書をダウンロード
    bash
    # グローバルリージョン証明書の例
    curl -O https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
  2. AWSコンソールでRDSインスタンスの「接続とセキュリティ」タブからCertificate authorityを確認
  3. 証明書ファイルをアプリケーションからアクセス可能なパスに配置
  4. 接続設定にsslパラメータを追加

方法2:SSLモードの明示指定(psqlの場合)

bash
psql "postgresql://user:password@host:5432/dbname?sslmode=require"

sslmodeオプション早見表:

モード暗号化証明書検証推奨環境
disable××非推奨
allow×テスト
prefer×移行期間
require×スタンダード
verify-caセキュア
verify-full本番環境

代替解決策と注意点

一時的回避策(非推奨)

パラメータグループでrds.force_sslを無効化する方法:

  1. 新規パラメータグループ作成(例: pg-custom
  2. rds.force_ssl10に変更
  3. RDSインスタンスにパラメータグループを適用
  4. インスタンス再起動

警告

この方法はSSL暗号化を無効化するため本番環境では絶対に使用しないでください。中間者攻撃のリスクが発生します。

よくある落とし穴

  • Secrets Manager連携時のパスワードローテーション
    Secrets Managerと連携時、パスワード更新後にRDSが新しい認証情報を認識するまでタイムラグが発生。この間、誤ったpg_hba.confエラーが表示される

    • 対応策: RDSインスタンスを再起動
  • クライアントライブラリの不一致
    AWS Glueで発生例:Glue 2.0では追加JARが必要

    bash
    --extra-jars s3://bucket/postgresql-42.6.2.jar
    --user-jars-first true

接続チェックリスト

  1. ✅ セキュリティグループで送信元IPを許可
  2. ✅ SSLモードをrequire以上に設定(verify-full推奨)
  3. ✅ 正しいCA証明書を使用(AWS公式リンクからダウンロード)
  4. ✅ マスターユーザー名がAWSコンソールと一致しているか確認
  5. ✅ RDS証明書の有効期限切れをチェック(定期的な更新が必要)

AWSコンソールでできる設定EC2接続の自動設定
→ RDSコンソールの「Connected compute resources」からワンクリックでセキュリティグループを設定可能


根本原因とベストプラクティス

このエラーの本質は「RDSがクライアント接続を信頼できない」状態。適切な暗号化と認証設定で解決可能ですが、以下の原則が重要です:

  1. 証明書検証を常に有効化rejectUnauthorized:true
  2. 証明書は定期的に更新(AWSは5年ごとにCA更新)
  3. パスワードよりもIAM認証を活用
  4. Secrets Manager使用時はローテーション間隔に注意

安全な接続設定は最初の手間こそかかりますが、データ流出防止には不可欠な投資です。適切なSSL設定を採用することで、本エラーを根本的に解決しながら、AWS環境のセキュリティを向上させましょう。