Perbarui Amazon RDS SSL / TLS Certificates - Elastic Beanstalk

14

AWS baru-baru ini mengumumkan perlunya untuk:

Perbarui Amazon RDS SSL / TLS Certificates Anda pada 31 Oktober 2019

Saya memiliki aplikasi Rails yang di-host dengan penyeimbang beban Elastic Beanstalk klasik, yang menghubungkan ke Postgres DB menggunakan RDS.

Langkah-langkah yang diperlukan menurut Amazon adalah:

  1. Unduh sertifikat SSL / TLS baru dari Menggunakan SSL / TLS untuk Mengenkripsi Koneksi ke Mesin Virtual DB.
  2. Perbarui aplikasi basis data Anda untuk menggunakan sertifikat SSL / TLS baru.
  3. Ubah instance DB untuk mengubah CA dari rds-ca-2015 ke rds-ca-2019.

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

Karena saya memiliki penyeimbang beban yang diatur seperti ini (menghubungkan ke instance EC2 saya melalui port HTTP 80 (bukan SSL), apakah ini berarti saya tidak perlu mengikuti langkah 1 dan 2? Dan hanya mengikuti langkah 3?

LoadBalancerListeners

Atau apakah saya harus mengunduh sertifikat yang diperbarui dan menginstal / menambahkannya ke Load balancer atau EC saya secara manual? Tidak yakin bagaimana melakukannya.

stwr667
sumber
1
apa yang harus kamu lakukan pada akhirnya? Saya tidak jelas apa solusi akhirnya.
Weber
3
@ Weber, hal utama yang saya perlu menentukan adalah apakah EC2 contoh di belakang penyeimbang beban Pohon Kacang Elastis dengan koneksi RDS terikat akan secara otomatis mempercayai sertifikat 2019 yang ditingkatkan atau tidak. Saya tidak yakin apakah saya perlu mempercayai mereka secara manual melalui SSH'ing kepada mereka, atau misalnya menggunakan .ebextensions. Pada akhirnya setelah pengujian itu, saya bisa mengkonfirmasi bahwa mereka tidak secara otomatis mempercayai koneksi RDS baru. Jika instance RDS DB dipisahkan dari lingkungan EB seperti yang dijelaskan di sini https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.RDS.html, maka saya tidak yakin hasilnya.
stwr667

Jawaban:

8

Langkah 1 & 2 hanya diperlukan jika koneksi aplikasi Anda dengan MySQL terenkripsi TLS .

Jangan mengubah pengaturan LB TLS karena dapat merusak aplikasi Anda, LB TLS adalah sesuatu yang lain, di mana RDS TLS adalah sesuatu yang lain.

Jika aplikasi Anda hanya membuat koneksi biasa, Anda aman untuk melakukan langsung langkah 3.

Ubah instance DB untuk mengubah CA dari rds-ca-2015 ke rds-ca-2019.

Biasanya berlatih untuk DB, DB harus dalam subnet pribadi dan tidak boleh diakses dari publik, TLS sangat membantu ketika koneksi Database dan Backend Anda ada di internet, bukan dalam VPC.

Dengan koneksi yang tidak terenkripsi antara klien MySQL dan server, seseorang dengan akses ke jaringan dapat menonton semua lalu lintas Anda dan memeriksa data yang dikirim atau diterima antara klien dan server.

Adiii
sumber
Terima kasih @Adiii. Apakah kamu yakin Di sini docs.aws.amazon.com/AmazonRDS/latest/UserGuide/… itu menjelaskan cara melihat apakah koneksi DB Anda menggunakan SSL. Ketika saya eb sshke server saya, sambungkan dari sana ke DB via psql, dan kemudian jalankan select ssl_is_used(), ia kembali benar! Contoh RDS saya terkait dengan lingkungan EB saya seperti dijelaskan di sini docs.aws.amazon.com/elasticbeanstalk/latest/dg/… . Karena EB terhubung secara otomatis ke RDS, saya khawatir berdasarkan hal di atas bahwa mengubah CA akan memutus koneksi yang dihasilkan.
stwr667
Saya berbicara secara umum, itu tergantung pada aplikasi bagaimana membuat koneksi tetapi kode yang disarankan oleh tautan itu koneksi palin. 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
Terima kasih @Adii. Fyi saya menggunakan Postgres, bukan MySQL. Berita baiknya adalah saya mengambil snapshot dan baru saja mencoba langkah 3 tadi. Semuanya masih berfungsi seperti yang diharapkan. Bahkan ketika menghubungkan kembali ke DB dari server aplikasi, masih melaporkan bahwa itu menggunakan SSL jadi saya menganggap ElasticBeanstalk menangani kepercayaan sertifikat secara otomatis ketika instance RDS terkait dengan lingkungan EB. Terima kasih lagi.
stwr667
Jadi bagaimana Anda membuat koneksi? Apakah menentukan SSL dalam string koneksi?
Adiii
Saya memiliki aplikasi Rails, sehingga info koneksi didefinisikan di database.ymlmana panggilan keluar ke variabel ENV seperti RDS_DB_NAME, RDS_USERNAMEdll. Ini tidak menentukan untuk memerlukan SSL di sana (walaupun itu bisa). Meskipun saya pikir pengaturan default pada EB harus menjadi sesuatu seperti allow, prefer, atau require, dikonfigurasi melalui variabel lingkungan atau sesuatu. lih: postgresql.org/docs/current/… . Ini jelas bukan salah satu dari 3 lainnya karena disableakan mematikan SSL, dan verifyopsi lainnya gagal ketika saya mengujinya di CLI.
stwr667
2

Ada jawaban yang jauh lebih mudah untuk pertanyaan:

Anda tidak perlu menginstal apa pun di lingkungan Beanstalk Anda jika Anda meningkatkan Sertifikat CA yang digunakan oleh RDS yang terlampir. https://stackoverflow.com/a/59742149/7051819

Ikuti saja poin 3 dan abaikan 1 dan 2.

(Ya saya sendiri yang menulis jawaban itu).

Rbbn
sumber
3
saya pikir jawaban lompatannya turun karena kebanyakan lingkungan produksi TIDAK menggunakan RDS di dalam batang kacang elastis. menggunakan RDS dari dalam beanstalk elastis berpotensi berbahaya karena jika Anda menghentikan instance beanstalk elastis Anda, basis data Anda juga dihentikan, yang tidak baik untuk tujuan penyimpanan data. Jadi secara umum orang bertanya tentang lingkungan pohon kacang elastis di mana turunan RDS terpisah.
jakeatwork