SEC02-BP03 Menyimpan dan menggunakan rahasia secara aman
Beban kerja memerlukan sebuah kemampuan otomatis untuk membuktikan identitasnya ke basis data, sumber daya, dan layanan-layanan pihak ketiga. Hal ini dapat dilakukan dengan menggunakan kredensial akses rahasia, seperti kunci akses API, kata sandi, dan token OAuth. Menggunakan sebuah layanan yang dibuat khusus untuk menyimpan, mengelola, dan merotasi kredensial ini akan membantu Anda untuk mengurangi kemungkinan peretasan kredensial.
Hasil yang diinginkan: Menerapkan sebuah mekanisme untuk mengelola kredensial aplikasi dengan aman yang akan mencapai tujuan-tujuan berikut:
-
Melakukan identifikasi atas rahasia apa yang diperlukan untuk beban kerja.
-
Mengurangi jumlah kredensial jangka panjang yang diperlukan dan menggunakan kredensial jangka pendek, jika memungkinkan, sebagai gantinya.
-
Menetapkan penyimpanan yang aman dan rotasi otomatis kredensial jangka panjang yang tersisa.
-
Melakukan audit terhadap akses ke rahasia yang ada di beban kerja.
-
Melakukan pemantauan berkelanjutan untuk memverifikasi bahwa tidak ada rahasia yang disematkan di kode sumber selama proses pengembangan.
-
Mengurangi kemungkinan terungkapnya kredensial secara tidak sengaja.
Anti-pola umum:
-
Tidak melakukan rotasi kredensial.
-
Menyimpan kredensial jangka panjang dalam kode sumber atau file konfigurasi.
-
Menyimpan kredensial diam tanpa dienkripsi.
Manfaat menjalankan praktik terbaik ini:
-
Rahasia yang disimpan dengan enkripsi diam dan bergerak.
-
Akses ke kredensial terjaga keamanannya melalui API (bayangkan ia sebagai sebuah mesin penjual otomatis kredensial).
-
Akses ke kredensial (baca dan tulis) diaudit dan dicatat log-nya.
-
Pemisahan masalah: rotasi kredensial dilakukan oleh komponen terpisah, yang dapat dipisahkan dari bagian arsitektur lainnya.
-
Rahasia didistribusikan secara otomatis ke komponen-komponen perangkat lunak sesuai permintaan dan rotasi dilakukan di sebuah lokasi pusat.
-
Akses ke kredensial dapat dikontrol dengan sangat ketat dan terperinci.
Tingkat risiko yang terjadi jika praktik terbaik ini tidak diterapkan: Tinggi
Panduan implementasi
Dahulu, kredensial digunakan untuk melakukan autentikasi ke basis data, API pihak ketiga, token, dan rahasia lainnya yang mungkin disematkan dalam kode sumber atau dalam file lingkungan. AWS menyediakan beberapa mekanisme untuk menyimpan kredensial ini secara aman, merotasinya secara otomatis, dan mengaudit penggunaannya.
Cara terbaik yang bisa Anda lakukan untuk mengelola rahasia adalah dengan mengikuti panduan penghapusan, penggantian, dan rotasi. Kredensial yang paling aman adalah kredensial yang tidak perlu Anda simpan, kelola, atau tangani. Jika ada kredensial yang sudah tidak Anda gunakan untuk menjalankan beban kerja, maka Anda dapat menghapusnya.
Apabila kredensial masih diperlukan untuk menjalankan beban kerja dengan benar, maka kredensial jangka panjangnya mungkin bisa diganti dengan kredensial sementara atau kredensial jangka pendek. Misalnya, daripada melakukan hard-coding kunci akses rahasia AWS, coba ganti kredensial jangka panjang tersebut dengan kredensial sementara menggunakan peran IAM.
Beberapa rahasia yang sudah lama ada mungkin tidak dapat dihapus atau diganti. Rahasia-rahasia ini dapat disimpan dalam sebuah layanan seperti AWS Secrets Manager, di mana rahasia-rahasia tersebut dapat disimpan secara terpusat, dikelola, dan dirotasi secara teratur.
Pengauditan kode sumber dan file konfigurasi beban kerja dapat menunjukkan berbagai jenis kredensial. Tabel berikut merangkum bermacam-macam strategi yang bisa digunakan untuk menangani berbagai jenis kredensial umum:
Tipe kredensial | Deskripsi | Strategi yang disarankan |
---|---|---|
Kunci akses IAM | Akses IAM AWS dan kunci rahasia digunakan untuk mengambil peran IAM di dalam sebuah beban kerja | Ganti: Gunakan peran IAM yang ditetapkan ke instans komputasi (seperti Amazon EC2 atau AWS Lambda) sebagai gantinya. Untuk interoperabilitas dengan pihak ketiga yang memerlukan akses ke sumber daya yang ada di Akun AWS Anda, tanyakan apakah mereka mendukung akses lintas akun AWS. Untuk aplikasi seluler, sebaiknya Anda menggunakan kredensial sementara melalui kumpulan identitas Amazon Cognito (identitas terfederasi). Untuk beban kerja yang berjalan di luar AWS, sebaiknya Anda menggunakan IAM Roles Anywhere atau AWS Systems Manager Hybrid Activations. Untuk kontainer, lihat peran IAM tugas Amazon ECS atau peran IAM simpul Amazon EKS. |
Kunci SSH | Amankan kunci privat Shell yang digunakan untuk masuk log in ke instans EC2 Linux, secara manual atau sebagai bagian dari proses otomatis | Ganti: Gunakan AWS Systems Manager |
Kredensial aplikasi dan basis data | Kata sandi – string teks biasa | Rotasi: Simpan kredensial di AWS Secrets Manager dan buat rotasi otomatis jika memungkinkan. |
Kredensial Basis Data Admin Amazon RDS dan Aurora | Kata sandi – string teks biasa | Ganti: Gunakan integrasi Secrets Manager dengan Amazon RDS atau Amazon Aurora. Selain itu, beberapa jenis basis data RDS dapat menggunakan peran IAM alih-alih kata sandi untuk beberapa kasus penggunaan (untuk detail lebih lanjut, silakan lihat autentikasi basis data IAM). |
Token OAuth | Token rahasia – string teks biasa | Rotasi: Simpan token di AWS Secrets Manager dan konfigurasikan rotasi otomatis. |
Token dan kunci API | Token rahasia – string teks biasa | Rotasi: Simpan token di AWS Secrets Manager dan buat rotasi otomatis jika memungkinkan. |
Anti-pola umum yang biasa terjadi adalah menyematkan kunci akses IAM ke dalam kode sumber, file konfigurasi, atau aplikasi seluler. Ketika kunci akses IAM diperlukan untuk berkomunikasi dengan layanan AWS, Anda harus menggunakan kredensial keamanan sementara (jangka pendek). Kredensial jangka pendek ini dapat Anda sediakan melalui peran IAM untuk instans EC2, peran eksekusi untuk fungsi Lambda, peran IAM Cognito untuk akses pengguna seluler, dan kebijakan IoT Core untuk perangkat IoT. Saat berinteraksi dengan pihak ketiga, sebaiknya Anda mendelegasikan akses ke peran IAM dengan akses yang diperlukan ke sumber daya akun Anda daripada mengonfigurasi pengguna IAM dan mengirimkan kunci akses rahasia kepada pihak ketiga untuk pengguna tersebut.
Ada banyak kasus di mana beban kerja membutuhkan penyimpanan rahasia yang diperlukan untuk melakukan interoperasi dengan layanan-layanan dan sumber daya lainnya. AWS Secrets Manager dibuat secara khusus untuk mengelola kredensial ini dengan aman, serta mengelola penyimpanan, penggunaan, dan rotasi token API, kata sandi, dan kredensial lainnya.
AWS Secrets Manager menyediakan lima kemampuan utama untuk memastikan penyimpanan yang aman dan penanganan kredensial sensitif: enkripsi saat diam, enkripsi saat bergerak, audit komprehensif, kontrol akses memdetail, dan rotasi kredensial yang dapat diperluas. Anda dapat menggunakan layanan manajemen rahasia lainnya dari Partner AWS atau solusi-solusi yang dikembangkan secara lokal yang dapat memberikan kemampuan dan jaminan serupa.
Saat Anda mengambil rahasia, Anda dapat menggunakan komponen caching sisi klien Secrets Manager untuk men-cache rahasia tersebut untuk digunakan di masa mendatang. Mengambil rahasia yang di-cache lebih cepat daripada mengambilnya dari Secrets Manager. Selain itu, karena ada biaya untuk memanggil API Secrets Manager, penggunaan cache dapat mengurangi biaya Anda. Untuk mengetahui semua cara yang dapat Anda gunakan dalam mengambil rahasia, lihat Dapatkan rahasia.
catatan
Beberapa bahasa mungkin mengharuskan Anda menerapkan enkripsi dalam memori Anda sendiri untuk caching sisi klien.
Langkah-langkah implementasi
-
Identifikasi jalur kode yang memuat kredensial yang sudah di-hard-coding dengan menggunakan alat-alat otomatis seperti Amazon CodeGuru.
. -
Gunakan Amazon CodeGuru untuk melakukan pemindaian terhadap repositori kode Anda. Setelah peninjauan selesai dilakukan, lakukan filter pada Type=Secrets di CodeGuru untuk menemukan baris kode yang bermasalah.
-
-
Identifikasi kredensial yang dapat dihapus atau diganti.
-
Identifikasi kredensial yang sudah tidak diperlukan, dan kemudian tandai untuk dihapus.
-
Untuk Kunci Rahasia AWS yang tersemat dalam kode sumber, ganti dengan peran IAM yang terkait dengan sumber daya yang diperlukan. Jika sebagian dari beban kerja Anda berada di luar AWS tetapi memerlukan kredensial IAM untuk mengakses sumber daya AWS, pertimbangkan IAM Roles Anywhere
atau AWS Systems Manager Hybrid Activations.
-
-
Untuk rahasia lama lainnya dari pihak ketiga yang memerlukan penggunaan strategi rotasi, integrasikan Secrets Manager ke dalam kode Anda untuk mengambil rahasia pihak ketiga pada waktu proses runtime.
-
Konsol CodeGuru dapat secara otomatis membuat sebuah rahasia di Secrets Manager
dengan menggunakan kredensial yang ditemukan. -
Integrasikan pengambilan rahasia dari Secrets Manager ke dalam kode aplikasi Anda.
-
Fungsi Lambda nirserver dapat menggunakan ekstensi Lambda yang bersifat agnostik bahasa.
-
Untuk instans atau kontainer EC2, AWS memberikan contoh kode sisi klien untuk mengambil rahasia dari Secrets Manager menggunakan beberapa bahasa pemrograman populer.
-
-
-
Lakukan peninjauan terhadap basis kode Anda secara berkala dan lakukan pemindaian kembali untuk memverifikasi bahwa tidak ada rahasia baru yang ditambahkan ke kode.
-
Pertimbangkan untuk menggunakan alat-alat seperti git-secret
untuk mencegah memberikan rahasia baru ke repositori kode sumber Anda.
-
-
Pantau aktivitas Secrets Manager untuk mengetahui adanya indikasi penggunaan yang tidak terduga, akses rahasia yang tidak semestinya, atau upaya untuk menghapus rahasia.
-
Kurangi akses manusia ke kredensial. Batasi akses membaca, menulis, dan memodifikasi kredensial untuk peran IAM khusus untuk tujuan ini, serta hanya sediakan akses untuk mengambil peran ke sebagian kecil pengguna operasional.
Sumber daya
Praktik-praktik terbaik terkait:
Dokumen terkait:
Video terkait:
Lokakarya terkait: