Dokumen ini menunjukkan cara mengenkripsi data yang disimpan di bidang kontrol Google Kubernetes Engine (GKE) menggunakan kunci yang Anda kelola di Cloud Key Management Service (Cloud KMS). Anda seharusnya sudah memahami konsep seperti etcd, arsitektur cluster GKE, dan Cloud KMS.
Halaman ini menjelaskan satu bagian dari serangkaian fitur bidang kontrol opsional di GKE yang memungkinkan Anda melakukan tugas seperti memverifikasi postur keamanan bidang kontrol atau mengonfigurasi enkripsi dan penandatanganan kredensial di bidang kontrol menggunakan kunci yang Anda kelola. Untuk mengetahui detailnya, lihat Tentang otoritas bidang kontrol GKE.
Secara default, Google Cloud menerapkan berbagai langkah keamanan ke bidang kontrol terkelola. Halaman ini menjelaskan opsional kemampuan yang memberi Anda lebih banyak visibilitas atau kontrol atas bidang kontrol GKE.
Tentang enkripsi etcd dan boot disk bidang kontrol
Secara default, GKE mengenkripsi boot disk node bidang kontrol, disk yang menyimpan data di etcd, dan Google Cloud cadangan operasional internal etcd menggunakan kunci enkripsi yang Google Cloud dikelola. Untuk mengetahui detail tentang enkripsi default ini, lihat Enkripsi dalam penyimpanan default. Anda dapat secara opsional menggunakan kunci enkripsi Anda sendiri yang Anda kelola menggunakan Cloud KMS untuk mengenkripsi resource ini. Untuk mempelajari lebih lanjut, lihat Enkripsi etcd dan boot disk bidang kontrol.
Anda membuat kunci di Cloud KMS yang digunakan GKE untuk mengenkripsi resource bidang kontrol. Pertimbangkan hal berikut saat Anda membuat resource ini:
- Anda dapat menggunakan satu key ring untuk semua kunci dalam cluster, terlepas dari tujuan setiap kunci. Jika Anda memiliki key ring yang sudah ada dan digunakan untuk tujuan lain, seperti menyiapkan certificate authority Anda sendiri, Anda dapat menggunakan key ring tersebut untuk panduan ini.
- Sebaiknya buat kunci di lokasikunci Google Cloud yang sama dengan cluster Anda untuk mendapatkan latensi yang lebih baik.
- Untuk sebagian besar kasus penggunaan, Anda dapat menggunakan tingkat perlindungan kunci Cloud KMS software. Anda juga dapat menggunakan kunci hardware dengan Cloud HSM.
- Anda harus menentukan flag
--purposedengan nilaiencryptionkarena kunci ini digunakan untuk enkripsi simetris. - Anda tidak boleh mengubah durasi default untuk penghancuran kunci.
Penggunaan dengan fitur otoritas bidang kontrol GKE lainnya
Otoritas bidang kontrol GKE menyediakan fitur berikut yang terkait dengan kunci yang dikelola sendiri yang harus Anda aktifkan secara bersamaan saat membuat cluster:
- Mengenkripsi komponen bidang kontrol (dokumen ini)
- Menjalankan kunci dan certificate authority (CA) Anda sendiri
Anda hanya dapat mengaktifkan fitur ini saat membuat cluster GKE baru. Anda tidak dapat mengupdate cluster yang ada untuk menggunakan fitur ini. Untuk menggunakan kedua fitur ini di cluster yang sama, lakukan semua prosedur konfigurasi kunci dan CA di kedua panduan, lalu jalankan perintah pembuatan cluster yang mengaktifkan kedua kumpulan fitur seperti yang dijelaskan di bagian Membuat cluster.
Sebelum memulai
Sebelum memulai, pastikan Anda telah melakukan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah
gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung perintah yang dijalankan dalam dokumen ini.
- Pastikan project kunci Anda memiliki key ring Cloud KMS untuk cluster Anda. Anda dapat menggunakan key ring yang sudah ada di lokasi cluster Anda. Untuk membuat key ring baru, lihat Membuat key ring.
Aktifkan Cloud Key Management Service API.
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan izin
serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Admin Service Usage (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.
Mengidentifikasi project
Sebaiknya gunakan project Google Cloud terpisah sebagai berikut:
- Project kunci: berisi semua kunci.
- Project cluster: berisi cluster GKE Anda.
Anda dapat menggunakan project yang sama untuk kunci dan cluster GKE Anda, tetapi sebaiknya gunakan project terpisah agar tim yang mengelola kunci dan operasi kriptografi Anda terpisah dari tim yang mengelola cluster Anda.
Peran dan izin yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk menjalankan kunci enkripsi Anda sendiri, minta administrator untuk memberi Anda peran IAM berikut:
-
Membuat kunci Cloud KMS:
Cloud KMS Admin (
roles/cloudkms.admin) di project kunci Anda -
Membuat cluster GKE:
Kubernetes Engine Cluster Admin (
roles/container.clusterAdmin) di project cluster Anda
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Persyaratan
Enkripsi disk bidang kontrol dengan kunci Anda sendiri memiliki persyaratan berikut:
- Cluster Anda harus menjalankan GKE versi 1.31.1-gke.1846000 atau yang lebih baru.
Anda harus membuat cluster di salah satu region berikut:
asia-east1asia-northeast1asia-southeast1europe-west1europe-west4us-central1us-central2us-east1us-east4us-east5us-south1us-west1us-west3us-west4
Batasan
- Anda hanya dapat mengonfigurasi kunci enkripsi etcd dan boot disk selama pembuatan cluster.
Untuk cluster mode Standard regional dan untuk cluster Autopilot, region tempat Anda membuat cluster harus memiliki kapasitas untuk Mode rahasia untuk Hyperdisk Balanced di setidaknya tiga zona di region tersebut.
Untuk cluster mode Standard zona, zona cluster harus memiliki kapasitas Hyperdisk Balanced. Untuk mendapatkan bantuan terkait kapasitas, hubungi Cloud Customer Care.
GKE hanya mendukung kunci dari Cloud KMS. Anda tidak dapat menggunakan penyedia KMS Kubernetes lain atau penyedia enkripsi lainnya.
Kunci Cloud External Key Manager (Cloud EKM) tidak didukung.
Anda tidak dapat mengakses atau berinteraksi dengan Google Cloud internal cadangan operasional etcd, yang hanya untuk pemulihan dari bencana.
Keyring multi-region tidak didukung. Anda harus menggunakan key ring regional.
Membuat kunci
Di bagian ini, Anda akan membuat kunci enkripsi untuk disk etcd dan boot disk di bidang kontrol Anda dan kunci enkripsi terpisah untuk Google Cloud cadangan operasional internal etcd. Anda dapat menggunakan satu key ring untuk menyimpan semua kunci ini dan kunci lainnya untuk cluster.
Buat kunci enkripsi untuk disk etcd dan boot disk bidang kontrol Anda:
gcloud kms keys create KCP_DISK_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --purpose="encryption" \ --protection-level=PROTECTION_LEVEL \ --project=KEY_PROJECT_IDGanti kode berikut:
KCP_DISK_KEY_NAME: nama untuk kunci enkripsi untuk disk etcd dan boot disk bidang kontrol Anda.KEYRING_NAME: nama key ring untuk menyimpan kunci enkripsi Anda untuk cluster.LOCATION: Google Cloud lokasifor the key ring. Lokasi ini harus sama dengan lokasi cluster Anda. Untuk mengetahui daftar region, filter "Region" di tabel lokasi Cloud KMS.PROTECTION_LEVEL: tingkat perlindungan untuk kunci, sepertisoftwareatauhsm.KEY_PROJECT_ID: project ID project kunci Anda.
Buat kunci enkripsi cadangan internal etcd:
gcloud kms keys create ETCD_BACKUP_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --purpose="encryption" \ --protection-level=PROTECTION_LEVEL \ --project=KEY_PROJECT_IDGanti
ETCD_BACKUP_KEY_NAMEdengan nama untuk kunci enkripsi cadangan internal etcd.
Memberikan peran IAM ke agen layanan GKE
Di bagian ini, Anda akan memberikan peran IAM pada kunci yang Anda buat ke agen layanan GKE di project cluster. Agen layanan GKE memerlukan peran ini untuk menggunakan kunci ini guna mengenkripsi resource bidang kontrol yang sesuai.
Temukan nomor project cluster Anda:
gcloud projects describe CLUSTER_PROJECT_ID \ --format='value(projectNumber)'Ganti
CLUSTER_PROJECT_IDdengan project ID project cluster GKE Anda.Outputnya mirip dengan hal berikut ini:
1234567890Berikan peran Cloud KMS CryptoKey Encrypter/Decrypter (
roles/cloudkms.cryptoKeyEncrypterDecrypter) pada kunci enkripsi untuk disk etcd dan boot disk ke agen layanan GKE di project cluster:gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \ --location=LOCATION \ --keyring=KEYRING_NAME \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project=KEY_PROJECT_IDGanti kode berikut:
KCP_DISK_KEY_NAME: nama kunci enkripsi disk.LOCATION: Google Cloud lokasi kunci.KEYRING_NAME: nama key ring yang berisi kunci enkripsi.CLUSTER_PROJECT_NUMBER: nomor project numerik dari project cluster, yang Anda temukan di langkah sebelumnya.KEY_PROJECT_ID: project ID project kunci Anda.
Berikan peran Cloud KMS CryptoKey Encrypter/Decrypter Via Delegation (
roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation) pada kunci enkripsi untuk disk etcd dan boot disk ke agen layanan GKE di project cluster:gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \ --location=LOCATION \ --keyring=KEYRING_NAME \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation \ --project=KEY_PROJECT_IDBerikan peran Pengguna Kunci Cloud KMS pada kunci enkripsi untuk disk etcd dan boot disk ke agen layanan GKE di project cluster untuk rotasi kunci:
gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \ --location=LOCATION \ --keyring=KEYRING_NAME \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/container.cloudKmsKeyUser \ --project=KEY_PROJECT_IDBerikan peran Cloud KMS CryptoKey Encrypter (
roles/cloudkms.cryptoKeyEncrypter) pada kunci enkripsi cadangan internal etcd ke agen layanan GKE di project cluster:gcloud kms keys add-iam-policy-binding ETCD_BACKUP_KEY_NAME \ --location=LOCATION \ --keyring=KEYRING_NAME \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/cloudkms.cryptoKeyEncrypter \ --project=KEY_PROJECT_IDGanti
ETCD_BACKUP_KEY_NAMEdengan nama kunci enkripsi cadangan operasional etcd.Memberikan peran
roles/cloudkms.cryptoKeyEncrypterakan mencegah GKE melakukan pemulihan database atas nama Anda dan meningkatkan waktu pemulihan fungsi secara signifikan saat terjadi masalah database. Untuk mengizinkan GKE melakukan pemulihan untuk Anda, berikan peranroles/cloudkms.cryptoKeyEncrypterDecryptersebagai gantinya.
Menggunakan kunci enkripsi di cluster
Bagian ini menunjukkan cara mengidentifikasi jalur ke kunci enkripsi Anda.
Identifikasi jalur ke kunci enkripsi disk Anda:
gcloud kms keys describe KCP_DISK_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --project=KEY_PROJECT_ID \ --format="value(name)"Ganti kode berikut:
KCP_DISK_KEY_NAME: nama kunci enkripsi untuk disk etcd dan boot disk bidang kontrol.KEYRING_NAME: nama key ring yang berisi kunci.LOCATION: lokasi Google Cloud kunci.KEY_PROJECT_ID: project ID project kunci Anda.
Outputnya mirip dengan hal berikut ini:
projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/disk-encryption-keyIdentifikasi jalur ke kunci enkripsi cadangan internal etcd Anda:
gcloud kms keys describe ETCD_BACKUP_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --project=KEY_PROJECT_ID \ --format="value(name)"Ganti
ETCD_BACKUP_KEY_NAMEdengan nama kunci enkripsi cadangan operasional etcd.Outputnya mirip dengan hal berikut ini:
projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/etcd-backup-encryption-key
Membuat cluster
Di bagian ini, Anda akan membuat cluster dengan opsi berbeda yang ditentukan bergantung pada fitur otoritas bidang kontrol GKE yang ingin Anda konfigurasi. Anda hanya dapat mengonfigurasi fitur ini di cluster selama pembuatan cluster. Perintah berikut membuat cluster mode Standard. Untuk
membuat cluster mode Autopilot sebagai gantinya, gunakan flag yang sama dengan
gcloud container clusters create-auto perintah.
Untuk membuat cluster yang mengonfigurasi enkripsi disk dan menjalankan kunci penandatanganan akun layanan dan CA Anda sendiri, lakukan hal berikut:
- Lakukan semua langkah konfigurasi kunci dan CA di Menjalankan kunci dan certificate authority Anda sendiri.
- Temukan jalur ke setiap kunci akun layanan dan CA menggunakan petunjuk di Menyiapkan CA dan kunci di cluster baru.
Buat cluster:
gcloud container clusters create CLUSTER_NAME \ --location=LOCATION \ --project=CLUSTER_PROJECT_ID \ --control-plane-disk-encryption-key=PATH_TO_DISK_KEY \ --gkeops-etcd-backup-encryption-key=PATH_TO_ETCD_BACKUP_KEY \ --service-account-signing-keys=PATH_TO_SIGNING_KEY_VERSION \ --service-account-verification-keys=PATH_TO_VERIFICATION_KEY_VERSION \ --cluster-ca=PATH_TO_CLUSTER_CA \ --etcd-peer-ca=PATH_TO_ETCD_PEER_CA \ --etcd-api-ca=PATH_TO_ETCD_API_CA \ --aggregation-ca=PATH_TO_AGGREGATION_CAGanti kode berikut:
CLUSTER_NAME: nama cluster baru Anda.LOCATION: lokasi cluster baru Anda.CLUSTER_PROJECT_ID: project ID project cluster Anda.PATH_TO_DISK_KEY: jalur ke kunci enkripsi disk Anda dari langkah-langkah sebelumnya dalam dokumen ini.PATH_TO_ETCD_BACKUP_KEY: jalur ke kunci enkripsi cadangan internal etcd Anda dari langkah-langkah sebelumnya dalam dokumen ini.PATH_TO_SIGNING_KEY_VERSION: jalur ke versi kunci penandatanganan ServiceAccount Kubernetes di Cloud KMS.PATH_TO_VERIFICATION_KEY_VERSION: jalur ke versi kunci verifikasi ServiceAccount Kubernetes di Cloud KMS.PATH_TO_CLUSTER_CA: jalur ke kumpulan CA cluster.PATH_TO_ETCD_PEER_CA: jalur ke kumpulan CA peer etcd.PATH_TO_ETCD_API_CA: jalur ke kumpulan CA API etcd.PATH_TO_AGGREGATION_CA: jalur ke kumpulan CA agregasi.
Untuk membuat cluster yang hanya mengonfigurasi enkripsi disk menggunakan kunci yang Anda buat dalam panduan ini, jalankan perintah berikut:
gcloud container clusters create CLUSTER_NAME \ --location=LOCATION \ --project=CLUSTER_PROJECT_ID \ --control-plane-disk-encryption-key=PATH_TO_DISK_KEY \ --gkeops-etcd-backup-encryption-key=PATH_TO_ETCD_BACKUP_KEYGanti kode berikut:
CLUSTER_NAME: nama cluster baru Anda.LOCATION: lokasi cluster baru Anda.CLUSTER_PROJECT_ID: project ID project cluster Anda.PATH_TO_DISK_KEY: jalur ke kunci enkripsi disk Anda dari langkah-langkah sebelumnya.PATH_TO_ETCD_BACKUP_KEY: jalur ke kunci enkripsi cadangan internal etcd Anda dari langkah-langkah sebelumnya.
Anda juga dapat menentukan semua flag ini saat membuat cluster mode Standard baru.
Memverifikasi status kunci enkripsi
Bagian ini menunjukkan cara memverifikasi kunci enkripsi yang digunakan selama pembuatan cluster. Anda dapat melakukan verifikasi ini menggunakan Cloud Logging atau menggunakan Google Cloud CLI.
Menggunakan Logging untuk memverifikasi kunci
Untuk memverifikasi kunci menggunakan Logging, lakukan hal berikut:
Di Google Cloud konsol, buka halaman Logs Explorer:
Dapatkan log pembuatan cluster dengan menentukan kueri berikut:
resource.type="gke_cluster" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.location="CLUSTER_LOCATION" protoPayload.serviceName="container.googleapis.com" protoPayload.methodName=~"google.container.v(1|1alpha1|1beta1).ClusterManager.CreateCluster" protoPayload.request.cluster.userManagedKeysConfig:*Klik Run query.
Dalam output, pastikan parameter pembuatan cluster menyertakan jalur kunci yang sesuai dengan kunci yang Anda siapkan di Cloud KMS, seperti dalam contoh berikut:
# lines omitted for clarity
userManagedKeysConfig: {
controlPlaneDiskEncryptionKey: "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KCP_DISK_KEY_NAME"
gkeopsEtcdBackupEncryptionKey: "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/ETCD_BACKUP_KEY_NAME"
}
Menggunakan gcloud CLI untuk memverifikasi kunci
Untuk menggunakan gcloud CLI guna memverifikasi kunci enkripsi, lakukan hal berikut:
Untuk kunci enkripsi disk, jalankan perintah berikut:
gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --format="value(userManagedKeysConfig.controlPlaneDiskEncryptionKey)"Untuk kunci enkripsi cadangan internal etcd, jalankan perintah berikut:
gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --format="value(userManagedKeysConfig.gkeopsEtcdBackupEncryptionKey)"
Merotasi kunci enkripsi disk bidang kontrol dan etcd
Kunci enkripsi yang Anda buat tidak akan habis masa berlakunya. Untuk meningkatkan postur keamanan Anda, rotasi kunci ini secara rutin dan enkripsi ulang resource Anda dengan versi kunci baru. Untuk mengetahui informasi selengkapnya, lihat Merotasi kunci enkripsi boot disk bidang kontrol dan etcd.
Langkah berikutnya
- Pelajari hal lain yang dapat Anda lihat di bidang kontrol
- Menjalankan kunci dan certificate authority Anda sendiri di GKE
- Memverifikasi integritas VM bidang kontrol