Verbindungsproblem zwischen CodeBuild und RDS

Sep 27 2020

Ich versuche, eine serverlose Postgres RDS-Instanz aus einem CodeBuild-Projekt zu verbinden.

Hier scheitert es: psql --host ${PG_HOST} --dbname ${PG_DBNAME} --user ${SECRET_USER} -f /tmp/file

/ tmp / file ist vorhanden, daher kommt ein Dateiberechtigungs- / nicht vorhandenes Problem nicht in Frage

Was ich bisher versucht habe, waren der Benutzername und das Passwort:

  1. In CodeBuild als Umgebungsvariablen gespeichert
  2. Im AWS Secrets Manager gespeichert
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. Wird als Parameter direkt im Aufruf angegeben
psql --host ${PG_HOST} --dbname ${PG_DBNAME} "user=mydbuser password=0fNKJtNv" -f /tmp/file;
  1. In der .pgpass-Datei gespeichert
echo ${PG_HOST}:${PG_PORT}:${PG_DBNAME}:${SECRET_USER}:${SECRET_PASSWORD} > ~/.pgpass
chmod 600 ~/.pgpass

Und natürlich habe ich die Variable auch exportiert, PGPASSFILE="~/.pgpass"

Wenn ich den Benutzernamen und das Passwort wiedergebe, werde ich nur *** gedruckt, wie:

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

Fehler:

  1. Denn der Fehler istpsql --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. Denn der Fehler istpsql --host ${PG_HOST} --dbname ${PG_DBNAME} --user ${SECRET_USER} -f /tmp/file
Password for user ***: 
psql: fe_sendauth: no password supplied
  1. Denn der Fehler ist: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

Nur zur Info,

  • Die RDS-Sicherheitsgruppe hat den Eintrag, alle TCP-Verbindungen von CodeBuild in der AWS-Region zuzulassen, in der sich das Projekt befindet (35.157.127.248/29).
  • Sowohl CodeBuild als auch RDS befinden sich im selben privaten Subnetz einer vom Benutzer erstellten VPC
  • Ich kann von einer EC2-Instanz aus mit denselben RDS-Anmeldeinformationen eine Verbindung zur RDS-Instanz herstellen
  • Ich verwende das neueste Image für Amazon Linux 2 (aws / codebuild / amazonlinux2-x86_64-standard: 3.0).

Es sieht nach einem Problem am CodeBuild-Ende aus, nicht am RDS-Ende. Aus irgendeinem Grund erhält CodeBuild nicht den Wert der Parameter, sondern auch nur Benutzername und Passwort, andere wie Hostname, Datenbankname werden korrekt ausgewertet!

Hat jemand irgendwo ein Problem gesehen? Vielen Dank!

Antworten

1 Marcin Sep 27 2020 at 16:34

Ich habe versucht, das Problem zu replizieren , aber das einzige, was ich gefunden habe, das Sie verwenden sollten --username, nicht --user. Wie auch immer, hier ist meine buildspec.ymlfür die Überprüfung verwendet:

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

Oben benutze ich einen kleinen Trick , um das Passwort und den Benutzernamen anzuzeigen, aber umgekehrt. Sonst siehst du nur ***.

Alles funktioniert wie erwartet und CB verbindet die Datenbank wie durch das ersichtlich No relations found(dies wurde erwartet, da meine Datenbank leer ist):