RDS persendirian dari EC2: VPC yang sama, peering atau sesuatu yang lain?
Pilih laluan sebelum kumpulan keselamatan: VPC yang sama, peering, VPC dikongsi atau sambungan persendirian.
Komputer riba pembangun mencapai instans RDS persendirian melalui VPN kakitangan, tetapi aplikasi pada EC2 tidak boleh menyambung sama sekali. Ini bukan penggunaan yang rosak. Komputer riba mempunyai terowong yang tidak pernah diwarisi oleh instans EC2, dan «persendirian» dalam RDS bermaksud pangkalan data tiada titik akhir awam, bukan bermaksud pengguna VPN manusia satu-satunya pemanggil yang dibenarkan. Aplikasi memerlukan laluan sahnya sendiri, hubungannya sendiri dengan kumpulan keselamatan dan identiti pangkalan datanya sendiri, dan urutan memilih ketiga-tiganya menjimatkan sebahagian besar penyahpepijatan. Tentukan laluan dahulu, kemudian kebenaran, kemudian sahkan daripada persekitaran yang digunakan dan bukan dari meja anda.
VPN komputer riba bukan laluan aplikasi
Apa pun yang dilakukan VPN kakitangan untuk manusia, ia tidak melakukan apa-apa untuk sesuatu instans melainkan instans itu secara jelas sebahagian daripada laluan rangkaian yang sama. Instans EC2 dalam subnet persendirian mencapai RDS melalui penghalaan VPC, kumpulan keselamatan dan ACL rangkaian. Ia tidak mewarisi terowong manusia, sesi manusia atau kelayakan manusia, dan tidak sepatutnya: sambungan aplikasi tanpa pengawasan dan akses jauh kakitangan mesti boleh dikendalikan secara berasingan.
Kebebasan itu adalah ciri. Apabila VPN mati, aplikasi terus berfungsi. Apabila aplikasi berkelakuan buruk, tiada siapa kehilangan akses jauh mereka. Reka bentuk yang menggabungkan kedua-duanya menjadi satu laluan biasanya ditemui semasa insiden, pada saat yang paling buruk.
Keputusan 1: VPC yang sama, laluan terus
Apabila aplikasi dan pangkalan data berada dalam VPC yang sama dengan penghalaan terus dan tanpa kotak pemeriksaan di antaranya, laluan itu mudah dan rujukan kumpulan keselamatan ialah alat paling kuat yang tersedia. Beri aplikasi kumpulannya sendiri, kemudian benarkan port pangkalan data daripada kumpulan itu dan bukan daripada julat alamat:
aws ec2 authorize-security-group-ingress --group-id sg-0db123 --protocol tcp --port 5432 --source-group sg-0app456
aws rds describe-db-instances --db-instance-identifier prod-db --query 'DBInstances[0].{Endpoint:Endpoint.Address,Port:Endpoint.Port,Public:PubliclyAccessible,Groups:VpcSecurityGroups}'
Port itu hanyalah ilustrasi dan mesti sepadan dengan enjin. Rujukan kumpulan membenarkan trafik daripada instans aplikasi; ia tidak menyalin peraturan mereka dan tidak mencipta log masuk pangkalan data. Dua masalah berasingan, dua pembetulan berasingan.
Kemudian periksa seluruh laluan dan bukan berhenti pada peraturan yang baru anda tambah. Dasar keluar aplikasi, set lengkap kumpulan yang dilampirkan pada pangkalan data, jadual laluan subnet dan mana-mana ACL rangkaian semuanya mesti bersetuju. Peraturan kumpulan keselamatan adalah stateful, manakala ACL rangkaian tersuai mesti membenarkan permintaan dan trafik balasan dalam peraturan berasingan, termasuk port efemeral. Peraturan pangkalan data baharu yang sempit juga tidak membatalkan kebenaran luas lama yang sudah dilampirkan.
Keputusan 2: VPC lain atau akaun lain
Jika aplikasi berada dalam VPC lain, pemilik rangkaian memilih sambungan persendirian yang disokong: peering, reka bentuk transit atau pengaturan VPC dikongsi. Kemudian kedua-dua arah penghalaan mesti wujud, penyelesaian nama mesti berfungsi untuk titik akhir RDS, dan sumber yang dinilai oleh dasar pangkalan data mesti sepadan dengan apa yang benar-benar tiba. Nama akaun yang sepadan atau hubungan bil yang dikongsi tidak menyediakan semua itu.
Rujukan kumpulan keselamatan ialah bahagian yang berbeza-beza. Ia berfungsi dalam beberapa reka bentuk sambungan persendirian, tetapi berhenti berfungsi pada saat kotak tengah menulis semula sumber atau menamatkan sambungan, kerana pangkalan data kemudian melihat kotak tengah dan bukan kumpulan aplikasi anda. Senario VPC RDS memisahkan akses dalam VPC yang sama daripada pengaturan lain, dan wajar memeriksa topologi khusus anda terhadapnya sebelum menganggap gaya peraturan berpindah.
Jangan selesaikan laluan yang hilang dengan menjadikan pangkalan data boleh diakses secara awam. Itu keputusan pendedahan yang berbeza dengan pemilik yang berbeza, dan biasanya dicadangkan oleh pihak yang paling jauh daripada akibatnya.
Keputusan 3: identiti apa yang diterima oleh pangkalan data
Akses rangkaian dan pengesahan pangkalan data ialah lapisan berasingan, dan mencampurkannya menghasilkan ralat yang paling mengelirukan. Peranan instans ialah identiti AWS untuk memanggil API AWS. Ia bukan pengguna pangkalan data. Pengesahan pangkalan data IAM ialah ciri yang disokong di mana enjin dan konfigurasi membenarkannya, dan ia masih pemetaan kepada pengguna pangkalan data, bukan pengganti.
Gunakan nama titik akhir RDS dalam konfigurasi aplikasi dan bukannya alamat yang ditangkap daripada satu carian. Failover Multi-AZ menukar alamat di sebalik nama itu, dan aplikasi yang dipin pada IP akan gagal tepat pada saat ia diperlukan. Biarkan pengesahan TLS enjin dihidupkan dan jangan matikannya untuk menghilangkan ralat, kerana kegagalan pengesahan memberitahu anda sesuatu tentang titik akhir yang anda capai.
Kemudian berikan akaun pangkalan data minimum yang diperlukan oleh aplikasi, dalam skema yang benar-benar digunakannya. Kerja itu membosankan, ia boleh diaudit, dan itulah bahagian yang akan ditanya oleh semakan insiden.
Sahkan daripada persekitaran yang digunakan
Uji daripada instans atau daripada tugas yang berjalan dengan kumpulan, subnet dan peranan yang sama. Empat kegagalan kelihatan serupa daripada komputer riba dan mudah dibezakan dari sana: nama yang tidak diselesaikan, sambungan yang tamat masa, kegagalan pengesahan TLS dan log masuk pangkalan data yang ditolak. Setiap satu menunjuk ke sempadan yang berbeza, dan menukar pendedahan pangkalan data sebelum mengetahui yang mana anda miliki adalah tekaan.
psql "host=prod-db.abc123.eu-west-1.rds.amazonaws.com port=5432 dbname=app sslmode=verify-full" -c 'select 1'
Jika sambungan berjaya daripada instans dan gagal daripada meja anda, laluan aplikasi itu baik dan akses andalah yang perlu dibetulkan. Jika ia gagal daripada kedua-duanya, mulakan dengan pemeriksaan kumpulan dan laluan di atas dan bukan dengan kelayakan. Perbandingan tunggal itu menghalang sebahagian besar kekecohan yang dihasilkan oleh tiket ini.