ฉันจะใช้การทันเนลพอร์ตเพื่อเชื่อมต่อกับอินสแตนซ์ฐานข้อมูลส่วนตัวผ่านป้อมปราการเครือข่ายได้อย่างไร


12

ฉันมีป้อมปราการเครือข่ายที่สาธารณชนสามารถเข้าถึงได้example.compute-1.amazonaws.comและอินสแตนซ์ฐานข้อมูล postgres ส่วนตัวที่postgres.example.us-east-1.rds.amazonaws.com:5432

ฉันสามารถ ssh เข้าสู่ป้อมปราการโดยใช้

$ ssh -i key.pem ec2-user@example.compute-1.amazonaws.com

จากนั้นเมื่อฉันอยู่ในป้อมปราการฉันสร้างอุโมงค์ ssh ด้วย:

$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 ec2-user@example.compute-1.amazonaws.com

ฉันสามารถตรวจสอบว่าอุโมงค์ทำงานโดยเชื่อมต่อกับฐานข้อมูลจากป้อมปราการโดยใช้ localhost:

$ psql -p 5432 -h localhost -U postgres

อย่างไรก็ตามฉันไม่สามารถเชื่อมต่อกับฐานข้อมูลจากระยะไกล (โดยไม่ต้องอยู่ในป้อมปราการ)

$ psql -p 5432 -h example.compute-1.amazonaws.com -U postgres
psql: could not connect to server: Connection refused
Is the server running on host "example.compute-1.amazonaws.com" () and accepting
TCP/IP connections on port 5432?

ฉันได้กำหนดค่ากลุ่มความปลอดภัยของป้อมปราการเพื่อยอมรับทราฟฟิกขาเข้าบนพอร์ต 5432

ฉันใช้ssh -Lอย่างถูกต้องหรือไม่ ฉันควรจะใช้มันนอกป้อมปราการหรือไม่? คำแนะนำใด ๆ ที่จะได้รับการชื่นชมมาก

คำตอบ:


20

เมื่อคุณสร้างอุโมงค์ SSH มันจะไม่เปิดพอร์ตที่เปิดสู่โลกภายนอก localhostพอร์ตเปิดสามารถใช้ได้เป็นเพียง อย่างมีประสิทธิภาพสิ่งที่คุณทำคือการสร้างอุโมงค์จากป้อมปราการของคุณไปยังป้อมปราการของคุณ

สิ่งที่คุณต้องการทำคือสร้างอุโมงค์จากคอมพิวเตอร์ของคุณผ่านป้อมปราการแทน

ดังนั้นคุณต้องสร้างอุโมงค์ของคุณเป็นส่วนหนึ่งของการเชื่อมต่อของคุณจากคอมพิวเตอร์ของคุณไปยังป้อมปราการของคุณ คุณไม่จำเป็นต้องสร้างการเชื่อมต่อ SSH อื่น

ดังนั้นในพื้นที่คุณจะดำเนินการ:

$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 ec2-user@example.compute-1.amazonaws.com

สมมติว่า postgres.example.us-east-1.rds.amazonaws.com แก้ไขเป็นที่อยู่ IP ส่วนตัว

จากนั้นเพื่อเชื่อมต่อกับเซิร์ฟเวอร์ของคุณยังอยู่ในเครื่องให้เชื่อมต่อราวกับว่าเซิร์ฟเวอร์นั้นอยู่ในเครื่อง:

$ psql -p 5432 -h localhost -U postgres

การทำเช่นนี้ไม่จำเป็นต้องใช้พรอมต์ในป้อมปราการของคุณ


มันใช้งานได้สำหรับฉันขอบคุณ! สิ่งหนึ่งที่ฉันลืมได้สำหรับทุกคนที่เป็นคำสั่ง psql ก็ค้างอยู่ที่นั่น: ตรวจสอบให้แน่ใจว่ากลุ่มความปลอดภัยฐานข้อมูลของคุณอนุญาตการเข้าถึงจากป้อมปราการ
Goran

-1

สิ่งนี้ใช้ได้สำหรับฉัน ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งไคลเอนต์ psqlไว้ในเครื่องแล้ว

psql --host=myAwsDbEndpointUrl.ciqykqusf0nv.us-west-1.rds.amazonaws.com --port=5432 --username=myUserName --password --dbname=myDbName

เมื่อสร้างอินสแตนซ์ db ของคุณบน aws ตรวจสอบให้แน่ใจว่าได้กำหนดดังต่อไปนี้:

  1. ชื่อผู้ใช้
  2. รหัสผ่าน
  3. ชื่อฐานข้อมูล
  4. หมายเลขพอร์ต

ฉันต้องสร้างกลุ่มความปลอดภัยสำหรับ VPC ที่ฐานข้อมูลอยู่หลังจากสร้างให้แน่ใจว่าอินสแตนซ์ db ของคุณใช้สิ่งนี้สำหรับกลุ่มความปลอดภัย กลุ่มความปลอดภัยมีกฎต่อไปนี้:

inbound--> type:PostgreSQL, protocol:TCP port range:5432, source:0.0.0.0/0

outbound--> type:All Traffic, protocol:All, port range:all, destination:0.0.0.0/0

มันไม่ได้ผ่านป้อมปราการใช่มั้ย คุณเพิ่งเชื่อมต่อโดยตรงกับ RDS
RhysC

มันจะผ่าน vpc ที่อินสแตนซ์ rds ถูกเปิดเผยผ่าน คุณแนบ vpc กับอินสแตนซ์ rds เมื่อมีการสร้าง
timxor

ใช่ฉันคิดว่าคำถามเดิมเป็นเรื่องเกี่ยวกับการจะผ่านเซิร์ฟเวอร์ป้อมปราการใน VPC ดังนั้นเช่น RDS ไม่ได้สัมผัสกับสาธารณชน (ดีครับว่าฉันอ่านมัน)
RhysC

นั่นไม่ใช่คำถามและคำตอบของคุณไม่ได้ช่วยแก้ปัญหาเลย
Radko Dinev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.