Merge pull request #50144 from za/ID-translate-concepts-security-hardening-guide
[id] Initial commit on translate hardening-guide to IDpull/50159/head
commit
0c57356961
|
@ -0,0 +1,142 @@
|
||||||
|
---
|
||||||
|
title: Panduan Pengamanan - Mekanisme Autentikasi
|
||||||
|
description: >
|
||||||
|
Informasi tentang opsi otentikasi di Kubernetes dan *securit properties*-nya.
|
||||||
|
content_type: concept
|
||||||
|
weight: 90
|
||||||
|
---
|
||||||
|
|
||||||
|
<!-- overview -->
|
||||||
|
|
||||||
|
Memilih mekanisme otentikasi yang tepat adalah aspek penting dalam mengamankan kluster Anda.
|
||||||
|
Kubernetes menyediakan beberapa mekanisme bawaan, masing-masing dengan kelebihan dan kekurangannya
|
||||||
|
yang harus dipertimbangkan dengan hati-hati saat memilih mekanisme otentikasi terbaik untuk kluster Anda.
|
||||||
|
|
||||||
|
Secara umum, disarankan untuk mengaktifkan sesedikit mungkin mekanisme otentikasi untuk menyederhanakan
|
||||||
|
manajemen pengguna dan mencegah kasus di mana pengguna tetap memiliki akses ke kluster yang tidak lagi diperlukan.
|
||||||
|
|
||||||
|
Penting untuk dicatat bahwa Kubernetes tidak memiliki basis data pengguna bawaan di dalam kluster.
|
||||||
|
Sebaliknya, Kubernetes mengambil informasi pengguna dari sistem otentikasi yang dikonfigurasi dan menggunakan
|
||||||
|
informasi tersebut untuk membuat keputusan otorisasi. Oleh karena itu, untuk mengaudit akses pengguna, Anda perlu
|
||||||
|
meninjau kredensial dari setiap sumber otentikasi yang dikonfigurasi.
|
||||||
|
|
||||||
|
Untuk kluster produksi dengan banyak pengguna yang mengakses API Kubernetes secara langsung, disarankan untuk
|
||||||
|
menggunakan sumber autentikasi eksternal seperti OIDC. Mekanisme autentikasi internal, seperti sertifikat klien
|
||||||
|
dan token akun layanan yang dijelaskan di bawah ini, tidak cocok untuk kasus penggunaan ini.
|
||||||
|
|
||||||
|
<!-- body -->
|
||||||
|
|
||||||
|
## Autentikasi sertifikat klien X.509 {#x509-client-certificate-authentication}
|
||||||
|
|
||||||
|
Kubernetes memanfaatkan [sertifikat klien X.509](/docs/reference/access-authn-authz/authentication/#x509-client-certificates)
|
||||||
|
untuk komponen sistem, seperti saat kubelet mengautentikasi ke API Server. Meskipun mekanisme ini juga dapat digunakan
|
||||||
|
untuk autentikasi pengguna, mekanisme ini mungkin tidak cocok untuk penggunaan produksi karena beberapa batasan:
|
||||||
|
|
||||||
|
- Sertifikat klien tidak dapat dicabut secara individual. Setelah disusupi, sertifikat dapat digunakan oleh penyerang
|
||||||
|
hingga kedaluwarsa. Untuk mengurangi risiko ini, disarankan untuk mengonfigurasi masa berlaku yang pendek untuk
|
||||||
|
kredensial autentikasi pengguna yang dibuat menggunakan sertifikat klien.
|
||||||
|
- Jika sertifikat perlu dibatalkan, otoritas sertifikat harus diubah kuncinya, yang dapat memperkenalkan risiko
|
||||||
|
ketersediaan ke kluster.
|
||||||
|
- Tidak ada catatan permanen tentang sertifikat klien yang dibuat di kluster. Oleh karena itu, semua sertifikat yang
|
||||||
|
diterbitkan harus dicatat jika Anda perlu melacaknya.
|
||||||
|
- Kunci privat yang digunakan untuk autentikasi sertifikat klien tidak dapat dilindungi dengan kata sandi. Siapa pun
|
||||||
|
yang dapat membaca file yang berisi kunci tersebut akan dapat menggunakannya.
|
||||||
|
- Menggunakan autentikasi sertifikat klien memerlukan koneksi langsung dari klien ke API server tanpa titik
|
||||||
|
terminasi TLS yang mengintervensi, yang dapat mempersulit arsitektur jaringan.
|
||||||
|
- Data grup tertanam dalam nilai `O` dari sertifikat klien, yang berarti keanggotaan grup pengguna tidak dapat diubah
|
||||||
|
selama masa berlaku sertifikat.
|
||||||
|
|
||||||
|
## File token statis {#static-token-file}
|
||||||
|
|
||||||
|
Meskipun Kubernetes memungkinkan Anda memuat kredensial dari
|
||||||
|
[berkas token statis](/docs/reference/access-authn-authz/authentication/#static-token-file) yang terletak
|
||||||
|
di disk node control plane, pendekatan ini tidak disarankan untuk server produksi karena beberapa alasan:
|
||||||
|
|
||||||
|
- Kredensial disimpan dalam teks biasa di disk node control plane, yang dapat menjadi risiko keamanan.
|
||||||
|
- Mengubah kredensial apa pun memerlukan restart proses API server agar berlaku, yang dapat memengaruhi ketersediaan.
|
||||||
|
- Tidak ada mekanisme yang tersedia untuk memungkinkan pengguna memutar kredensial mereka. Untuk memutar kredensial,
|
||||||
|
administrator kluster harus memodifikasi token di disk dan mendistribusikannya ke pengguna.
|
||||||
|
- Tidak ada mekanisme penguncian yang tersedia untuk mencegah serangan brute-force.
|
||||||
|
|
||||||
|
## Token bootstrap {#bootstrap-tokens}
|
||||||
|
|
||||||
|
[Token bootstrap](/docs/reference/access-authn-authz/bootstrap-tokens/) digunakan untuk menghubungkan
|
||||||
|
node ke kluster dan tidak disarankan untuk autentikasi pengguna karena beberapa alasan:
|
||||||
|
|
||||||
|
- Mereka memiliki keanggotaan grup yang dikodekan keras yang tidak cocok untuk penggunaan umum, sehingga tidak cocok
|
||||||
|
untuk tujuan autentikasi.
|
||||||
|
- Pembuatan token bootstrap secara manual dapat menghasilkan token yang lemah yang dapat ditebak oleh penyerang,
|
||||||
|
yang dapat menjadi risiko keamanan.
|
||||||
|
- Tidak ada mekanisme penguncian yang tersedia untuk mencegah serangan brute-force, sehingga memudahkan penyerang
|
||||||
|
untuk menebak atau memecahkan token.
|
||||||
|
|
||||||
|
## Token rahasia ServiceAccount {#serviceaccount-secret-tokens}
|
||||||
|
|
||||||
|
[Rahasia akun layanan](/docs/reference/access-authn-authz/service-accounts-admin/#manual-secret-management-for-serviceaccounts)
|
||||||
|
tersedia sebagai opsi untuk memungkinkan beban kerja yang berjalan di kluster mengautentikasi ke API server.
|
||||||
|
Di Kubernetes < 1.23, ini adalah opsi default, namun, mereka sedang digantikan dengan token API TokenRequest.
|
||||||
|
Meskipun rahasia ini dapat digunakan untuk autentikasi pengguna, mereka umumnya tidak cocok karena beberapa alasan:
|
||||||
|
|
||||||
|
- Mereka tidak dapat diatur dengan masa berlaku dan akan tetap berlaku hingga akun layanan terkait dihapus.
|
||||||
|
- Token autentikasi terlihat oleh pengguna kluster mana pun yang dapat membaca rahasia di namespace tempat mereka
|
||||||
|
didefinisikan.
|
||||||
|
- Akun layanan tidak dapat ditambahkan ke grup arbitrer, yang mempersulit manajemen RBAC di mana mereka digunakan.
|
||||||
|
|
||||||
|
## Token API TokenRequest {#tokenrequest-api-tokens}
|
||||||
|
|
||||||
|
API TokenRequest adalah alat yang berguna untuk menghasilkan kredensial jangka pendek untuk autentikasi layanan
|
||||||
|
ke API server atau sistem pihak ketiga. Namun, ini umumnya tidak disarankan untuk autentikasi pengguna karena tidak
|
||||||
|
ada metode pencabutan yang tersedia, dan mendistribusikan kredensial ke pengguna dengan cara yang aman dapat menjadi
|
||||||
|
tantangan.
|
||||||
|
|
||||||
|
Saat menggunakan token TokenRequest untuk autentikasi layanan, disarankan untuk menerapkan masa berlaku yang pendek
|
||||||
|
untuk mengurangi dampak token yang disusupi.
|
||||||
|
|
||||||
|
## Autentikasi token OpenID Connect {#openid-connect-token-authentication}
|
||||||
|
|
||||||
|
Kubernetes mendukung integrasi layanan autentikasi eksternal dengan API Kubernetes menggunakan
|
||||||
|
[OpenID Connect (OIDC)](/docs/reference/access-authn-authz/authentication/#openid-connect-tokens).
|
||||||
|
Ada berbagai macam perangkat lunak yang dapat digunakan untuk mengintegrasikan Kubernetes dengan penyedia identitas.
|
||||||
|
Namun, saat menggunakan autentikasi OIDC di Kubernetes, penting untuk mempertimbangkan langkah-langkah penguatan berikut:
|
||||||
|
|
||||||
|
- Perangkat lunak yang diinstal di kluster untuk mendukung autentikasi OIDC harus diisolasi dari beban kerja umum
|
||||||
|
karena akan berjalan dengan hak istimewa tinggi.
|
||||||
|
- Beberapa layanan Kubernetes yang dikelola memiliki batasan pada penyedia OIDC yang dapat digunakan.
|
||||||
|
- Seperti halnya token TokenRequest, token OIDC harus memiliki masa berlaku yang pendek untuk mengurangi dampak
|
||||||
|
token yang disusupi.
|
||||||
|
|
||||||
|
## Autentikasi token Webhook {#webhook-token-authentication}
|
||||||
|
|
||||||
|
[Autentikasi token Webhook](/docs/reference/access-authn-authz/authentication/#webhook-token-authentication)
|
||||||
|
adalah opsi lain untuk mengintegrasikan penyedia autentikasi eksternal ke Kubernetes. Mekanisme ini memungkinkan
|
||||||
|
layanan autentikasi, baik yang berjalan di dalam kluster atau di luar, untuk dihubungi untuk keputusan autentikasi
|
||||||
|
melalui webhook. Penting untuk dicatat bahwa kesesuaian mekanisme ini kemungkinan besar bergantung pada perangkat
|
||||||
|
lunak yang digunakan untuk layanan autentikasi, dan ada beberapa pertimbangan khusus Kubernetes yang harus diperhatikan.
|
||||||
|
|
||||||
|
Untuk mengonfigurasi autentikasi Webhook, akses ke sistem file server control plane diperlukan. Ini berarti bahwa
|
||||||
|
hal ini tidak akan memungkinkan dengan Kubernetes yang dikelola kecuali penyedia secara khusus membuatnya tersedia.
|
||||||
|
Selain itu, perangkat lunak apa pun yang diinstal di kluster untuk mendukung akses ini harus diisolasi dari beban
|
||||||
|
kerja umum, karena akan berjalan dengan hak istimewa tinggi.
|
||||||
|
|
||||||
|
## Proxy autentikasi {#authenticating-proxy}
|
||||||
|
|
||||||
|
Opsi lain untuk mengintegrasikan sistem autentikasi eksternal ke Kubernetes adalah dengan menggunakan
|
||||||
|
[proxy autentikasi](/docs/reference/access-authn-authz/authentication/#authenticating-proxy).
|
||||||
|
Dengan mekanisme ini, Kubernetes mengharapkan menerima permintaan dari proxy dengan nilai header tertentu yang
|
||||||
|
ditetapkan, menunjukkan nama pengguna dan keanggotaan grup untuk tujuan otorisasi. Penting untuk dicatat bahwa ada
|
||||||
|
pertimbangan khusus yang harus diperhatikan saat menggunakan mekanisme ini.
|
||||||
|
|
||||||
|
Pertama, TLS yang dikonfigurasi dengan aman harus digunakan antara proxy dan API server Kubernetes untuk mengurangi
|
||||||
|
risiko serangan penyadapan atau pengintaian lalu lintas. Ini memastikan bahwa komunikasi antara proxy dan API server
|
||||||
|
Kubernetes aman.
|
||||||
|
|
||||||
|
Kedua, penting untuk menyadari bahwa penyerang yang dapat memodifikasi header permintaan mungkin dapat memperoleh
|
||||||
|
akses tidak sah ke sumber daya Kubernetes. Oleh karena itu, penting untuk memastikan bahwa header diamankan dengan
|
||||||
|
baik dan tidak dapat dirusak.
|
||||||
|
|
||||||
|
## {{% heading "whatsnext" %}}
|
||||||
|
|
||||||
|
- [Autentikasi Pengguna](/docs/reference/access-authn-authz/authentication/)
|
||||||
|
- [Autentikasi dengan Token Bootstrap](/docs/reference/access-authn-authz/bootstrap-tokens/)
|
||||||
|
- [Autentikasi Kubelet](/docs/reference/access-authn-authz/kubelet-authn-authz/#kubelet-authentication)
|
||||||
|
- [Autentikasi dengan Token Akun Layanan](/docs/reference/access-authn-authz/service-accounts-admin/#bound-service-accounfor kens)
|
Loading…
Reference in New Issue