Layaknya mozaik, berbagai layanan dan fitur dalam sebuah software bertanggung jawab untuk menyampaikan kemampuan yang berbeda. Untuk menetralisir kompleksitas software menjadi lebih fleksibel dan tangguh, perusahaan developer sering menggunakan microservices dan container. Survei Statista pada 2021 telah menunjukkan popularitas pendekatan teknologi ini. Sebanyak 34% responden menyatakan telah mengadopsi microservices, dan 37% lainnya mengungkapkan telah menggunakannya sebagian.
Kita sudah sepakat bahwa microservices memiliki banyak manfaat, diantaranya mudah diskalakan dan dikelola. Akan tetapi, seperti pisau bermata dua, pendekatan ini pun menyimpan beberapa tantangan terkait keamanan. Potensi kerentanan dan risiko komunikasi adalah salah duanya. Mengetahui potensi risiko keamanan siber membantu kita mencari solusi yang diperlukan. Produk yang diciptakan pun relatif lebih andal dan aman.
Kali ini kita akan membahas potensi tantangan keamanan dalam arsitektur berbasis container dan microservices saat mengembangkan aplikasi. Kami juga akan menawarkan praktik-praktik terbaik keamanan microservices dan container. Artikel ini akan berguna bagi mereka yang ingin meningkatkan keamanan produk dengan efisien. Bagi yang baru mengenal container dan microservices bisa juga menyimak artikel ini.
Daftar Isi:
Sekilas tentang Container dan Containerization
Container dan microservices adalah pendekatan yang sedang populer dalam pengembangan aplikasi, terutama untuk solusi yang kompleks. Microservices Adoption in 2020 Report dari O'Reilly menunjukkan 77% responden telah mengadopsi microservices, di mana 92%-nya merasakan kesuksesan pendekatan ini. Selain itu, responden yang lebih banyak melaporkan cerita sukses mereka adalah para pengguna container untuk menerapkan microservices.
Kita sudah membahas definisi containerization dan container sebelumnya. Containerization adalah bentuk virtualisasi yang memungkinkan Anda untuk menjalankan aplikasi dalam ruang terisolasi yang disebut container. Dalam menjalankan tugasnya, container menggunakan OS yang sama secara bersama-sama. Oleh karena itu, containerization memungkinkan Anda untuk menerapkan beberapa aplikasi dengan menggunakan OS yang sama pada satu VM (virtual machine—mesin virtual) atau server. Inilah yang membedakannya dengan virtualisasi, di mana beberapa OS dapat dijalankan di hardware dari satu server fisik.
Dari definisi di atas, container juga dikenal sebagai container aplikasi atau container aplikasi server, yaitu unit eksekusi software yang berisikan kode aplikasi beserta library dan dependensinya. Menurut National Institute of Standards and Technology (NIST), container merupakan aplikasi yang saling terisolasi tetapi masih berbagi sumber daya OS yang mendasarinya. Kelebihan ini membuat lebih mudah bagi developer untuk dengan efisien mengeksekusi aplikasi di berbagai cloud.
Sementara itu, arsitektur microservices (atau “microservices” saja) adalah pendekatan arsitektural dalam pengembangan aplikasi, di mana satu aplikasi terdiri dari banyak layanan kecil dan otonom.
Microservices dapat diterapkan secara mandiri. Dibandingkan dengan arsitektur monolitik, Anda dapat meningkatkan kode aplikasi, menambah fitur baru, dan melakukan penskalaan setiap layanan dengan jauh lebih mudah. Microservices juga membantu Anda memperbarui layanan yang ada tanpa harus membangun kembali dan men-deploy seluruh aplikasi.
Sebelumnya topik mengenai microservices sudah pernah kami bahas di artikel ini.
Menggabungkan Penggunaan Container dan Microservices
Container dan microservices dapat digunakan secara terpisah maupun bersamaan. Artikel ini akan membahas praktik keamanan untuk mengembangkan aplikasi yang menggunakan kedua pendekatan tersebut. Sekarang mari kita jelajahi bagaimana container dan microservices dapat digabungkan.
Sebelum membahas lebih jauh Anda bisa membaca artikel mengenai plus minus merancang arsitektur microservices dengan container Docker.
Sederhananya, container mengkapsulasi lingkungan runtime yang ringan untuk sebuah aplikasi. Jadi, microservices yang dikembangkan dalam container akan mewarisi manfaat containerization seperti portabilitas, skalabilitas, dan lapisan keamanan tambahan. Dalam proses containerization, container mengisolasi setiap aplikasi atau microservices supaya risiko penyebaran kerentanan keamanan dapat diminimalisir.
Microservices yang dijalankan dalam container terpisah dapat di-deploy secara mandiri, tanpa memerdulikan bahasa pemrograman setiap microservices. Dengan cara ini, containerization menghilangkan risiko konflik atau gesekan antarbahasa, perpustakaan, dan kerangka kerja.
Containerization juga menyederhanakan microservices dalam menemukan dan berkomunikasi satu sama lain, karena layanan-layanan mikro ini berjalan dalam container yang ada di platform yang sama. Untuk alasan yang sama, developer jadi dimudahkan untuk mengatur orkestrasi microservices.
Tantangan Keamanan Aplikasi Berbasis Container dan Microservices
Seperti pendekatan lainnya, baik container maupun microservices dapat membawa sejumlah tantangan keamanan dalam pengembangan aplikasi. Untuk memastikan keamanan siber yang baik bagi produk Anda, penting untuk menyadari risiko keamanan yang paling umum dan merencanakan cara untuk mencegah dan menguranginya.
a. Kerentanan yang Dapat Dieksploitasi
Secara umum, pembahasan mengenai tantangan keamanan terkait microservices dan container telah beralih ke persyaratan keamanan dari platform orkestrasi. Namun, tidak semua risiko keamanan dapat diatasi pada tingkat orkestrasi. Misalnya, penting untuk tetap memperhatikan kerentanan (vulnerabilities) yang dapat dieksploitasi.
Beberapa skenario potensial untuk serangan malware meliputi:
Permasalahan dengan malware adalah bahwa jika Anda tidak mendeteksinya sebelum meluncurkan sebuah container, malware akan menginfeksi mecroservices di dalam container tersebut dan seluruh lingkungan. Misalnya, malware dapat mengumpulkan data sensitif, menghambat proses, atau mengganggu kinerja container lainnya.
c. Risiko yang Berkaitan dengan Akses ke Kode
Semakin banyak orang yang dapat mengakses dan mengubah kode, semakin banyak risiko keamanan yang muncul. Dua yang paling umum adalah:
d. Komunikasi Tanpa Batas Antar-Container
Biasanya, container tidak dapat mengakses sumber daya di luar lingkungan yang mereka kendalikan langsung (unprivileged modes). Developer seharusnya hanya mengatur kemampuan komunikasi antar-container yang diperlukan untuk pekerjaan aplikasinya. Sebagai contoh, sebuah container aplikasi dimungkinkan untuk melakukan koneksi ke container database.
Setiap kali container memiliki hak istimewa yang lebih besar dari yang benar-benar diperlukan, risiko keamanan berpotensi meningkat. Container dapat mendapatkan hak istimewa yang berlebihan sebagai hasil dari konfigurasi yang salah karena kurangnya pengalaman atau pengelolaan orkestrator yang buruk.
Kerangka kerja terdistribusi dari arsitektur microservices membuat lebih sulit untuk mengamankan data karena sulit mengendalikan akses dan otorisasi yang aman ke layanan individu. Oleh karena itu, para developer harus memberikan perhatian lebih terhadap bagaimana aplikasi mereka memastikan kerahasiaan, privasi, dan integritas data dalam setiap layanan.
Masalah lainnya adalah bahwa data dalam microservices terus berpindah, berubah, dan digunakan dalam berbagai layanan untuk berbagai tujuan, yang menciptakan lebih banyak pintu masuk bagi penyerang siber ke data.
Praktik Terbaik Untuk Mengamankan Microservices dan Container
Praktik-praktik di bawah ini dapat menjadi referensi untuk membantu mengamankan cara Anda dalam mengembangkan aplikasi menggunakan container dan microservices. Akan tetapi, jika Anda baru mulai membuat aplikasi atau hendak memindahkan produk Anda dari arsitektur monolitik ke arsitektur berbasis microservices, pastikan untuk memiliki strategi keamanan yang komprehensif yang sudah disiapkan.
a. Buat container yang tak bisa diubah
Developer cenderung meninggalkan akses shell ke gambar agar mereka dapat memperbaikinya diproduksi. Namun, seringkali para penyerang memanfaatkan akses ini untuk menyuntikkan kode berbahaya. Untuk menghindari hal ini, buat container yang tak bisa diubah.
b. Deploy satu microservices per host
Menurut microservices.io, ada enam pola untuk menerapkan microservices:
Dua opsi penyebaran yang paling bermanfaat adalah instansi layanan per container dan instansi layanan per host, karena memungkinkan Anda untuk:
Meskipun menerapkan beberapa microservies pada host yang sama memungkinkan penggunaan sumber daya yang lebih efisien daripada pola instansi layanan per-host, hal ini juga memiliki banyak kekurangan:
c. Integrasikan pengujian keamanan otomatis ke dalam proses pembangunan atau CI/CD
Ada berbagai alat yang dapat menguji container secara otomatis selama proses pembangunan atau CI/CD. Misalnya, HP Fortify dan IBM AppScan menawarkan pengujian keamanan aplikasi dinamis dan statis.
Anda juga dapat menggunakan scanner seperti JFrog Xray dan Black Duck untuk memeriksa container terhadap kerentanan yang diketahui secara real-time. Setelah alat-alat ini menemukan kerentanan, mereka menandai pembangunan dengan masalah yang terdeteksi, memungkinkan Anda untuk memeriksanya dan memperbaikinya.
d. Hindari penggunaan privileged container
Jika sebuah container berjalan dalam mode privileged, ia memiliki akses ke semua komponen di host. Oleh karena itu, container semacam ini berfungsi sebagai bagian dari sistem operasi host dan memengaruhi semua container lain yang berjalan di atasnya. Jika container semacam ini terkompromi, seorang penyerang akan memiliki akses penuh ke server.
Oleh karena itu, pertimbangkan untuk menghindari penggunaan privileged container. Sebagai contoh, dalam Kubernetes, Anda dapat melarang privileged container menggunakan Policy Controller.
e. Menjalankan gambar hanya dari sumber terpercaya
Terdapat banyak paket open-source bagi developer dengan container siap pakai. Namun, untuk tujuan keamanan, Anda perlu mengetahui asal-usul container, kapan terakhir kali diperbarui, dan apakah container tersebut bebas dari kerentanan dan kode berbahaya. Sebaiknya mendirikan repositori gambar yang terpercaya dan menjalankan gambar hanya dari sumber yang terpercaya tersebut.
f. Gunakan registri untuk mengelola gambar dengan aman
Registri seperti Docker Hub, Amazon EC2 Container Registry, dan Quay Container Registry membantu para developer untuk menyimpan dan mengelola gambar yang mereka buat. Anda dapat menggunakan registri ini untuk:
g. Perkuat sistem operasi host
Meskipun sebagian besar rekomendasi mengacu pada keamanan microservices dan container, penting juga untuk memastikan keamanan sistem operasi host.
Temukan Partner untuk Membangun Microservices dengan Container Anda
Bagaimana tangapan Anda setelah membaca beberapa artikel mengenai container dan microservices? Jika, tertarik untuk beralih ke arsitektur microservices, saatnya untuk mencari partner yang handal dan terpercaya untuk membantu Anda.
Sebagai salah satu penyedia cloud computing terpercaya di Indonesia, CBNCloud memiliki layanan Container Management yang dapat menjadi mitra Anda dalam rancang bangun micoservices dengan dukungan platform seperti Docker dan Kubernetes. Layanan kami termasuk mendampingi Anda untuk memahami kebutuhan bisnis, menginstalasi platform yang sesuai dengan kebutuhan tersebut sampai dengan rancang arsitektur microservices Anda.
Jika diperlukan, Anda juga dapat memercayakan mitra pembuatan container Anda kepada kami, termasuk proses pengembangan dan uji coba. Anda juga dapat senantiasa berdiskusi dengan kami terkait masalah impelentasi dan skalabilitas, pemantauan dan pengelolaan, keamanan serta pembaruan dan perbaikan.
Jadwalkan meeting dengan kami untuk membahas rangkaian solusi cloud menyeluruh dari hulu ke hilir.
Anda juga dapat berinteraksi dengan tim Sales dan Support kami dengan cara sesederhana mengirimkan email, mengisi formulir permintaan layanan, atau menelepon Call Center.
Belum punya kebutuhan akan ketiga teknologi ini karena kurangnya tim pendukung internal untuk mengikuti perkembangan teknonologi cloud yang dinamis? Jangan khawatir, kami pun siap mendampingi Anda dalam solusi Managed Services kami.
Nikmati kemudahan bertransformasi digital bersama CBNCloud, optimized to simplify your life. (put)