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:

  1. Sekilas tentang Container dan Containerization
  2. Sekilas tentang Microservices
  3. Menggabungkan Penggunaan Container dan Microservices
  4. Tantangan Keamanan Aplikasi Berbasis Container dan Microservices
    4.1. Kerentanan yang Dapat Dieksploitasi
    4.2. Risiko Malware
    4.3. Risiko yang Berkaitan dengan Akses ke Kode
    4.4. Komunikasi Tanpa Batas Antar-Container
    4.5. Mengelola Data Secara Aman
  5. Praktik Terbaik Untuk Mengamankan Microservices dan Container
    5.1. Buat container yang tak bisa diubah
    5.2. Deploy satu microservices per host
    5.3. Integrasikan pengujian keamanan otomatis ke dalam proses pembangunan atau CI/CD
    5.4. Hindari penggunaan privileged container
    5.5. Menjalankan gambar hanya dari sumber terpercaya
    5.6. Gunakan registri untuk mengelola gambar dengan aman
    5.7. Perkuat sistem operasi host
  6. Temukan Partner untuk Membangun Microservices dengan Container Anda

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.

Sekilas tentang Microservices

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.

  • Kerentanan gambar. Ini adalah ancaman keamanan paling umum dalam aplikasi berbasis microservices dan container. Biasanya muncul dari library atau dependensi yang tidak aman. Gambar yang rentan itu sendiri sih tidak terlalu berbahaya. Namun, ketika container dibangun berdasarkan gambar yang rentan, kerentanan itu berpotensi merembet ke seluruh environment.
  • Kerentanan aplikasi. Kerentanan ini mungkin muncul dari cacat dalam kode sumber aplikasi itu sendiri. Sebagai contoh, jika salah satu aplikasi Anda memiliki kerentanan buffer overflow, penyerang dapat memanfaatkannya untuk menjalankan kode berbahaya dan mengambil alih container Anda.
  • Kerentanan terhadap serangan siber. Aplikasi berbasis microservices lebih kompleks daripada aplikasi monolitik, karena terdiri dari banyak komponen yang bergerak. Satu aplikasi bisa mencakup ratusan microservices yang diterapkan dalam ribuan container. Bagi developer, ini berarti kode monolitik dengan 1.000 dynamic-link libraries (DLLs) yang harus dipecah menjadi jumlah microservices yang sama. Ini membuat aplikasi berbasis microservices cukup rentan terhadap serangan siber karena sulit untuk memastikan keamanan yang tepat dari begitu banyak komponen.

b. Risiko Malware

Beberapa skenario potensial untuk serangan malware meliputi:

  • Para peretas mendapatkan akses ke container untuk menyuntikkan kode berbahaya ke dalamnya yang berpotensi menyerang microservices di dalam container tersebut, container lain, atau sistem operasi host.
  • Penyerang siber dapat mengompromikan lingkungan CI/CD Anda untuk menyuntikkan malware ke repositori kode sumber yang digunakan untuk membangun gambar container.
  • Para penyerang meretas registri container dan menggantikan gambar dengan yang berisi malware.
  • Para peretas memanipulasi developer agar men-download gambar container berbahaya dari sumber eksternal.

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:

  • Hak akses yang terlalu luas. Banyak perusahaan pengembangan memilih pendekatan DevOps untuk membangun aplikasi menggunakan microservices dan container karena menghilangkan batasan antara tim dan memastikan integrasi dan penyaluran berkelanjutan (CI/CD). Namun, DevOps dapat menyebabkan hak akses yang terlalu luas, meningkatkan risiko seseorang mengubah kode dalam lingkungan kerja yang terdistribusi.
  • Pengelolaan rahasia yang lemah. Lebih banyak orang dapat mengakses container dalam hal praktik keamanan yang buruk atau pelanggaran aturan keamanan. Misalnya, developer mungkin menempatkan kredensial yang terpasang secara permanen dalam skrip ke dalam container, atau mereka mungkin menyimpan rahasia dalam sistem manajemen kunci yang tidak aman.

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.

e. Mengelola Data Secara Aman

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:

  • Multiple service instances per host
  • Service instance per host
  • Service instance per VM
  • Service instance per container
  • Serverless deployment
  • Service deployment platform

Dua opsi penyebaran yang paling bermanfaat adalah instansi layanan per container dan instansi layanan per host, karena memungkinkan Anda untuk:

  • Memisahkah instansi layanan satu sama lain
  • Menghilangkan kemungkinan persyaratan sumber daya yang konflik atau versi dependensi yang konflik
  • Memungkinkan instansi layanan untuk menggunakan paling banyak sumber daya dari satu host
  • Memantau, mengelola dan men-deploy kembali setiap instansi layanan dengan mudah

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:

  • Risiko persyaratan sumber daya yang konflik dan versi dependensi yang konflik
  • Kesulitan dalam membatasi sumber daya yang dikonsumsi oleh instansi layanan
  • Kesulitan dalam memantau konsumsi sumber daya dari setiap instansi layanan jika beberapa instansi layanan diterapkan dalam proses yang sama

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:

  • Memberikan kontrol akses berbasis peran
  • Menentukan sumber container yang terpercaya
  • Membuat dan memperbarui daftar kerentanan yang diketahui
  • Menandai gambar yang rentan 

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)

HUBUNGI KAMI:
sales@cbncloud.co.id
+6221 2996 4977 ext. 6800
cbncloud.co.id

Kami Ada untuk Anda

Call Center

Hubungi Tim Sales kami untuk tentukan jadwal presentasi.

Support

Tim Technical Support kami yang berpengalaman dan tersertifikasi selalu siap membantu Anda hanya dengan sekali klik atau panggilan telepon. Kapan pun, di mana pun.

Member Center

Masuk sebagai member dan nikmati beragam solusi kami untuk bisnis Anda.