CodeBuild với vấn đề kết nối RDS

Sep 27 2020

Tôi đang cố gắng kết nối phiên bản không máy chủ Postgres RDS từ dự án CodeBuild.

đây là nơi nó không thành công: psql --host ${PG_HOST} --dbname ${PG_DBNAME} --user ${SECRET_USER} -f /tmp/file

/ tmp / tệp tồn tại, vì vậy vấn đề về quyền / không tồn tại đối với tệp

Những gì tôi đã thử cho đến nay, tên người dùng và mật khẩu là:

  1. Được lưu trữ dưới dạng các biến môi trường trong CodeBuild
  2. Được lưu trữ trong trình quản lý AWS Secrets
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. Được đưa ra dưới dạng các tham số trong cuộc gọi trực tiếp
psql --host ${PG_HOST} --dbname ${PG_DBNAME} "user=mydbuser password=0fNKJtNv" -f /tmp/file;
  1. Được lưu trữ trong tệp .pgpass
echo ${PG_HOST}:${PG_PORT}:${PG_DBNAME}:${SECRET_USER}:${SECRET_PASSWORD} > ~/.pgpass
chmod 600 ~/.pgpass

Và để chắc chắn, tôi cũng đã xuất biến, PGPASSFILE="~/.pgpass"

Khi tôi lặp lại tên người dùng và mật khẩu, tôi chỉ nhận được *** in, như:

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

Các lỗi:

  1. Vì , lỗi làpsql --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. Vì , lỗi làpsql --host ${PG_HOST} --dbname ${PG_DBNAME} --user ${SECRET_USER} -f /tmp/file
Password for user ***: 
psql: fe_sendauth: no password supplied
  1. Đối với , lỗi là: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

Chỉ để biết thêm thông tin thôi,

  • Nhóm bảo mật RDS có mục nhập cho phép tất cả các kết nối TCP từ CodeBuild trong vùng AWS nơi có dự án (35.157.127.248/29)
  • Cả CodeBuild và RDS đều nằm trong cùng một mạng con riêng tư của một người dùng đã tạo VPC
  • Tôi có thể kết nối với phiên bản RDS từ phiên bản EC2 bằng cách sử dụng cùng thông tin đăng nhập RDS
  • Tôi đang sử dụng hình ảnh mới nhất cho Amazon Linux 2 (aws / codebuild / amazonlinux2-x86_64-standard: 3.0)

Có vẻ như một vấn đề ở cuối CodeBuild, không phải ở cuối RDS. Vì một số lý do, CodeBuild không nhận được giá trị của các tham số, chỉ có tên người dùng và mật khẩu, những người khác như tên máy chủ, tên dbname được đánh giá chính xác!

Có ai thấy bất kỳ vấn đề ở bất cứ nơi nào? Cảm ơn bạn!

Trả lời

1 Marcin Sep 27 2020 at 16:34

Tôi đã cố gắng tái tạo vấn đề , nhưng điều duy nhất tôi thấy rằng bạn nên sử dụng --usernamechứ không phải --user. Dù sao, đây là của tôi buildspec.ymlđược sử dụng để xác minh:

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

Ở trên tôi sử dụng một thủ thuật nhỏ để hiển thị mật khẩu và tên người dùng, nhưng ngược lại. Nếu không, bạn chỉ thấy ***.

Mọi thứ hoạt động như mong đợi và CB kết nối cơ sở dữ liệu như hiển nhiên No relations found(điều này đã được mong đợi, vì db của tôi trống):