อัปเดตใบรับรอง Amazon RDS SSL / TLS - Elastic Beanstalk


14

AWS เพิ่งประกาศความต้องการ:

อัปเดตใบรับรอง Amazon RDS SSL / TLS ของคุณภายในวันที่ 31 ตุลาคม 2019

ฉันมีแอปพลิเคชั่น Rails ที่โฮสต์กับตัวปรับสมดุลโหลดยืดหยุ่น Beanstalk แบบคลาสสิคซึ่งเชื่อมต่อกับ Postgres DB โดยใช้ RDS

ขั้นตอนที่จำเป็นตาม Amazon คือ:

  1. ดาวน์โหลดใบรับรอง SSL / TLS ใหม่จากการใช้ SSL / TLS เพื่อเข้ารหัสการเชื่อมต่อไปยังอินสแตนซ์ฐานข้อมูล
  2. อัพเดตแอ็พพลิเคชันฐานข้อมูลของคุณเพื่อใช้ใบรับรอง SSL / TLS ใหม่
  3. แก้ไขอินสแตนซ์ DB เพื่อเปลี่ยน CA จาก rds-ca-2015 เป็น rds-ca-2019

( https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html )

เนื่องจากฉันตั้งตัวโหลดบาลานซ์ของฉันไว้เช่นนี้ (เชื่อมต่ออินสแตนซ์ EC2 ของฉันผ่าน HTTP พอร์ต 80 (ไม่ใช่ SSL) นี่หมายความว่าฉันไม่จำเป็นต้องทำตามขั้นตอนที่ 1 และ 2 หรือไม่และทำตามขั้นตอนที่ 3 เท่านั้น

LoadBalancerListeners

หรือฉันจะต้องดาวน์โหลดใบรับรองที่อัปเดตแล้วติดตั้ง / เพิ่มลงใน Load balancer หรือ EC ของฉันด้วยตนเอง? ไม่แน่ใจว่าจะทำอย่างไร


1
คุณต้องทำอะไรในที่สุด? ฉันไม่ชัดเจนว่าทางออกสุดท้ายคืออะไร
weber

3
@ เว็บเบอร์สิ่งสำคัญที่ฉันต้องพิจารณาคือถ้าอินสแตนซ์ EC2 ด้านหลังตัวโหลดบาลานซ์ Elastic Beanstalk พร้อมการเชื่อมต่อ RDS ที่เชื่อมโยงจะเชื่อถือใบรับรอง 2019 ที่อัปเกรดโดยอัตโนมัติหรือไม่ ผมไม่แน่ใจว่าถ้าผมจะต้องด้วยตนเองไว้วางใจพวกเขาผ่านทาง SSH'ing .ebextensionsกับพวกเขาหรือเช่นใช้ ในท้ายที่สุดหลังจากการทดสอบมันฉันสามารถยืนยันว่าพวกเขาไม่ได้โดยอัตโนมัติไว้วางใจการเชื่อมต่อ RDS ใหม่ หากอินสแตนซ์ RDS DB ถูกแยกจากสภาพแวดล้อม EB ตามที่อธิบายไว้ที่นี่แสดงhttps://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.RDS.htmlว่าฉันไม่แน่ใจในผลลัพธ์
stwr667

คำตอบ:


8

ขั้นตอนที่ 1 และ 2 ที่จำเป็นเฉพาะในกรณีที่ใบสมัครของคุณเชื่อมต่อกับ MySQL คือการเข้ารหัส

อย่าเปลี่ยนการตั้งค่าLB TLS ซึ่งอาจทำลายแอปพลิเคชันของคุณLB LBSเป็นอย่างอื่นโดยที่RDS TLSเป็นอย่างอื่น

หากแอปพลิเคชันของคุณเพียงสร้างการเชื่อมต่อธรรมดาคุณจะสามารถดำเนินการขั้นตอนที่ 3 ได้โดยตรง

แก้ไขอินสแตนซ์ DB เพื่อเปลี่ยน CA จาก rds-ca-2015 เป็น rds-ca-2019

โดยปกติแล้วการปฏิบัติสำหรับ DB, DB ควรอยู่ในซับเน็ตส่วนตัวและไม่ควรเข้าถึงได้จากสาธารณะ TLS เป็นประโยชน์เมื่อการเชื่อมต่อฐานข้อมูลและแบ็กเอนด์ของคุณอยู่บนอินเทอร์เน็ตไม่ใช่ภายใน VPC

ด้วยการเชื่อมต่อที่ไม่ได้เข้ารหัสระหว่างไคลเอนต์ MySQL และเซิร์ฟเวอร์ผู้ที่สามารถเข้าถึงเครือข่ายสามารถรับชมข้อมูลทั้งหมดของคุณและตรวจสอบข้อมูลที่ถูกส่งหรือรับระหว่างไคลเอนต์และเซิร์ฟเวอร์


ขอบคุณ @Adiii คุณแน่ใจไหม? ที่นี่docs.aws.amazon.com/AmazonRDS/latest/UserGuide/ ......อธิบายวิธีการดูว่าการเชื่อมต่อฐานข้อมูลของคุณใช้ SSL หรือไม่ เมื่อฉันeb sshไปยังเซิร์ฟเวอร์ของฉันเชื่อมต่อจากที่นั่นไปยังฐานข้อมูลผ่านทางpsqlจากนั้นเรียกใช้select ssl_is_used()มันจะคืนค่าจริง! เช่น RDS ฉันจะเชื่อมโยงกับสภาพแวดล้อม EB ของฉันตามที่อธิบายไว้ที่นี่docs.aws.amazon.com/elasticbeanstalk/latest/dg/... เนื่องจาก EB เชื่อมต่อกับ RDS โดยอัตโนมัติฉันจึงกังวลจากข้างต้นว่าการเปลี่ยน CA จะทำให้การเชื่อมต่อที่สร้างขึ้นนั้นพัง
stwr667

ฉันกำลังพูดถึงโดยทั่วไปมันขึ้นอยู่กับแอปพลิเคชันว่ามันสร้างการเชื่อมต่ออย่างไร var mysql = require('mysql'); var connection = mysql.createConnection({ host : process.env.RDS_HOSTNAME, user : process.env.RDS_USERNAME, password : process.env.RDS_PASSWORD, port : process.env.RDS_PORT }); connection.connect(function(err) { if (err) { console.error('Database connection failed: ' + err.stack); return; } console.log('Connected to database.'); }); connection.end();
Adiii

2
ขอบคุณ @Adii Fyi ฉันใช้ Postgres ไม่ใช่ MySQL ข่าวดีก็คือฉันถ่ายภาพสแนปชอตและลองขั้นตอนที่ 3 ในตอนนี้ ทุกอย่างยังคงทำงานตามที่คาดไว้ แม้เมื่อเชื่อมต่อกับฐานข้อมูลจากแอปพลิเคชันเซิร์ฟเวอร์อีกครั้ง แต่ก็ยังรายงานว่าใช้ SSL ดังนั้นฉันคิดว่า ElasticBeanstalk จะจัดการการเชื่อถือของใบรับรองโดยอัตโนมัติเมื่ออินสแตนซ์ของ RDS เชื่อมโยงกับสภาพแวดล้อม EB ขอบคุณอีกครั้ง.
stwr667

แล้วคุณสร้างการเชื่อมต่ออย่างไร ระบุ SSL ในสตริงการเชื่อมต่อหรือไม่
Adiii

ฉันมีแอพพลิเคชั่น Rails ดังนั้นข้อมูลการเชื่อมต่อจะถูกกำหนดdatabase.ymlโดยการโทรออกไปยังตัวแปร ENV เช่นRDS_DB_NAMEและRDS_USERNAMEอื่น ๆ มันไม่ได้ระบุว่าต้องใช้ SSL ที่นั่น (แม้ว่าจะทำได้) ถึงแม้ว่าผมจะคิดว่าการตั้งค่าเริ่มต้นใน EB ต้องเป็นสิ่งที่ชอบallow, preferหรือrequireกำหนดค่าผ่านทางตัวแปรสภาพแวดล้อมหรือบางสิ่งบางอย่าง CF: postgresql.org/docs/current/... มันไม่ใช่หนึ่งในสามอย่างแน่นอนเพราะdisableจะปิด SSL และverifyตัวเลือกอื่น ๆล้มเหลวเมื่อฉันทดสอบพวกเขาบน CLI
stwr667

2

มีคำตอบที่ง่ายกว่าสำหรับคำถามนี้:

คุณไม่จำเป็นต้องติดตั้งอะไรในสภาพแวดล้อม Beanstalk ของคุณหากคุณอัพเกรด CA Certificate ที่ RDS ติดมาใช้ https://stackoverflow.com/a/59742149/7051819

เพียงทำตามจุดที่ 3 และละเว้น 1 และ 2

(ใช่ฉันเขียนคำตอบนั้นเอง)


3
ฉันคิดว่าคำตอบกระโดดเป็นแบบลงคะแนนเพราะสภาพแวดล้อมการผลิตส่วนใหญ่ไม่ได้ใช้ RDS ในฝักถั่วที่ยืดหยุ่น การใช้ RDS จากภายในแถบถ่างยืดหยุ่นอาจเป็นอันตรายได้เพราะหากคุณยุติอินสแตนซ์ฝักถั่วยืดหยุ่นฐานข้อมูลของคุณจะถูกยกเลิกด้วยซึ่งไม่ดีสำหรับจุดประสงค์ในการเก็บข้อมูล ดังนั้นในคนทั่วไปจะถามเกี่ยวกับสภาพแวดล้อมของฝักถั่วยืดหยุ่นที่อินสแตนซ์ RDS จะแยกจากกัน
jakeatwork
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.