SEC02-BP03 Menyimpan dan menggunakan rahasia secara aman - AWS Well-Architected Framework

SEC02-BP03 Menyimpan dan menggunakan rahasia secara aman

Beban kerja memerlukan kemampuan otomatis untuk membuktikan identitasnya ke basis data, sumber daya, dan layanan pihak ketiga. Hal ini dapat dilakukan menggunakan kredensial akses rahasia, seperti kunci akses API, kata sandi, dan token OAuth. Menggunakan layanan yang dibuat khusus untuk menyimpan, mengelola, dan merotasi kredensial ini membantu mengurangi kemungkinan penyusupan kredensial.

Hasil yang diinginkan: Mengimplementasikan mekanisme untuk mengelola kredensial aplikasi secara aman, yang mencapai tujuan berikut:

  • Mengidentifikasi rahasia apa yang diperlukan untuk beban kerja.

  • Mengurangi kebutuhan kredensial jangka panjang yang diperlukan dan menggunakan kredensial jangka pendek jika memungkinkan.

  • Membangun penyimpanan yang aman dan rotasi otomatis untuk kredensial jangka panjang yang tersisa.

  • Mengaudit akses ke rahasia yang ada di beban kerja.

  • Pemantauan berkelanjutan untuk memverifikasi bahwa tidak ada rahasia yang disematkan di kode sumber selama proses pengembangan.

  • Mengurangi kemungkinan pengungkapan kredensial secara tidak sengaja.

Antipola umum:

  • Tidak merotasi kredensial.

  • Menyimpan kredensial jangka panjang dalam kode sumber atau file konfigurasi.

  • Menyimpan kredensial diam tanpa dienkripsi.

Manfaat menjalankan praktik terbaik ini:

  • Rahasia yang disimpan diamankan dengan enkripsi saat diam maupun bergerak.

  • Akses ke kredensial harus melewati API (bayangkan ini seperti mesin penjual otomatis kredensial).

  • Akses ke kredensial (baca dan tulis) diaudit dan dicatat.

  • Pemisahan masalah (Separation of concerns): rotasi kredensial dilakukan oleh komponen terpisah, yang dapat dipisahkan dari bagian arsitektur lainnya.

  • Rahasia didistribusikan secara otomatis ke komponen perangkat lunak sesuai permintaan dan rotasi dilakukan di lokasi pusat.

  • Akses ke kredensial dapat dikontrol dengan sangat ketat.

Tingkat risiko yang terjadi jika praktik terbaik ini tidak dijalankan: Tinggi

Panduan implementasi

Dahulu, kredensial digunakan untuk mengautentikasi 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 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 digunakan untuk menjalankan beban kerja, Anda dapat menghapusnya.

Apabila kredensial masih diperlukan untuk menjalankan beban kerja dengan benar, kredensial jangka panjangnya mungkin bisa diganti dengan kredensial sementara atau 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 tersebut dapat disimpan dalam layanan seperti AWS Secrets Manager, tempat rahasia bisa disimpan, dikelola, dan dirotasi secara rutin dan terpusat.

Pengauditan file konfigurasi dan kode sumber beban kerja dapat menunjukkan berbagai jenis kredensial. Tabel berikut merangkum strategi yang digunakan untuk menangani jenis kredensial umum:

Credential type Description Suggested strategy
IAM access keys AWS IAM access and secret keys used to assume IAM roles inside of a workload Replace: Use Peran IAM assigned to the compute instances (such as Amazon EC2 or AWS Lambda) instead. For interoperability with third parties that require access to resources in your Akun AWS, ask if they support Akses lintas akun AWS. For mobile apps, consider using temporary credentials through Kolam identitas (identitas gabungan) Amazon Cognito. For workloads running outside of AWS, consider IAM Roles Anywhere or AWS Systems Manager Hybrid Activations.
SSH keys Secure Shell private keys used to log into Linux EC2 instances, manually or as part of an automated process Replace: Use AWS Systems Manager or EC2 Instance Connect to provide programmatic and human access to EC2 instances using IAM roles.
Application and database credentials Passwords – plain text string Rotate: Store credentials in AWS Secrets Manager and establish automated rotation if possible.
Amazon RDS and Aurora Admin Database credentials Passwords – plain text string Replace: Use the Integrasi Secrets Manager dengan Amazon RDS or Amazon Aurora. In addition, some RDS database types can use IAM roles instead of passwords for some use cases (for more detail, see Autentikasi basis data IAM).
OAuth tokens Secret tokens – plain text string Rotate: Store tokens in AWS Secrets Manager and configure automated rotation.
API tokens and keys Secret tokens – plain text string Rotate: Store in AWS Secrets Manager and establish automated rotation if possible.

