Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Putar kredensil basis data tanpa memulai ulang kontainer
Josh Joy, Amazon Web Services
Ringkasan
Di Amazon Web Services (AWS) Cloud, Anda dapat menggunakan AWS Secrets Manager untuk memutar, mengelola, dan mengambil kredenal database sepanjang siklus hidupnya. Pengguna dan aplikasi mengambil rahasia dengan panggilan ke Secrets Manager API, menghilangkan kebutuhan untuk hardcode informasi sensitif dalam plaintext.
Jika Anda menggunakan kontainer untuk beban kerja layanan mikro, Anda dapat menyimpan kredensil dengan aman di AWS Secrets Manager. Untuk memisahkan konfigurasi dari kode, kredensil ini biasanya disuntikkan ke dalam wadah. Namun, penting untuk memutar kredensil Anda secara berkala dan otomatis. Penting juga untuk mendukung kemampuan menyegarkan kredensil setelah pencabutan. Pada saat yang sama, aplikasi memerlukan kemampuan untuk memutar kredensil sekaligus mengurangi potensi dampak ketersediaan hilir.
Pola ini menjelaskan cara memutar rahasia Anda yang diamankan dengan AWS Secrets Manager di dalam kontainer Anda tanpa mengharuskan kontainer Anda untuk memulai ulang. Selain itu, pola ini mengurangi jumlah pencarian kredenal ke Secrets Manager dengan menggunakan komponen caching sisi klien Secrets Manager. Saat Anda menggunakan komponen caching sisi klien untuk menyegarkan kredensil dalam aplikasi, wadah tidak perlu dimulai ulang untuk mengambil kredensi yang diputar.
Pendekatan ini berfungsi untuk Amazon Elastic Kubernetes Service (Amazon EKS) dan Amazon Elastic Container Service (Amazon ECS).
Dua skenario tercakup. Dalam skenario pengguna tunggal, kredenal database disegarkan pada rotasi rahasia dengan mendeteksi kredensi kedaluwarsa. Cache kredenal diinstruksikan untuk menyegarkan rahasia, dan kemudian aplikasi membangun kembali koneksi database. Komponen caching sisi klien menyimpan kredensi dalam aplikasi dan membantu menghindari menjangkau Secrets Manager untuk setiap pencarian kredenal. Kredensi diputar dalam aplikasi tanpa perlu memaksa penyegaran kredenal dengan memulai ulang wadah.
Skenario kedua memutar rahasia dengan bergantian antara dua pengguna. Memiliki dua pengguna aktif mengurangi potensi downtime, karena kredensi satu pengguna selalu aktif. Rotasi kredenal dua pengguna sangat membantu ketika Anda memiliki penerapan besar dengan kluster di mana mungkin ada penundaan propagasi kecil pembaruan kredenal.
Prasyarat dan batasan
Prasyarat
Akun AWS yang aktif.
Aplikasi yang berjalan dalam wadah di Amazon EKS atau Amazon ECS.
Kredensil disimpan di Secrets Manager, dengan rotasi diaktifkan.
Kumpulan kredensil kedua yang disimpan di Secrets Manager, jika menerapkan solusi dua pengguna. Contoh kode dapat ditemukan di GitHub repo aws-secrets-manager-rotation-lambdas
. Basis data Amazon Aurora.
Batasan
Contoh ini ditargetkan untuk aplikasi Python. Untuk aplikasi Java, Anda dapat menggunakan komponen caching sisi klien Java atau pustaka caching sisi klien
JDBC untuk Secrets Manager.
Arsitektur
Arsitektur target
Skenario 1 — Rotasi kredensi untuk satu pengguna

Dalam skenario pertama, kredensi database tunggal diputar secara berkala oleh Secrets Manager. Wadah aplikasi berjalan di Fargate. Ketika koneksi database pertama dibuat, wadah aplikasi mengambil kredensi database untuk Aurora. Komponen caching Secrets Manager kemudian menyimpan kredensi untuk pembuatan koneksi future. Ketika periode rotasi telah berlalu, kredensi kedaluwarsa dan database mengembalikan kesalahan otentikasi. Aplikasi kemudian mengambil kredensi yang diputar, membatalkan cache, dan memperbarui cache kredenal melalui komponen caching sisi klien Secrets Manager.
Dalam skenario ini, mungkin ada gangguan minimal saat kredensi sedang diputar dan koneksi basi menggunakan kredensi yang sudah ketinggalan zaman. Masalah ini dapat diatasi dengan menggunakan skenario dua pengguna.
Skenario 2 - Rotasi kredensil untuk dua pengguna

