CodeBuild'den RDS'ye bağlantı sorunu

Sep 27 2020

Bir CodeBuild projesinden Postgres RDS sunucusuz örneğini bağlamaya çalışıyorum.

başarısız olduğu yer burası: psql --host ${PG_HOST} --dbname ${PG_DBNAME} --user ${SECRET_USER} -f /tmp/file

/ tmp / dosyası var, bu nedenle dosya izni / var olmayan bir sorun söz konusu değil

Şimdiye kadar denediğim şey, kullanıcı adı ve şifre:

  1. CodeBuild'de ortam değişkenleri olarak depolanır
  2. AWS Secrets yöneticisinde depolandı
env:
  secrets-manager:
     # key: secret-id:json-key:version-stage:version-id
     SECRET_USER: rds-db-credentials:username
     SECRET_PASSWORD: rds-db-credentials:password 
  1. Doğrudan aramada parametre olarak verilir
psql --host ${PG_HOST} --dbname ${PG_DBNAME} "user=mydbuser password=0fNKJtNv" -f /tmp/file;
  1. .Pgpass dosyasında saklandı
echo ${PG_HOST}:${PG_PORT}:${PG_DBNAME}:${SECRET_USER}:${SECRET_PASSWORD} > ~/.pgpass
chmod 600 ~/.pgpass

Ve emin olmak için değişkeni de dışa aktardım, PGPASSFILE="~/.pgpass"

Kullanıcı adını ve parolayı yinelediğimde, yalnızca aşağıdaki gibi *** yazdırılır:

[Container] 2020/09/27 07:39:34 Running command cat ~/.pgpass
something.eu-central-1.rds.amazonaws.com:5432:spumdb:***:***

Hatalar:

  1. Çünkü hatapsql --host ${PG_HOST} --dbname ${PG_DBNAME} --user ${PG_USER} -f /tmp/file
psql: warning: extra command-line argument "/tmp/file" ignored
Password for user -f: 
psql: fe_sendauth: no password supplied
  1. Çünkü hatapsql --host ${PG_HOST} --dbname ${PG_DBNAME} --user ${SECRET_USER} -f /tmp/file
Password for user ***: 
psql: fe_sendauth: no password supplied
  1. Çünkü hata şudur:psql --host ${PG_HOST} --dbname ${PG_DBNAME} "user=mydbuser password=0fNKJtNv" -f /tmp/file
Password for user user=*** password=***: 
psql: fe_sendauth: no password supplied

Sadece bilgi için,

  • RDS güvenlik grubu, projenin (35.157.127.248/29) olduğu AWS bölgesindeki CodeBuild'den gelen tüm TCP bağlantılarına izin verecek girişe sahiptir.
  • Hem CodeBuild hem de RDS , kullanıcı tarafından oluşturulan bir VPC'nin aynı özel alt ağında bulunur
  • Aynı RDS kimlik bilgilerini kullanarak bir EC2 bulut sunucusundan RDS örneğine bağlanabiliyorum
  • Amazon Linux 2 için en son görüntüyü kullanıyorum (aws / codebuild / amazonlinux2-x86_64-standard: 3.0)

RDS ucunda değil, CodeBuild tarafında bir sorun gibi görünüyor. Bazı nedenlerden dolayı, CodeBuild parametrelerin değerini almaz, bu da sadece kullanıcı adı ve şifre, ana bilgisayar adı, dbname gibi diğerleri doğru değerlendirilir!

Herhangi bir yerde herhangi bir sorun gören var mı? Teşekkür ederim!

Yanıtlar

1 Marcin Sep 27 2020 at 16:34

Sorunu kopyalamaya çalıştım , ancak kullanman gerektiğini bulduğum tek şey --username, değil --user. Her neyse, işte buildspec.ymldoğrulama için kullandığım şey :

version: 0.2

env:
  variables:
    PG_HOST: database-1.cm3c1syrcj06.us-east-1.rds.amazonaws.com
    PG_PORT: 5432
    PG_DBNAME: mydb
  secrets-manager:
      SECRET_USER: rds-db-credentials:username
      SECRET_PASSWORD: rds-db-credentials:password 
phases:
  pre_build:
    commands:
       - echo ${PG_HOST}:${PG_PORT}:${PG_DBNAME}:${SECRET_USER}:${SECRET_PASSWORD} > ~/.pgpass - chmod 600 ~/.pgpass build: commands: - cat ~/.pgpass | rev - echo "\dt" > /tmp/file - psql --host ${PG_HOST} --dbname ${PG_DBNAME} --username ${SECRET_USER} -f /tmp/file

Yukarıda şifre ve kullanıcı adını göstermek için küçük bir numara kullanıyorum , ancak bunun tersi. Aksi takdirde sadece görürsünüz ***.

Her şey beklendiği gibi çalışır ve CB, veritabanını aşağıdaki gibi bağlar (veritabanım No relations foundboş olduğu için bu bekleniyordu):