Antipola umumnya adalah menyematkan kunci akses IAM ke dalam kode sumber, file konfigurasi, atau aplikasi seluler. Saat kunci akses IAM diperlukan untuk berkomunikasi dengan layanan AWS, gunakan kredensial keamanan sementara (jangka-pendek). Kredensial jangka pendek tersebut dapat diberikan 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 beroperasi dengan pihak ketiga, utamakan mendelegasikan akses ke peran IAM dengan akses yang diperlukan ke sumber daya akun Anda daripada mengonfigurasikan pengguna IAM lalu mengirim kunci akses rahasia kepada pihak ketiga untuk pengguna tersebut.

Dalam banyak kasus, beban kerja memerlukan penyimpanan rahasia agar dapat saling beroperasi dengan sumber daya dan layanan lainnya. AWS Secrets Manager dibuat khusus untuk mengelola kredensial ini secara aman, sekaligus penyimpanan, penggunaan, dan rotasi token API, kata sandi, serta kredensial lainnya.

AWS Secrets Manager menyediakan lima kemampuan utama untuk memastikan keamanan penyimpanan dan penanganan kredensial sensitif: enkripsi diam, enkripsi bergerak, pengauditan menyeluruh, kontrol akses terperinci, dan rotasi kredensial yang dapat diperluas. Layanan manajemen rahasia lainnya dari Partner AWS atau solusi yang dikembangkan secara lokal yang memberikan kemampuan dan jaminan serupa juga dapat digunakan.

Langkah implementasi

  1. Identifikasi jalur kode yang berisi kredensial hard-coding menggunakan alat otomatis seperti Amazon CodeGuru.

    • Gunakan Amazon CodeGuru untuk memindai repositori kode Anda. Setelah peninjauan selesai, filter Type=Secrets di CodeGuru untuk menemukan baris kode yang bermasalah.

  2. Identifikasi kredensial yang dapat dihapus atau diganti.

    1. Identifikasi kredensial yang sudah tidak diperlukan, lalu tandai untuk dihapus.

    2. Untuk Kunci Rahasia AWS yang tersemat dalam kode sumber, ganti dengan peran IAM yang terkait dengan sumber daya yang diperlukan. Jika bagian beban kerja Anda berada di luar AWS tetapi memerlukan kredensial IAM untuk mengakses sumber daya AWS, pertimbangkan untuk menggunakan IAM Roles Anywhere atau AWS Systems Manager Hybrid Activations.

  3. 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.

    1. Konsol CodeGuru dapat secara otomatis membuat rahasia di Secrets Manager menggunakan kredensial yang ditemukan.

    2. Integrasikan pengambilan rahasia dari Secrets Manager ke dalam kode aplikasi Anda.

  4. Tinjau basis kode Anda secara berkala dan pindai kembali untuk memverifikasi bahwa tidak ada rahasia baru yang ditambahkan ke kode.

    • Pertimbangkan untuk menggunakan alat bantu seperti git-secrets untuk mencegah masuknya rahasia baru ke repositori kode sumber Anda.

  5. Pantau aktivitas Secrets Manager untuk mengetahui apakah ada penggunaan yang tidak diharapkan, akses rahasia yang tidak sesuai, atau upaya penghapusan rahasia.

  6. 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 Terbaik Terkait:

Dokumen terkait:

Video terkait:

Lokakarya terkait: