Dokumen ini menjelaskan praktik terbaik untuk membuat dan mengelola konfigurasi Cloud Service Mesh yang aman dan berjalan di Google Kubernetes Engine (GKE). Panduan dalam dokumen ini tidak hanya membahas setelan yang digunakan untuk mengonfigurasi dan menginstal Cloud Service Mesh, tetapi juga menjelaskan cara menggunakan Cloud Service Mesh dengan produk dan fitur Google Cloud lainnya untuk melindungi dari ancaman keamanan yang mungkin dihadapi aplikasi dalam mesh.
Audiens yang dituju untuk dokumen ini mencakup administrator yang mengelola kebijakan di Cloud Service Mesh dan pengguna yang menjalankan layanan di Cloud Service Mesh. Langkah-langkah keamanan yang dijelaskan di sini juga berguna bagi organisasi yang perlu meningkatkan keamanan mesh layanan mereka untuk memenuhi persyaratan kepatuhan.
Dokumen ini disusun sebagai berikut:
- Pengantar
- Vektor serangan dan risiko keamanan
- Tindakan untuk melindungi mesh layanan
- Arsitektur keamanan
- Keamanan cluster
- Keamanan edge mesh
- Keamanan untuk administrasi dan otomatisasi mesh
- Keamanan workload
- Keamanan untuk kredensial dan data pengguna yang sensitif
Pengantar
Cloud Service Mesh menyediakan fitur dan alat yang membantu Anda mengamati, mengelola, dan mengamankan layanan dengan cara yang terpadu. Pendekatan ini menggunakan pendekatan yang berfokus pada aplikasi dan menggunakan identitas aplikasi tepercaya, bukan pendekatan yang berfokus pada IP jaringan. Anda dapat men-deploy mesh layanan secara transparan tanpa perlu mengubah kode aplikasi yang ada. Cloud Service Mesh memberikan kontrol deklaratif atas perilaku jaringan, yang membantu memisahkan pekerjaan tim yang bertanggung jawab untuk mengirimkan dan merilis fitur aplikasi dari tanggung jawab administrator yang bertanggung jawab atas keamanan dan jaringan.
Cloud Service Mesh didasarkan pada mesh layanan Istio open source, yang memungkinkan konfigurasi dan topologi yang canggih. Bergantung pada struktur organisasi Anda, satu atau beberapa tim atau peran mungkin bertanggung jawab untuk menginstal dan mengonfigurasi mesh. Setelan Cloud Service Mesh default dipilih untuk melindungi aplikasi, tetapi dalam beberapa kasus, Anda mungkin memerlukan konfigurasi kustom atau memberikan pengecualian dengan mengecualikan aplikasi, port, atau alamat IP tertentu agar tidak berpartisipasi dalam mesh. Memiliki kontrol untuk mengatur konfigurasi mesh dan pengecualian keamanan adalah hal yang penting.
Vektor serangan dan risiko keamanan
Vektor serangan
Keamanan Cloud Service Mesh mengikuti model keamanan zero-trust yang mengasumsikan ancaman keamanan berasal dari dalam dan luar perimeter keamanan organisasi. Contoh jenis serangan keamanan yang dapat mengancam aplikasi di mesh layanan meliputi:
- Serangan pemindahan data yang tidak sah. Misalnya, serangan yang menguping data sensitif atau kredensial dari traffic layanan ke layanan.
- Serangan man-in-the-middle. Misalnya, layanan berbahaya yang menyamar sebagai layanan yang sah untuk mendapatkan atau mengubah komunikasi antar- layanan.
- Serangan eskalasi akses. Misalnya, serangan yang menggunakan akses gelap ke hak istimewa yang ditingkatkan untuk melakukan operasi di jaringan.
- Serangan denial of service (DoS).
- Serangan botnet yang mencoba membahayakan dan memanipulasi layanan untuk meluncurkan serangan terhadap layanan lain.
Serangan juga dapat dikategorikan berdasarkan target serangan:
- Serangan jaringan internal mesh. Serangan yang bertujuan untuk merusak, menyadap, atau meniru komunikasi layanan ke layanan atau layanan ke panel kontrol internal mesh.
- Serangan bidang kontrol. Serangan yang bertujuan menyebabkan bidang kontrol berfungsi tidak semestinya (seperti serangan DoS), atau mengeksfiltrasi data sensitif dari bidang kontrol.
- Serangan tepi mesh. Serangan yang bertujuan untuk merusak, menyadap, atau melakukan spoofing komunikasi di ingress atau egress mesh.
- Serangan operasi Mesh. Serangan yang ditujukan pada operasi mesh. Penyerang dapat mencoba mendapatkan hak istimewa yang ditingkatkan untuk melakukan operasi berbahaya dalam mesh, seperti mengubah kebijakan keamanan dan image workload-nya.
Risiko keamanan
Selain serangan keamanan, mesh juga menghadapi risiko keamanan lainnya. Daftar berikut menjelaskan beberapa kemungkinan risiko keamanan:
- Perlindungan keamanan tidak lengkap. Mesh layanan belum dikonfigurasi dengan kebijakan autentikasi dan otorisasi untuk melindungi keamanannya. Misalnya, tidak ada kebijakan autentikasi atau otorisasi yang ditentukan untuk layanan dalam mesh.
- Pengecualian kebijakan keamanan. Untuk mengakomodasi kasus penggunaan tertentu, pengguna dapat membuat pengecualian kebijakan keamanan untuk traffic tertentu (internal atau eksternal) agar dikecualikan dari kebijakan keamanan Cloud Service Mesh. Untuk menangani kasus tersebut dengan aman, lihat bagian Menangani pengecualian kebijakan dengan aman.
- Mengabaikan upgrade image. Kerentanan dapat ditemukan untuk gambar yang digunakan dalam mesh. Anda harus terus memperbarui komponen mesh dan image workload dengan perbaikan kerentanan terbaru.
- Kurangnya pemeliharaan (tidak ada keahlian atau sumber daya). Software mesh dan konfigurasi kebijakan memerlukan pemeliharaan rutin untuk memanfaatkan mekanisme perlindungan keamanan terbaru.
- Kurangnya visibilitas. Konfigurasi yang salah atau konfigurasi kebijakan mesh yang tidak aman dan traffic/operasi mesh yang abnormal tidak akan menarik perhatian administrator mesh.
- Drift konfigurasi. Konfigurasi kebijakan dalam mesh menyimpang dari sumber tepercaya.
Langkah-langkah untuk melindungi mesh layanan
Bagian ini menyajikan manual pengoperasian untuk mengamankan mesh layanan.
Arsitektur keamanan
Keamanan mesh layanan bergantung pada keamanan komponen di berbagai lapisan sistem mesh dan aplikasinya. Tujuan tingkat tinggi dari postur keamanan Cloud Service Mesh yang diusulkan adalah untuk mengamankan mesh layanan melalui integrasi beberapa mekanisme keamanan di berbagai lapisan, yang secara bersama-sama mencapai keamanan sistem secara keseluruhan berdasarkan model keamanan zero-trust. Diagram berikut menunjukkan postur keamanan Cloud Service Mesh yang diusulkan.
Cloud Service Mesh menyediakan keamanan di beberapa lapisan, termasuk:
- Keamanan edge mesh
- Keamanan traffic masuk Cloud Service Mesh memberikan kontrol akses untuk traffic eksternal dan mengamankan akses eksternal ke API yang diekspos oleh layanan dalam mesh.
- Keamanan egress Cloud Service Mesh mengatur traffic keluar dari workload internal.
- Autentikasi Pengguna Cloud Service Mesh terintegrasi dengan infrastruktur Google untuk mengautentikasi panggilan eksternal dari browser web ke layanan yang menjalankan aplikasi web.
- Pengelolaan sertifikat gateway Cloud Service Mesh melindungi dan merotasi kunci pribadi dan sertifikat X.509 yang digunakan oleh gateway masuk dan keluar Cloud Service Mesh menggunakan Certificate Authority Service.
- Cloud Armor dapat mempertahankan diri dari serangan distributed denial of service (DDoS) eksternal dan serangan Lapisan 7. Layanan ini berfungsi sebagai Firewall Aplikasi Web (WAF) untuk melindungi mesh dari serangan jaringan. Misalnya, serangan injeksi dan eksekusi kode jarak jauh.
- VPC dan Kontrol Layanan VPC melindungi edge mesh melalui kontrol akses jaringan pribadi.
- Keamanan cluster
- TLS bersama (mTLS) Cloud Service Mesh menerapkan enkripsi dan autentikasi traffic workload ke workload.
- CA terkelola, seperti certificate authority Cloud Service Mesh dan Certificate Authority Service, menyediakan dan mengelola sertifikat yang digunakan oleh workload dengan aman.
- Otorisasi Cloud Service Mesh menerapkan kontrol akses untuk layanan mesh berdasarkan identitas dan atribut lainnya.
- Dasbor keamanan GKE Enterprise menyediakan pemantauan konfigurasi kebijakan keamanan dan Kebijakan Jaringan Kubernetes untuk workload.
- Kebijakan Jaringan Kubernetes menerapkan kontrol akses Pod berdasarkan alamat IP, label Pod, namespace, dan lainnya.
- Keamanan bidang kontrol melindungi dari serangan pada bidang kontrol. Perlindungan ini mencegah penyerang mengubah, mengeksploitasi, atau membocorkan data konfigurasi layanan dan mesh.
- Keamanan beban kerja
- Dapatkan informasi terbaru tentang rilis keamanan Cloud Service Mesh untuk memastikan biner Cloud Service Mesh yang berjalan di mesh Anda bebas dari kerentanan yang diketahui secara publik.
- Workload Identity Federation for GKE memungkinkan workload mendapatkan kredensial untuk memanggil layanan Google dengan aman.
- Cloud Key Management Service (Cloud KMS) mengamankan data atau kredensial sensitif melalui Hardware Security Module (HSM). Misalnya, workload dapat menggunakan Cloud KMS untuk menyimpan kredensial atau data sensitif lainnya. Layanan CA—yang digunakan untuk mengeluarkan sertifikat ke beban kerja mesh—mendukung kunci penandatanganan per pelanggan dan yang didukung HSM yang dikelola oleh Cloud KMS.
- CNI Kubernetes (Container Network Interface) mencegah serangan eskalasi hak istimewa dengan menghilangkan kebutuhan akan penampung init Cloud Service Mesh yang memiliki hak istimewa.
- Keamanan operator
- Kontrol akses berbasis peran (RBAC) Kubernetes membatasi akses ke resource Kubernetes dan membatasi izin operator untuk mengurangi serangan yang berasal dari operator berbahaya atau peniruan identitas operator.
- Pengontrol Kebijakan GKE Enterprise memvalidasi dan mengaudit konfigurasi kebijakan di mesh untuk mencegah konfigurasi yang salah.
- Otorisasi Biner Google Cloud memastikan bahwa image beban kerja dalam mesh adalah image yang diotorisasi oleh administrator.
- Google Cloud Audit Logging mengaudit operasi mesh.
Diagram di bawah menunjukkan alur komunikasi dan konfigurasi dengan solusi keamanan terintegrasi di Cloud Service Mesh.
Keamanan cluster
Mengaktifkan TLS bersama yang ketat
Serangan man-in-the-middle (MitM) mencoba menyisipkan entitas berbahaya di antara dua pihak yang berkomunikasi untuk menyadap atau memanipulasi komunikasi. Cloud Service Mesh melindungi dari serangan MitM dan pemindahan data yang tidak sah dengan menerapkan autentikasi dan enkripsi mTLS untuk semua pihak yang berkomunikasi. Mode permisif menggunakan mTLS jika kedua sisi mendukungnya, tetapi mengizinkan koneksi tanpa mTLS. Sebaliknya, mTLS ketat mewajibkan traffic dienkripsi dan diautentikasi dengan mTLS serta tidak mengizinkan traffic teks biasa.
Untuk mengetahui informasi selengkapnya, lihat Cloud Service Mesh dengan contoh: mTLS | Menerapkan mTLS di seluruh mesh.
Mengaktifkan kontrol akses
Kebijakan keamanan Cloud Service Mesh (seperti kebijakan autentikasi dan otorisasi) harus diterapkan pada semua traffic masuk dan keluar dari mesh, kecuali jika ada justifikasi yang kuat untuk mengecualikan layanan atau Pod dari kebijakan keamanan Cloud Service Mesh. Dalam beberapa kasus, pengguna mungkin memiliki alasan yang sah untuk mengabaikan kebijakan keamanan Cloud Service Mesh untuk beberapa port dan rentang IP. Misalnya, untuk membangun koneksi native dengan layanan yang tidak dikelola oleh Cloud Service Mesh. Untuk mengamankan Cloud Service Mesh dalam kasus penggunaan tersebut, lihat Menangani pengecualian kebijakan Cloud Service Mesh dengan aman.
Kontrol akses layanan sangat penting dalam mencegah akses tidak sah ke layanan. Penerapan mTLS mengenkripsi dan mengautentikasi permintaan, tetapi mesh masih memerlukan kebijakan otorisasi Cloud Service Mesh untuk menerapkan kontrol akses pada layanan. Misalnya, menolak permintaan tidak sah yang berasal dari klien yang diautentikasi.
Kebijakan otorisasi Cloud Service Mesh menyediakan cara yang fleksibel untuk mengonfigurasi kontrol akses guna mempertahankan layanan Anda dari akses tidak sah. Kebijakan otorisasi Cloud Service Mesh harus diterapkan berdasarkan identitas terautentikasi yang berasal dari hasil autentikasi - autentikasi berbasis mTLS atau Token Web JSON (JWT) harus digunakan bersama sebagai bagian dari kebijakan otorisasi Cloud Service Mesh.
Menerapkan kebijakan autentikasi Cloud Service Mesh
Token Web JSON (JWT)
Selain autentikasi mTLS, administrator mesh dapat mewajibkan layanan untuk mengautentikasi dan memberikan otorisasi permintaan berdasarkan JWT. Cloud Service Mesh tidak bertindak sebagai penyedia JWT, tetapi mengautentikasi JWT berdasarkan endpoint JSON web key set (JWKS) yang dikonfigurasi. Autentikasi JWT dapat diterapkan ke gateway masuk untuk traffic eksternal atau ke layanan internal untuk traffic dalam mesh. Autentikasi JWT dapat digabungkan dengan autentikasi mTLS saat JWT digunakan sebagai kredensial untuk mewakili pemanggil akhir dan layanan yang diminta memerlukan bukti bahwa layanan tersebut dipanggil atas nama pemanggil akhir. Menerapkan autentikasi JWT akan melindungi dari serangan yang mengakses layanan tanpa kredensial yang valid dan atas nama pengguna akhir yang sebenarnya.
Autentikasi pengguna Cloud Service Mesh
Autentikasi pengguna Cloud Service Mesh adalah solusi terintegrasi untuk autentikasi pengguna akhir berbasis browser dan kontrol akses ke beban kerja Anda. Layanan ini mengintegrasikan mesh layanan dengan Penyedia Identitas (IdP) yang ada untuk menerapkan alur izin dan login OpenID Connect (OIDC) berbasis web standar, serta menggunakan kebijakan otorisasi Cloud Service Mesh untuk kontrol akses.
Kebijakan otorisasi Cloud Service Mesh mengontrol:
- Siapa atau apa yang diizinkan untuk mengakses layanan.
- Resource yang dapat diakses.
- Operasi yang dapat dilakukan pada resource yang diizinkan.
Kebijakan otorisasi adalah cara serbaguna untuk mengonfigurasi kontrol akses berdasarkan identitas sebenarnya yang dijalankan layanan, properti lapisan aplikasi (Lapisan 7) traffic (misalnya header permintaan), dan properti lapisan jaringan (Lapisan 3 dan Lapisan 4) seperti rentang IP dan port.
Kebijakan otorisasi Cloud Service Mesh harus diterapkan berdasarkan identitas terautentikasi yang berasal dari hasil autentikasi untuk mempertahankan diri dari akses tidak sah ke layanan atau data.
Secara default, akses ke layanan harus ditolak kecuali jika kebijakan otorisasi ditentukan secara eksplisit untuk mengizinkan akses ke layanan. Lihat Praktik Terbaik Kebijakan Otorisasi untuk mengetahui contoh kebijakan otorisasi yang menolak permintaan akses.
Kebijakan otorisasi harus membatasi kepercayaan sebanyak mungkin. Misalnya,
akses ke layanan dapat ditentukan berdasarkan setiap jalur URL yang ditampilkan oleh
layanan sehingga hanya layanan A yang dapat mengakses jalur /admin
layanan B.
Kebijakan otorisasi dapat digunakan bersama dengan Kebijakan Jaringan Kubernetes, yang hanya beroperasi di lapisan jaringan (Lapisan 3 dan Lapisan 4) dan mengontrol akses jaringan untuk alamat IP dan port di Pod Kubernetes dan namespace Kubernetes.
Menerapkan pertukaran token untuk mengakses layanan mesh
Untuk mempertahankan diri dari serangan replay token yang mencuri token dan menggunakan kembali token yang dicuri untuk mengakses layanan mesh, token dalam permintaan dari luar mesh harus ditukar dengan token internal mesh yang memiliki masa aktif singkat di tepi mesh.
Permintaan dari luar mesh untuk mengakses layanan mesh harus menyertakan token, seperti JWT atau cookie, agar dapat diautentikasi dan diberi otorisasi oleh layanan mesh. Token dari luar mesh mungkin memiliki masa berlaku yang lama. Untuk mempertahankan diri dari serangan replay token, token dari luar mesh harus ditukar dengan token internal mesh berumur pendek dengan cakupan terbatas di ingress mesh. Layanan mesh mengautentikasi token internal mesh dan memberikan otorisasi permintaan akses berdasarkan token internal mesh.
Cloud Service Mesh mendukung
integrasi dengan Identity-Aware Proxy (IAP),
yang menghasilkan RequestContextToken
(token internal mesh berumur pendek
yang ditukar dari token eksternal) yang digunakan di Cloud Service Mesh untuk otorisasi. Dengan
pertukaran token, penyerang tidak dapat menggunakan token yang dicuri di mesh untuk mengakses
layanan. Cakupan dan masa berlaku token yang ditukarkan yang terbatas akan sangat mengurangi
kemungkinan serangan replay token.
Menangani pengecualian kebijakan Cloud Service Mesh dengan aman
Anda mungkin memiliki kasus penggunaan khusus untuk mesh layanan. Misalnya, Anda mungkin perlu mengekspos port jaringan tertentu ke traffic teks biasa. Untuk mengakomodasi skenario penggunaan tertentu, terkadang Anda mungkin perlu membuat pengecualian untuk mengizinkan traffic internal atau eksternal tertentu dikecualikan dari kebijakan keamanan Cloud Service Mesh, yang menimbulkan masalah keamanan.
Anda mungkin memiliki alasan yang sah untuk mengabaikan kebijakan keamanan Cloud Service Mesh untuk beberapa port dan rentang IP. Anda dapat menambahkan
annotations
(seperti, excludeInboundPorts
, excludeOutboundPorts
,
excludeOutboundIPRanges
) ke Pod untuk mengecualikan traffic agar tidak ditangani oleh
sidecar Envoy. Selain anotasi untuk mengecualikan traffic, Anda dapat mengabaikan mesh
sepenuhnya dengan men-deploy aplikasi dengan
injeksi sidecar dinonaktifkan.
Misalnya, dengan menambahkan label sidecar.istio.io/inject="false"
ke
Pod aplikasi.
Mengabaikan kebijakan keamanan Cloud Service Mesh akan berdampak negatif pada keamanan sistem secara keseluruhan. Misalnya, jika kebijakan otorisasi dan mTLS Cloud Service Mesh diabaikan untuk port jaringan melalui anotasi, tidak akan ada kontrol akses untuk traffic di port dan penyadapan atau modifikasi traffic mungkin terjadi. Selain itu, mengabaikan kebijakan Cloud Service Mesh juga memengaruhi kebijakan non-keamanan, seperti kebijakan jaringan.
Jika kebijakan keamanan Cloud Service Mesh diabaikan untuk port atau IP (baik secara sengaja maupun tidak sengaja), harus ada langkah keamanan lain yang diterapkan untuk mengamankan mesh dan memantau pengecualian keamanan, potensi celah keamanan, dan status penerapan keamanan secara keseluruhan. Untuk mengamankan mesh dalam skenario tersebut, Anda dapat:
- Pastikan traffic yang mengabaikan sidecar dienkripsi dan diautentikasi secara native untuk mencegah serangan MitM.
- Menerapkan Kebijakan Jaringan Kubernetes untuk membatasi konektivitas port dengan pengecualian kebijakan (misalnya, membatasi port dengan pengecualian kebijakan untuk hanya mengizinkan traffic dari layanan lain di namespace yang sama) atau hanya mengizinkan traffic melewati port dengan kebijakan keamanan Cloud Service Mesh yang diterapkan.
- Terapkan Pengontrol Kebijakan GKE Enterprise untuk memvalidasi kebijakan Cloud Service Mesh secara otomatis. Misalnya, pastikan sidecar Cloud Service Mesh selalu dimasukkan ke beban kerja.
Menerapkan Kebijakan Jaringan Kubernetes
Cloud Service Mesh dibuat berdasarkan platform yang mendasarinya (misalnya, Kubernetes). Dengan demikian, keamanan Cloud Service Mesh bergantung pada keamanan platform yang mendasarinya. Misalnya, tanpa kontrol atas siapa yang dapat mengupdate resource Kubernetes, pengguna dapat mengubah deployment Kubernetes layanan untuk mengabaikan sidecar layanan.
Untuk membentuk postur keamanan yang kuat bagi service mesh, mekanisme keamanan platform yang mendasarinya harus diterapkan agar berfungsi bersama dengan kebijakan keamanan Cloud Service Mesh.
Kebijakan Jaringan Kubernetes beroperasi di Lapisan jaringan (L3 dan L4) untuk alamat IP dan port di namespace dan Pod Kubernetes. Kebijakan jaringan Kubernetes dapat diterapkan bersama dengan kebijakan Cloud Service Mesh untuk meningkatkan keamanan mesh.
Misalnya, administrator mesh dapat mengonfigurasi Kebijakan Jaringan Kubernetes agar hanya mengizinkan traffic menggunakan port dengan kebijakan keamanan Cloud Service Mesh yang diterapkan. Jika semua traffic harus diterapkan dengan mTLS Cloud Service Mesh, administrator dapat mengonfigurasi kebijakan jaringan Kubernetes untuk hanya mengizinkan traffic di port yang dikonfigurasi dengan kebijakan mTLS Cloud Service Mesh. Administrator mesh juga dapat mengonfigurasi Kebijakan Jaringan Kubernetes untuk membatasi konektivitas port dengan pengecualian kebijakan. Misalnya, batasi konektivitas port tersebut agar berada dalam namespace.
Mengamankan akses bidang kontrol
Bidang kontrol Cloud Service Mesh mengautentikasi klien yang terhubung. Dengan demikian, hanya pemanggil dengan kredensial yang valid (Kubernetes JWT atau sertifikat X.509 yang dikeluarkan oleh CA yang diizinkan) yang dapat mengakses bidang kontrol Cloud Service Mesh. TLS mengenkripsi koneksi antara workload dan bidang kontrol Cloud Service Mesh.
Selain mekanisme autentikasi, untuk Cloud Service Mesh dalam cluster, kebijakan jaringan Kubernetes dapat di-deploy untuk mengisolasi namespace sistem Cloud Service Mesh (secara default istio-system) dari namespace dan klien yang tidak dikelola di luar mesh sekaligus mengizinkan data plane mengakses panel kontrol. Aturan firewall VPC dapat mencegah traffic di luar cluster menjangkau Istiod. Dengan langkah-langkah isolasi jaringan tersebut, penyerang dari luar mesh tidak akan dapat mengakses bidang kontrol, meskipun penyerang memiliki kredensial yang valid. Untuk bidang kontrol terkelola, Google menangani keamanan untuk bidang kontrol dan kebijakan isolasi jaringan tersebut untuk bidang kontrol tidak diperlukan.
Menerapkan batas namespace
Untuk mencegah pengguna satu namespace mengakses/memperbarui resource di namespace yang tidak sah:
- Menerapkan kontrol akses.
- Menerapkan Kebijakan Jaringan Kubernetes. Jika layanan dalam namespace tidak memiliki traffic di luar namespace, administrator mesh harus men-deploy kebijakan jaringan Kubernetes yang hanya mengizinkan traffic di dalam namespace: tidak ada traffic masuk atau keluar dari namespace.
- Menerapkan kebijakan RBAC Kubernetes.
- Peran administrator aplikasi harus terikat dengan namespace.
- Hanya izinkan administrator mesh untuk memiliki ClusterRole.
Menerapkan kebijakan RBAC Kubernetes
Administrator mesh harus menerapkan kebijakan RBAC Kubernetes untuk mengontrol siapa yang diizinkan mengakses dan memperbarui resource Kubernetes. Kontrol akses Kubernetes dapat memitigasi risiko keamanan di mesh. Misalnya, pengguna yang tidak sah tidak boleh diizinkan untuk mengubah deployment Kubernetes dan mengabaikan penerapan kebijakan Cloud Service Mesh. Peran pengguna harus diikat ke namespace sehingga pengguna tidak diizinkan untuk mengakses namespace yang lebih banyak daripada yang diperlukan. Untuk panduan mendetail dan contoh konfigurasi RBAC, lihat Mengonfigurasi kontrol akses berbasis peran. Setelah mengaktifkan Workload Identity Federation untuk GKE, Anda juga dapat mengizinkan akun layanan Kubernetes untuk bertindak sebagai akun layanan IAM.
Keamanan edge mesh
Karena sebagian besar serangan juga dapat berasal dari luar cluster, memastikan keamanan di tepi mesh sangatlah penting.
Kontrol akses ingress cluster
Cloud Service Mesh menerima traffic eksternal yang masuk melalui gateway masuk. Layanan yang diekspos oleh gateway masuk berpotensi menghadapi serangan dari sumber eksternal. Administrator keamanan harus selalu memastikan bahwa layanan yang diekspos ke traffic eksternal melalui gateway masuk cukup aman untuk mempertahankan diri dari serangan.
Ingress harus menerapkan autentikasi dan otorisasi untuk layanan yang diekspos ke pemanggil eksternal.
- Menerapkan kebijakan keamanan ingress cluster. Jika cluster perlu menerima traffic eksternal, administrator mesh harus menerapkan kebijakan keamanan masuk, termasuk kebijakan TLS gateway, autentikasi, dan otorisasi Cloud Service Mesh, untuk mengautentikasi permintaan eksternal dan memverifikasi bahwa permintaan eksternal diberi otorisasi untuk mengakses layanan yang diekspos oleh gateway masuk. Penerapan kebijakan keamanan masuk akan melindungi dari serangan dari luar mesh yang mencoba mengakses layanan tanpa kredensial atau izin yang valid.
- Gunakan Cloud Armor sebagai Firewall Aplikasi Web (WAF) untuk melindungi dari serangan berbasis web (misalnya, serangan injeksi dan serangan eksekusi jarak jauh). Untuk mengetahui informasi selengkapnya, lihat Dari edge ke mesh: Mengekspos aplikasi mesh layanan melalui GKE Ingress.
Mengatur traffic keluar cluster
Keamanan keluar cluster sangat penting untuk keamanan mesh karena kebijakan keamanan keluar dapat bertahan dari serangan pemindahan data yang tidak sah, menerapkan pemfilteran traffic keluar, dan menerapkan TLS origination untuk traffic keluar. Administrator keamanan harus mengatur dan mengaudit traffic keluar cluster.
Selain menggunakan firewall VPC untuk membatasi traffic keluar, administrator mesh juga harus menerapkan kebijakan keamanan keluar untuk cluster dan mengonfigurasi traffic keluarnya agar melewati gateway keluar.
Kebijakan egress dapat memitigasi serangan berikut:
- Serangan pemindahan data yang tidak sah.
- Pod Layanan dapat dieksploitasi oleh penyerang jika CVE-nya tidak di-patch. Pod yang disusupi dapat menjadi botnet yang dikontrol oleh penyerang untuk mengirim spam atau meluncurkan serangan DoS.
Kebijakan otorisasi yang diterapkan ke gateway keluar dapat memastikan bahwa hanya layanan resmi yang diizinkan untuk mengirim traffic ke host tertentu di luar mesh. Sementara itu, untuk traffic yang keluar dari mesh, TLS dapat berasal dari gateway keluar, bukan menangani TLS origination di setiap sidecar. Hal ini memberikan cara yang seragam dan lebih aman untuk memulai traffic TLS karena sertifikat klien untuk mTLS dapat diisolasi dari namespace tempat aplikasi berjalan.
Menggunakan cluster pribadi atau Kontrol Layanan VPC untuk mengunci akses eksternal
Selain menerapkan kebijakan keamanan akses masuk dan keluar, kunci akses eksternal menggunakan cluster pribadi atau Kontrol Layanan VPC jika memungkinkan. Meskipun kebijakan keamanan dikontrol oleh administrator keamanan mesh, konfigurasi cluster pribadi atau Kontrol Layanan VPC dapat diterapkan oleh administrator keamanan organisasi.
Kontrol Layanan VPC dapat diterapkan untuk menentukan perimeter keamanan bagi layanan guna:
- Membatasi layanan agar tidak mengakses resource di luar.
- Membatasi orang luar agar tidak dapat mengakses layanan dalam perimeter keamanan.
Kontrol Layanan VPC membantu melindungi dari serangan pemindahan data yang tidak sah dan mencegah penyerang eksternal mengakses layanan di dalam mesh.
Melindungi dari serangan DDoS eksternal
Serangan DDoS eksternal dapat membebani gateway traffic masuk dan layanan backend, sehingga mencegah permintaan yang sah ditangani. Cloud Armor dapat digunakan untuk mempertahankan diri dari serangan DDoS. Cloud Armor tidak hanya melindungi dari serangan DDoS lapisan jaringan (L3 dan L4), tetapi juga serangan DDoS lapisan aplikasi (L7).
Keamanan untuk otomatisasi dan administrasi mesh
Penting untuk mempertimbangkan keamanan untuk operasi administratif dan otomatisasi apa pun yang Anda buat di sekitar mesh, misalnya CI/CD. Praktik berikut bertujuan untuk memastikan bahwa mesh dapat dioperasikan dengan aman tanpa risiko mengekspos layanan ke serangan tambahan.
Membuat segmen peran yang digunakan untuk operasi mesh
Dengan mengikuti prinsip yang sama seperti kontrol akses berbasis peran, pengguna mesh harus diklasifikasikan sesuai dengan peran mereka. Setiap peran hanya boleh diberi kumpulan hak istimewa minimum yang diperlukan oleh peran tersebut.
Misalnya, kumpulan pengguna yang melakukan deployment layanan tidak boleh memiliki hak istimewa untuk memperbarui kebijakan autentikasi dan otorisasi.
Ada berbagai kategori operator. Misalnya, operator cluster dan operator namespace. Penting untuk mencegah eskalasi hak istimewa dari operator, yang dapat mengakibatkan akses ilegal ke resource yang tidak sah.
Kebijakan RBAC Kubernetes memungkinkan administrator mesh membatasi akses resource hanya untuk pengguna yang diotorisasi.
Memvalidasi konfigurasi kebijakan secara otomatis
Operator mungkin tidak sengaja salah mengonfigurasi kebijakan Cloud Service Mesh, yang dapat mengakibatkan insiden keamanan serius. Untuk mencegah kesalahan konfigurasi dan memvalidasi kebijakan Cloud Service Mesh secara otomatis, administrator mesh dapat menggunakan Pengontrol Kebijakan untuk menerapkan batasan pada konfigurasi kebijakan.
Untuk menghindari terlalu banyak memercayai individu yang memiliki izin untuk mengupdate kebijakan keamanan Cloud Service Mesh dan mengotomatiskan validasi kebijakan Cloud Service Mesh, administrator mesh harus menerapkan batasan pada kebijakan Cloud Service Mesh menggunakan Policy Controller.
Pengontrol Kebijakan didasarkan pada project Gatekeeper open source dan dapat dijalankan sebagai pengontrol penerimaan Kubernetes untuk menolak resource yang tidak valid agar tidak diterapkan atau dalam mode audit sehingga administrator dapat diberi tahu tentang pelanggaran. Pengontrol Kebijakan dapat memvalidasi deployment resource di mesh secara otomatis, seperti memvalidasi bahwa anotasi pada deployment tidak mengabaikan kebijakan Cloud Service Mesh, memvalidasi bahwa kebijakan Cloud Service Mesh sesuai dengan yang diharapkan, dan memvalidasi bahwa deployment tidak menyertakan kemampuan root (seperti, NET_ADMIN
dan NET_RAW
).
Pengontrol Kebijakan juga dapat mengaudit resource Cloud Service Mesh yang ada terhadap batasan untuk mendeteksi konfigurasi kebijakan yang salah.
Berikut adalah beberapa contoh Pengontrol Kebijakan GKE Enterprise yang menerapkan kebijakan keamanan:
- Mencegah Pod menjalankan container dengan hak istimewa.
- Hanya izinkan penggunaan image dari repositori tertentu untuk mencegah pengoperasian image container yang tidak sah.
- Melarang penonaktifan TLS untuk semua host dan subset host di Istio DestinationRules.
- Melarang akun utama dan namespace dalam aturan Istio AuthorizationPolicy memiliki awalan dari daftar yang ditentukan.
- Melarang pembuatan resource yang diketahui yang mengekspos beban kerja ke IP eksternal.
- Mewajibkan resource Ingress untuk menggunakan HTTPS saja.
- Memerlukan sistem file root hanya baca di penampung.
Library template batasan yang disediakan dengan Pengontrol Kebijakan berisi kumpulan template batasan yang dapat digunakan dengan paket batasan keamanan Cloud Service Mesh siap pakai untuk menerapkan praktik terbaik keamanan Cloud Service Mesh tertentu, misalnya, autentikasi, otorisasi, dan kebijakan traffic. Berikut adalah beberapa contoh batasan yang disertakan dalam paket:
- Terapkan mTLS ketat PeerAuthentication level mesh.
- Menerapkan semua PeerAuthentication tidak dapat menimpa mTLS yang ketat.
- Terapkan AuthorizationPolicy default deny level mesh.
- Terapkan pola aman AuthorizationPolicy.
- Memastikan sidecar Cloud Service Mesh selalu dimasukkan ke workload.
Untuk menangani pengecualian dan situasi darurat, administrator mesh dapat:
- Kecualikan namespace dari penerapan webhook penerimaan Pengontrol Kebijakan, tetapi pelanggaran apa pun masih dilaporkan dalam audit.
- Tetapkan Constraint spec.enforcementAction ke dryrun. Webhook izin tidak akan mencegah perubahan, tetapi pelanggaran apa pun masih dilaporkan dalam audit.
- Tambahkan logika pengecualian ke Template Batasan (contoh).
Menggunakan pendekatan GitOps dengan Config Sync untuk mencegah penyimpangan konfigurasi
Drift konfigurasi terjadi saat konfigurasi kebijakan dalam mesh menyimpang dari sumber tepercayanya. Sinkronisasi Konfigurasi dapat digunakan untuk mencegah penyimpangan konfigurasi.
Menerapkan pemantauan dan Logging Audit
Administrator mesh harus memantau hal berikut:
- Cloud Audit Logging
- Logging Audit Cloud Service Mesh
- Logging Audit batasan kebijakan
- Sinkronisasi Konfigurasi Anthos
- Log akses
- Metrik tingkat layanan
- Mengakses rekaman aktivitas
Resource visibilitas ini dapat digunakan untuk memverifikasi bahwa konfigurasi keamanan berfungsi seperti yang diharapkan dan memantau pengecualian apa pun terhadap penerapan kebijakan keamanan. Misalnya, akses yang tidak melalui sidecar, akses yang tidak memiliki kredensial yang valid, tetapi menjangkau layanan.
Meskipun software observabilitas open source (misalnya, Prometheus) dapat digunakan dengan Cloud Service Mesh, sebaiknya gunakan Google Cloud Operations Suite (sebelumnya bernama Stackdriver). Solusi observabilitas bawaan untuk Google Cloud menyediakan logging, pengumpulan metrik, pemantauan, dan pemberitahuan, yang dikelola sepenuhnya dan mudah digunakan.
Melindungi certificate authority untuk sertifikat dalam cluster
Secara default, Cloud Service Mesh menggunakan certificate authority (CA) terkelola Google yang disebut certificate authority Cloud Service Mesh.
Jika Anda menggunakan certificate authority (CA) Istio yang tidak dikelola, yang dihosting
sebagai bagian dari Istiod, kunci penandatanganan CA disimpan dalam secret Kubernetes dan
dapat diakses oleh operator yang memiliki akses ke resource secret di
namespace istio-system
. Hal ini merupakan risiko, karena operator mungkin dapat menggunakan
kunci CA secara independen dari CA Istiod dan berpotensi menandatangani sertifikat
beban kerja secara independen. Ada juga risiko bahwa kunci penandatanganan CA yang dikelola sendiri
dapat bocor secara tidak sengaja karena error operasional.
Untuk melindungi kunci penandatanganan CA, administrator mesh dapat mengupgrade mesh untuk menggunakan Mesh CA atau Certificate Authority Service (CA Service), yang diamankan dan dikelola oleh Google (seperti, rotasi kunci CA). Dibandingkan dengan CA Mesh, Layanan CA mendukung kunci penandatanganan per pelanggan yang didukung HSM melalui Cloud KMS yang didukung oleh Cloud HSM.
Keamanan beban kerja
Keamanan workload melindungi dari serangan yang membahayakan Pod workload, lalu menggunakan Pod yang disusupi untuk meluncurkan serangan terhadap cluster (misalnya, serangan botnet).
Membatasi hak istimewa Pod
Pod Kubernetes mungkin memiliki hak istimewa yang memengaruhi Pod lain di node atau cluster. Penting untuk menerapkan batasan keamanan pada Pod workload untuk mencegah Pod yang disusupi meluncurkan serangan terhadap cluster.
Untuk menerapkan prinsip hak istimewa terendah untuk workload di Pod:
- Layanan yang di-deploy dalam mesh harus berjalan dengan hak istimewa seminimal mungkin.
- Pod Kubernetes yang berjalan dalam mode dengan hak istimewa dapat memanipulasi stack jaringan dan kemampuan kernel lainnya di host. Pengontrol Kebijakan GKE Enterprise dapat digunakan untuk mencegah Pod menjalankan container dengan hak istimewa.
- Cloud Service Mesh dapat dikonfigurasi untuk menggunakan penampung init guna mengonfigurasi pengalihan traffic iptables ke sidecar. Hal ini mengharuskan pengguna yang melakukan deployment workload memiliki hak istimewa untuk men-deploy penampung dengan kemampuan NET_ADMIN dan NET_RAW. Untuk menghindari risiko menjalankan penampung dengan hak istimewa yang ditingkatkan, administrator mesh dapat mengaktifkan plugin CNI Istio untuk mengonfigurasi pengalihan traffic ke sidecar.
Image container yang aman
Penyerang dapat meluncurkan serangan dengan mengeksploitasi image container yang rentan. Administrator harus menerapkan Otorisasi Biner untuk memverifikasi integritas image container dan memastikan hanya image container tepercaya yang di-deploy di mesh.
Memitigasi kerentanan mesh
- Container Analysis. Container Analysis dapat memindai dan menampilkan kerentanan pada workload GKE.
- Penanganan CVE (Common Vulnerabilities and Exposures). Setelah kerentanan ditemukan dalam image container, administrator mesh harus memperbaiki kerentanan tersebut sesegera mungkin. Untuk Cloud Service Mesh terkelola dengan bidang data terkelola, Google akan otomatis menangani patch CVE yang memengaruhi image mesh.
Menggunakan Workload Identity Federation for GKE untuk mengakses layanan Google dengan aman
Workload Identity Federation for GKE adalah cara yang direkomendasikan agar beban kerja mesh dapat mengakses layanan Google dengan aman. Alternatif untuk menyimpan kunci akun layanan di secret Kubernetes dan menggunakan kunci akun layanan untuk mengakses layanan Google tidak seaman karena risiko kebocoran kredensial, eskalasi hak istimewa, pengungkapan informasi, dan non-penolakan.
Memantau status keamanan melalui dasbor keamanan dan telemetri
Mesh layanan mungkin memiliki pengecualian keamanan dan potensi celah. Sangat penting untuk menampilkan dan memantau status keamanan mesh, yang mencakup kebijakan keamanan yang diterapkan, pengecualian keamanan, dan potensi celah keamanan dalam mesh. Dasbor keamanan GKE Enterprise dan telemetri dapat digunakan untuk menampilkan dan memantau status keamanan mesh.
Telemetri memantau kondisi dan performa layanan dalam mesh, yang memungkinkan administrator mesh mengamati perilaku layanan (seperti SLO, traffic abnormal, pemadaman layanan, topologi).
Dasbor keamanan GKE Enterprise menganalisis dan memvisualisasikan kebijakan keamanan yang diterapkan ke workload di mesh layanan, termasuk kebijakan kontrol akses (Kebijakan Jaringan Kubernetes, kebijakan Otorisasi Biner, dan kebijakan kontrol akses layanan), dan kebijakan autentikasi (mTLS).
Keamanan untuk kredensial dan data pengguna yang sensitif
Data atau kredensial pengguna yang sensitif dapat rentan terhadap serangan yang berasal dari Pod atau operasi berbahaya jika disimpan di penyimpanan persisten cluster, seperti menggunakan secret Kubernetes atau langsung di Pod. Token juga rentan terhadap serangan jaringan jika ditransfer melalui jaringan untuk autentikasi ke layanan.
- Jika memungkinkan, simpan kredensial dan data pengguna sensitif di penyimpanan yang dilindungi, seperti Secret Manager dan Cloud KMS.
- Tetapkan namespace terpisah untuk Pod Kubernetes yang mengakses data sensitif dan tentukan kebijakan Kubernetes agar tidak dapat diakses dari namespace lain. Segmenkan peran yang digunakan untuk operasi dan tegakkan batas namespace.
- Terapkan pertukaran token untuk mencegah eksfiltrasi token dengan masa berlaku lama dan memiliki hak istimewa tinggi.
Langkah selanjutnya
- Tinjau praktik terbaik untuk menggunakan gateway keluar Cloud Service Mesh di cluster GKE
- Mengonfigurasi keamanan transpor
- Memperbarui kebijakan otorisasi