RDS PostgreSQL接続時の「no pg_hba.conf entry」エラー解決
問題の本質
AWS RDS PostgreSQLへの接続時に発生するエラー「no pg_hba.conf entry for host...」は、主に次のいずれかが原因で発生します:
- SSL/TLS暗号化が必須な環境で非暗号化接続を試行
- クライアントIPアドレスがRDSセキュリティグループで許可されていない
- クライアント証明書検証の失敗
- RDS側の認証設定(
pg_hba.conf
) に適合しない接続方法
推奨解決策:安全なSSL接続の確立
方法1:クライアント側でSSLを強制(ベストプラクティス)
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()
}
});
必要な手順:
- AWS公式からリージョン対応のCA証明書をダウンロードbash
# グローバルリージョン証明書の例 curl -O https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
- AWSコンソールでRDSインスタンスの「接続とセキュリティ」タブからCertificate authorityを確認
- 証明書ファイルをアプリケーションからアクセス可能なパスに配置
- 接続設定に
ssl
パラメータを追加
方法2:SSLモードの明示指定(psql
の場合)
psql "postgresql://user:password@host:5432/dbname?sslmode=require"
sslmodeオプション早見表:
モード | 暗号化 | 証明書検証 | 推奨環境 |
---|---|---|---|
disable | × | × | 非推奨 |
allow | △ | × | テスト |
prefer | ○ | × | 移行期間 |
require | ○ | × | スタンダード |
verify-ca | ○ | △ | セキュア |
verify-full | ○ | ○ | 本番環境 |
代替解決策と注意点
一時的回避策(非推奨)
パラメータグループでrds.force_ssl
を無効化する方法:
- 新規パラメータグループ作成(例:
pg-custom
) rds.force_ssl
を1
→0
に変更- RDSインスタンスにパラメータグループを適用
- インスタンス再起動
警告
この方法は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
接続チェックリスト
- ✅ セキュリティグループで送信元IPを許可
- ✅ SSLモードを
require
以上に設定(verify-full
推奨) - ✅ 正しいCA証明書を使用(AWS公式リンクからダウンロード)
- ✅ マスターユーザー名がAWSコンソールと一致しているか確認
- ✅ RDS証明書の有効期限切れをチェック(定期的な更新が必要)
AWSコンソールでできる設定:EC2接続の自動設定
→ RDSコンソールの「Connected compute resources」からワンクリックでセキュリティグループを設定可能
根本原因とベストプラクティス
このエラーの本質は「RDSがクライアント接続を信頼できない」状態。適切な暗号化と認証設定で解決可能ですが、以下の原則が重要です:
- 証明書検証を常に有効化(
rejectUnauthorized:true
) - 証明書は定期的に更新(AWSは5年ごとにCA更新)
- パスワードよりもIAM認証を活用
- Secrets Manager使用時はローテーション間隔に注意
安全な接続設定は最初の手間こそかかりますが、データ流出防止には不可欠な投資です。適切なSSL設定を採用することで、本エラーを根本的に解決しながら、AWS環境のセキュリティを向上させましょう。