Şu tarihte

Postgres: no pg_hba.conf entry for host

Canımız ciğerimiz PostgreSQL'i AWS RDS (Relational Database Service, AWS'in yönetilen veritabanı hizmeti) üzerinde 14. sürümden 15. sürüme yükseltirken RDS'in şart koştuğu Parameter Group'un versiyon uyumlu olması gerekliliği doğmakta. Yani 14. sürümün parametre grubu ile 15. sürüme geçemiyorsunuz. Bu sebeple öncelikle yeni bir parametre grubu oluşturulmalı, bu parametre grubu RDS kaynağımıza (yani PostgreSQL) tanımlanmalı ve ardından yükseltme işlemi gerçekleştirilmelidir. Bu işlemleri AWS Console üzerinden yapabileceğiniz gibi AWS CDK (Cloud Development Kit) ile de yapabilirsiniz. Buradaki tanımlamaları yaptıktan sonra kaynağımıza aşağıdaki tanımlamayı yaparak sürümünü AWS CDK ile yükseltebiliyoruz.

rds.DatabaseInstanceEngine.postgres({ version: rds.PostgresEngineVersion.VER_15_4 })

Yalnız AWS CDK sizden parametre grubunun versiyonunu da istediği için onu da yükseltiyorsunuz. AWS CDK deploy esnasında bu parametre grubunu oluşturuyor ve ardından senkronize edip PostgreSQL yükseltmesine başlıyor. Buraya kadar her şey güzel ve tıkır tıkır ilerliyor.

Yükseltme işlemi tamamlandığında (AWS CDK deployu tamamlandığında) uygulamalarınız bağlanırken aşağıdaki gibi bir hata alıyor olabilir:

error: no pg_hba.conf entry for host "xx.xx.xx.xx", user "myUser", database "myDatabase", no encryption

Bu hata bize veritabanına erişebilecek IP/CIDR bloklarının doğru tanımlanmadığına veya bağlantıda bu erişim için gerekli TLS şartlarının sağlanmadığına işaret etmektedir. Bu noktada uygulamalarınız Postgres'e bağlanamıyor ve downtime yaşıyor olabilirsiniz. Şayet AWS RDS'te olmasaydık bu konfigürasyon dosyasını (pg_hba.conf) editlememiz veya incelememiz gerekecekti fakat biz bunları yönetmesi için AWS RDS'i kullanıyoruz. Peki bu sorunu AWS RDS üzerinde nasıl çözeceğiz? 14. sürümündeyken gayet düzgün çalışan veritabanımız şimdi bize neden böyle bir erişim kaynaklı hata fırlatıyor bunu düşünelim. Yukarıda da bahsettiğim gibi RDS'te bir Parameter Group tanımlaması var, bu tanımlamalar veritabanımızın RDS'in izin verdiği ölçüde konfigürasyonları ile oynayabilmemize imkan tanımakta. Parameter Group'ta bu aslında pg_hba.conf'u direkt olarak düzenleyebileceğimiz bir yer değil. Bu noktada yeni oluşturulan Parameter Group ile RDS'in öntanımlı olarak oluşturduğu Parameter Group'u AWS Console üzerinden karşılaştırma yaparak farklılıkları anlayabiliriz. RDS arayüzünde Parameter groups kısmında iki Parameter group seçip Compare dediğinizde farkları görebileceksiniz. Fakat burada da farkı göremeyeceksiniz çünkü eğer tanımlamadıysanız bu sorunu yaratan konfigürasyon buradaki ekranda görünmeyecektir. Bu noktada yardımımıza AWS dokümantasyonu yetişmekte. Buradaki dokümanda:

The default rds.force_ssl parameter is set to 1 (on) for RDS for PostgreSQL version 15. All other RDS for PostgreSQL major version 14 and older have the default value for rds.force_ssl parameter set to 0 (off).

Bize PostgreSQL 15. sürümüyle rds.force_ssl parametresinin 1 (yani açık) hale getirildiği belirtiliyor. Gerçekten de Parameter grubunda rds.force_ssl değerinin 1 olduğunu görüyoruz, bu değer değiştirilebilir ve sorunu çözmek için bu değeri 0 (yani kapalı) hale getirerek sorunu çözebiliriz.

Dokümandan da anlaşılabileceği gibi sorun 15. sürüme geçerken yaşanıyor yani mevcut PostgreSQL sürümünüzün ne olduğunun bir önemi yok.