Dalam skenario kedua, dua kredensi pengguna database (Alice's dan Bob's) diputar secara berkala oleh Secrets Manager. Wadah aplikasi berjalan di cluster Fargate. Ketika koneksi database pertama dibuat, wadah aplikasi mengambil kredensi database Aurora untuk pengguna pertama (Alice). Komponen caching Secrets Manager kemudian menyimpan kredensi untuk pembuatan koneksi future.
Meskipun ada dua pengguna dan kredensil, satu hanya kredensi aktif yang dikelola oleh Secrets Manager. Dalam hal ini, komponen caching secara berkala kedaluwarsa dan mengambil kredensi terbaru. Jika periode rotasi Secrets Manager lebih lama dari batas waktu cache, komponen caching akan mengambil kredensi yang diputar untuk pengguna kedua (Bob). Misalnya, jika kedaluwarsa cache diukur dalam hitungan menit dan periode rotasi diukur dalam beberapa hari, komponen caching mengambil kredensi baru sebagai bagian dari penyegaran cache periodiknya. Dengan cara ini, downtime diminimalkan karena kredensi setiap pengguna aktif untuk satu rotasi Secrets Manager.
Otomatisasi dan skala
Anda dapat menggunakan AWS CloudFormation untuk menerapkan pola ini dengan menggunakan infrastruktur sebagai kode. Ini membangun dan membuat wadah aplikasi, membuat tugas Fargate, menyebarkan wadah ke Fargate, dan menyiapkan dan mengkonfigurasi Secrets Manager dengan Aurora. Untuk petunjuk step-by-step penerapan, lihat file readme
Alat
Alat
AWS Secrets Manager memungkinkan penggantian kredensi hardcode, termasuk kata sandi, dengan panggilan API ke Secrets Manager untuk mengambil rahasia. Karena Secrets Manager dapat secara otomatis memutar rahasia sesuai jadwal, Anda dapat mengganti rahasia jangka panjang dengan rahasia jangka pendek, mengurangi risiko kompromi.
Docker
membantu pengembang untuk mengemas, mengirim, dan menjalankan aplikasi apa pun sebagai wadah yang ringan, portabel, dan mandiri.
Kode
Contoh kode Python
Pola ini menggunakan komponen caching sisi klien Python untuk Secrets Manager untuk mengambil kredensi otentikasi saat membuat koneksi database. Komponen caching sisi klien membantu menghindari menjangkau Secrets Manager setiap kali.
Sekarang, ketika periode rotasi berlalu, kredensi cache akan kedaluwarsa, dan menghubungkan ke database akan menghasilkan kesalahan otentikasi. Untuk MySQL, kode kesalahan otentikasi adalah 1045. Contoh ini menggunakan Amazon Aurora untuk MySQL, meskipun Anda dapat menggunakan mesin lain seperti PostgreSQL. Setelah kesalahan otentikasi, kode penanganan pengecualian koneksi database menangkap kesalahan. Kemudian menginformasikan komponen caching sisi klien Secrets Manager untuk menyegarkan rahasia, kemudian mengautentikasi ulang dan membangun kembali koneksi database. Jika Anda menggunakan PostgreSQL atau mesin lain, Anda harus mencari kode kesalahan otentikasi yang sesuai.
Aplikasi kontainer sekarang dapat memperbarui kata sandi database dengan kata sandi yang diputar tanpa memulai ulang wadah.
Tempatkan kode berikut dalam kode aplikasi Anda yang menangani koneksi database. Contoh ini menggunakan Django, dan subclass
def get_new_connection(self, conn_params): try: logger.info("get connection") databasecredentials.get_conn_params_from_secrets_manager(conn_params) conn =super(DatabaseWrapper,self).get_new_connection(conn_params) return conn except MySQLdb.OperationalError as e: error_code=e.args[0] if error_code!=1045: raise e logger.info("Authentication error. Going to refresh secret and try again.") databasecredentials.refresh_now() databasecredentials.get_conn_params_from_secrets_manager(conn_params) conn=super(DatabaseWrapper,self).get_new_connection(conn_params) logger.info("Successfully refreshed secret and established new database connection.") return conn
Kode AWS CloudFormation dan Python
Epik
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Instal komponen caching. | Unduh dan instal komponen caching sisi klien Secrets Manager untuk Python. Untuk tautan unduhan, lihat bagian Sumber daya terkait. | Developer |
Cache kredensi kerja. | Gunakan komponen caching sisi klien Secrets Manager untuk menyimpan kredensi kerja secara lokal. | Developer |
Perbarui kode aplikasi untuk menyegarkan kredensi pada kesalahan yang tidak sah dari koneksi database. | Perbarui kode aplikasi untuk menggunakan Secrets Manager untuk mengambil dan menyegarkan kredensi database. Tambahkan logika untuk menangani kode kesalahan yang tidak sah, lalu ambil kredensi yang baru diputar. Lihat bagian kode Contoh Python. | Developer |
Sumber daya terkait
Buat rahasia Secrets Manager
Buat cluster Amazon Aurora
Buat komponen Amazon ECS
Unduh dan instal komponen caching sisi klien Secrets Manager
Lampiran
Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip