Di kluster ACK Pro atau , Anda dapat menggunakan kunci dari Alibaba Cloud Key Management Service (KMS) untuk mengenkripsi secrets Kubernetes. Topik ini menjelaskan cara menggunakan kunci yang dikelola KMS untuk mengenkripsi data secret Kubernetes saat disimpan di kluster ACK Pro.
Prasyarat
|
Item |
Deskripsi |
|
KMS key |
Anda telah membuat kunci KMS di Konsol Key Management Service, dan kunci tersebut berada di wilayah yang sama dengan kluster ACK Pro target. Kluster ACK Pro mendukung kunci default, kunci software, dan kunci hardware. Anda dapat memilih jenis kunci. Untuk informasi lebih lanjut tentang manajemen kunci dan operasi terkait, lihat Panduan cepat manajemen kunci. Untuk detail penagihan KMS, lihat penagihan. Penting
Setelah Anda mengaktifkan enkripsi saat disimpan, jangan gunakan konsol atau API KMS untuk menonaktifkan atau menghapus kunci yang digunakan untuk enkripsi dan dekripsi secret. Jika tidak, server API kluster akan menjadi tidak tersedia. Akibatnya, Anda tidak dapat mengambil objek seperti secrets dan ServiceAccounts, yang mengganggu aplikasi Anda. |
|
Aturan ACL jaringan kluster |
Saat enkripsi saat disimpan diaktifkan, plugin KMS pada lapisan kontrol harus mengakses API Alibaba Cloud KMS untuk mengenkripsi dan mendekripsi secrets. Untuk mengizinkan hal ini, Anda harus menambahkan aturan yang mengizinkan traffic ke blok CIDR |
|
Otorisasi |
Pastikan izin yang diperlukan telah diberikan sesuai dengan jenis akun Anda.
|
Cara kerja enkripsi secret
Di kluster Kubernetes, informasi sensitif untuk aplikasi—seperti kata sandi, sertifikat TLS, dan kredensial image Docker—biasanya disimpan dan dikelola menggunakan objek Secret. Kubernetes menyimpan semua data objek Secret di database etcd kluster. Untuk informasi lebih lanjut tentang Secret, lihat Secrets.
Di kluster ACK Pro atau , Anda dapat menggunakan kunci yang dibuat di KMS untuk mengenkripsi secrets Kubernetes. Proses enkripsi ini didasarkan pada mekanisme KMS Encryption Provider di Kubernetes, yang menggunakan enkripsi amplop untuk secara otomatis mengenkripsi dan mendekripsi secrets Kubernetes yang disimpan di etcd. Proses enkripsi dan dekripsi adalah sebagai berikut:
-
Saat Anda menyimpan Secret menggunakan API Kubernetes, server API mengenkripsi Secret tersebut dengan kunci enkripsi data yang dihasilkan secara acak. Kemudian, kunci enkripsi data tersebut dienkripsi dengan kunci KMS yang Anda tentukan. Secret yang telah dienkripsi dan kunci data yang telah dienkripsi disimpan di etcd.
-
Saat Anda mengambil Secret, sistem pertama-tama memanggil API KMS Decrypt untuk mendekripsi kunci data yang telah dienkripsi. Lalu, sistem menggunakan kunci teks biasa yang dihasilkan untuk mendekripsi data Secret dan mengembalikan Secret dalam bentuk teks biasa.
Untuk informasi lebih lanjut, lihat Mekanisme KMS Encryption Provider dan Gunakan kunci KMS untuk enkripsi amplop.
KMS v2
Mulai dari Kubernetes 1.31, kluster ACK Pro dan secara default menggunakan API KMS v2 komunitas untuk enkripsi saat disimpan. KMS v2 mendukung lebih banyak Secret dalam kluster dan memberikan kinerja enkripsi dan dekripsi yang lebih baik. Untuk informasi lebih lanjut tentang proses enkripsi dan dekripsi KMS v2, lihat KMS v2.
Untuk meningkatkan kluster Anda dari API KMS v1 ke API KMS v2, lihat Bagaimana cara meningkatkan ke KMS v2 untuk enkripsi secret saat disimpan?
Komunitas Kubernetes telah menghentikan dukungan API KMS v1 pada versi 1.27 dan menonaktifkannya secara default pada versi 1.29. Untuk kompatibilitas, kluster ACK Pro dan masih mengaktifkan API KMS v1 melalui fitur gate KMS v1.
Aktifkan enkripsi saat disimpan untuk kluster ACK Pro
Untuk kluster baru
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Di halaman Clusters, klik Create Kubernetes Cluster.
-
Di bagian bawah tab ACK Managed Cluster, perluas Advanced Options (Optional). Temukan Secret Encryption, pilih Select Key, lalu pilih ID kunci KMS dari daftar drop-down. Konfigurasikan parameter lain sesuai kebutuhan dan klik Create Kubernetes Cluster.
Untuk informasi lebih lanjut tentang cara mengonfigurasi kluster ACK Pro, lihat Parameter untuk membuat kluster ACK managed.
Masuk ke Konsol ActionTrail dan klik Cluster Events Query di panel navigasi sisi kiri. Jika Anda menemukan log event enkripsi dan dekripsi yang menggunakan peran sistem AliyunCSManagedSecurityRole di halaman Cluster Events Query, berarti enkripsi Secret saat disimpan telah diaktifkan untuk kluster tersebut.
Jika Anda tidak lagi memerlukan fitur ini, buka halaman Clusters, klik nama kluster, lalu klik tab Cluster Information. Di halaman Basic Information, matikan sakelar Security and Auditing di bagian Secret Encryption.
Untuk kluster yang sudah ada
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Di halaman Clusters, klik nama kluster target. Di halaman detail kluster, klik tab Basic Information. Di bagian Security and Auditing, aktifkan sakelar Secret Encryption.
Pertama kali Anda mengaktifkan fitur ini, Anda akan diminta untuk memberikan izin. Klik Go to RAM console. Di halaman Cloud Resource Access Authorization untuk Resource Access Management (RAM), klik Confirm.
Catatan-
Untuk mengaktifkan enkripsi saat disimpan, pastikan Pengguna RAM atau Peran RAM yang sedang login memiliki izin administrator RBAC atau O&M pada kluster. Untuk informasi lebih lanjut, lihat Otorisasi resource di kluster menggunakan RBAC.
-
Untuk memberikan izin kepada peran AliyunCSManagedSecurityRole, pastikan Anda login dengan akun Alibaba Cloud atau Pengguna RAM/Peran RAM yang memiliki izin manajemen RAM.
-
-
Di kotak dialog Secret Encryption, pilih kunci KMS yang sudah ada dan klik OK.
Jika Anda belum memiliki kunci KMS, klik Create Key untuk membuka Konsol Key Management Service dan buat kunci. Untuk informasi lebih lanjut, lihat Buat kunci.
Saat status kluster berubah dari Updating menjadi Running, enkripsi Secret saat disimpan telah diaktifkan untuk kluster tersebut.
Jika Anda tidak lagi memerlukan fitur ini, Anda dapat mematikan sakelar Security and Auditing di bagian Secret Encryption.
Rotasi kunci otomatis
Anda dapat menggunakan fitur rotasi kunci otomatis KMS untuk mengenkripsi secrets saat disimpan. Saat kunci diputar secara otomatis, secrets yang sudah ada tetap dienkripsi dengan versi kunci sebelumnya. Secrets baru dienkripsi dengan versi kunci baru. Untuk informasi lebih lanjut tentang rotasi kunci otomatis, lihat Rotasi kunci.
Untuk memastikan secrets yang sudah ada juga dienkripsi dengan versi kunci baru, jalankan perintah berikut untuk mengenkripsi ulang semua secrets yang ada setelah kunci diputar secara otomatis.
kubectl get secrets --all-namespaces -o json | kubectl annotate --overwrite -f - encryption-key-rotation-time="$(date -u +'%Y-%m-%dT%H:%M:%S%z')"
FAQ
Tingkatkan ke KMS v2
Untuk menggunakan KMS v2 guna mengenkripsi secrets saat disimpan, pastikan kluster ACK Pro atau Anda berada pada versi 1.31 atau lebih baru.
-
Jika enkripsi saat disimpan belum diaktifkan untuk kluster Anda, aktifkan dengan mengikuti petunjuk di Aktifkan enkripsi saat disimpan untuk kluster ACK Pro. Setelah diaktifkan, kluster secara otomatis menggunakan API KMS v2 untuk mengenkripsi dan mendekripsi secrets.
-
Jika enkripsi saat disimpan sudah diaktifkan untuk kluster Anda, Anda dapat beralih ke metode enkripsi KMS v2 selama jam sepi dengan salah satu metode berikut:
-
Metode 1: Jalankan perintah
kubectl get secrets --all-namespaces -o json | kubectl replace -f -. Perintah ini mengenkripsi ulang semua secrets yang ada menggunakan API KMS v2. -
Metode 2: Masuk ke Konsol Container Service for Kubernetes (ACK). Di tab Cluster Information pada halaman Basic Information, temukan dan matikan Secret Encryption. Hal ini akan memicu proses pengenkripsian ulang untuk semua secrets di kluster. Setelah beberapa saat, aktifkan kembali fitur tersebut dengan mengikuti petunjuk di Aktifkan enkripsi saat disimpan untuk kluster ACK Pro. Setelah fitur diaktifkan kembali, semua secrets di kluster akan dienkripsi saat disimpan menggunakan API KMS v2.
-
Apakah secrets yang diambil melalui kubectl dienkripsi?
Tidak. Enkripsi saat disimpan mengenkripsi data secret mentah di etcd, yang kemudian disimpan sebagai ciphertext. Namun, saat Anda menggunakan Secret API melalui server API, Anda menerima data secret dalam bentuk teks biasa.
Cara mencegah Pengguna RAM atau Peran RAM mengaktifkan atau menonaktifkan enkripsi Secret saat disimpan di kluster ACK Pro yang sudah ada
Anda dapat menyambungkan kebijakan izin RAM yang secara eksplisit menolak aksi cs:UpdateKMSEncryption ke Pengguna RAM atau Peran RAM tersebut. Hal ini mencegah Pengguna RAM atau Peran RAM tersebut mengaktifkan atau menonaktifkan enkripsi saat disimpan untuk kluster ACK Pro atau yang sudah ada. Untuk informasi lebih lanjut, lihat Gunakan RAM untuk memberikan izin untuk kluster dan sumber daya cloud.
{
"Action": [
"cs:UpdateKMSEncryption"
],
"Effect": "Deny",
"Resource": [
"*"
]
}