Anda.
Halaman ini menunjukkan cara mengenkripsi data yang disimpan di bidang kontrol Google Kubernetes Engine (GKE) Anda 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 salah 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, Trusted Cloud menerapkan berbagai langkah keamanan ke bidang kontrol terkelola. Halaman ini menjelaskan kemampuan opsional 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 cadangan operasional internal etcd Trusted Cloud by S3NS menggunakan kunci enkripsi yang dikelola Trusted CloudGoogle. 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 disk booting bidang kontrol.
Anda membuat kunci di Cloud KMS yang digunakan GKE untuk mengenkripsi resource bidang kontrol Anda. Pertimbangkan hal berikut saat Anda membuat resource ini:
- Anda dapat menggunakan satu ring kunci 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.
- Anda harus membuat kunci di Trusted Cloud lokasi yang sama dengan cluster untuk 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
--purpose
dengan nilaiencryption
karena 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 (halaman ini)
- Menjalankan certificate authority (CA) dan kunci 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 CA dan kunci di kedua panduan, lalu jalankan perintah pembuatan cluster yang mengaktifkan kedua set 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
gcloud components update
.
- Pastikan project kunci Anda memiliki key ring Cloud KMS untuk cluster Anda. Anda dapat menggunakan key ring yang ada di lokasi cluster Anda. Untuk membuat key ring baru, lihat Membuat key ring.
-
Enable the Cloud Key Management Service API.
Mengidentifikasi project
Sebaiknya gunakan project Trusted Cloud terpisah sebagai berikut:
- Project kunci: berisi semua kunci.
- Project cluster: berisi cluster GKE Anda.
Anda dapat secara opsional menggunakan project yang sama untuk kunci dan cluster GKE, tetapi sebaiknya Anda menggunakan 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 diperlukan untuk menjalankan kunci enkripsi Anda sendiri, minta administrator Anda untuk memberikan peran IAM berikut:
-
Buat kunci Cloud KMS:
Cloud KMS Admin (
roles/cloudkms.admin
) di project kunci Anda -
Buat cluster GKE:
Admin Cluster Kubernetes Engine (
roles/container.clusterAdmin
) di project cluster Anda
Untuk mengetahui informasi selengkapnya tentang cara memberikan 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
Cluster Anda harus menjalankan GKE versi 1.31.1-gke.1846000 atau yang lebih baru.
Batasan
- Anda hanya dapat mengonfigurasi kunci enkripsi boot disk dan etcd selama pembuatan cluster.
Untuk cluster mode Standard regional dan cluster Autopilot, region tempat Anda membuat cluster harus memiliki kapasitas untuk mode Rahasia untuk Hyperdisk Seimbang di minimal 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 lain.
Kunci Cloud External Key Manager (Cloud EKM) tidak didukung.
Anda tidak dapat mengakses atau berinteraksi dengan cadangan operasional internal etcd Trusted Cloud , yang hanya untuk pemulihan dari bencana.
Keyring multi-regional tidak didukung. Anda harus menggunakan key ring regional.
Region dan zona tempat Anda dapat menggunakan otoritas bidang kontrol GKE bergantung pada apakah Anda juga ingin menggunakan fitur tertentu, sebagai berikut:
- Untuk mengenkripsi boot disk bidang kontrol dengan kunci enkripsi yang dikelola pelanggan, cluster Anda
harus berada di salah satu region berikut:
asia-east1
asia-northeast1
asia-southeast1
europe-west1
europe-west4
us-central1
us-east1
us-east4
us-east5
us-south1
us-west1
us-west3
us-west4
- Untuk menggunakan Confidential GKE Node dengan otoritas bidang kontrol GKE, cluster Anda harus berada di region yang mendukung mode Confidential untuk Hyperdisk Balanced.
Jika Anda tidak menggunakan fitur ini, Anda dapat menggunakan otoritas bidang kontrol GKE di lokasi Trusted Cloud mana pun.
- Untuk mengenkripsi boot disk bidang kontrol dengan kunci enkripsi yang dikelola pelanggan, cluster Anda
harus berada di salah satu region berikut:
Membuat kunci
Di bagian ini, Anda akan membuat kunci enkripsi untuk disk booting dan disk etcd di bidang kontrol dan kunci enkripsi terpisah untuk Trusted Cloud pencadangan operasional internal etcd. Anda dapat menggunakan satu gantungan kunci untuk menyimpan semua kunci ini dan kunci lainnya untuk cluster.
Buat kunci enkripsi untuk boot disk bidang kontrol dan disk etcd Anda:
gcloud kms keys create KCP_DISK_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --purpose="encryption" \ --protection-level=PROTECTION_LEVEL \ --project=KEY_PROJECT_ID
Ganti kode berikut:
KCP_DISK_KEY_NAME
: nama kunci enkripsi untuk boot disk bidang kontrol dan disk etcd.KEYRING_NAME
: nama key ring untuk menyimpan kunci enkripsi Anda untuk cluster.LOCATION
: Trusted Cloud lokasi untuk 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, sepertisoftware
atauhsm
.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_ID
Ganti
ETCD_BACKUP_KEY_NAME
dengan 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 kepada 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_ID
dengan project ID project cluster GKE Anda.Outputnya mirip dengan hal berikut ini:
1234567890
Berikan peran Cloud KMS CryptoKey Encrypter/Decrypter (
roles/cloudkms.cryptoKeyEncrypterDecrypter
) pada kunci enkripsi untuk boot disk dan etcd disk kepada 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.s3ns-system.iam.gserviceaccount.com" \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project=KEY_PROJECT_ID
Ganti kode berikut:
KCP_DISK_KEY_NAME
: nama kunci enkripsi disk.LOCATION
: Trusted Cloud lokasi untuk kunci.KEYRING_NAME
: nama key ring yang berisi kunci enkripsi.CLUSTER_PROJECT_NUMBER
: nomor project numerik project cluster, yang Anda temukan pada 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 boot disk dan etcd disk kepada 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.s3ns-system.iam.gserviceaccount.com" \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation \ --project=KEY_PROJECT_ID
Berikan peran Pengguna Kunci Cloud KMS pada kunci enkripsi untuk boot disk dan etcd disk kepada 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.s3ns-system.iam.gserviceaccount.com" \ --role=roles/container.cloudKmsKeyUser \ --project=KEY_PROJECT_ID
Berikan peran Cloud KMS CryptoKey Encrypter (
roles/cloudkms.cryptoKeyEncrypter
) pada kunci enkripsi cadangan internal etcd kepada 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.s3ns-system.iam.gserviceaccount.com" \ --role=roles/cloudkms.cryptoKeyEncrypter \ --project=KEY_PROJECT_ID
Ganti
ETCD_BACKUP_KEY_NAME
dengan nama kunci enkripsi cadangan operasional etcd.Pemberian peran
roles/cloudkms.cryptoKeyEncrypter
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.cryptoKeyEncrypterDecrypter
.
Menggunakan kunci enkripsi dalam 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 boot disk bidang kontrol dan disk etcd.KEYRING_NAME
: nama key ring yang berisi kunci.LOCATION
: Trusted Cloud lokasi 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-key
Identifikasi 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_NAME
dengan 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, gunakan flag yang sama dengan perintah
gcloud container clusters create-auto
.
Untuk membuat cluster yang mengonfigurasi enkripsi disk dan menjalankan CA Anda sendiri serta kunci penandatanganan akun layanan, lakukan langkah-langkah berikut:
- Lakukan semua langkah konfigurasi kunci dan CA di Menjalankan certificate authority dan kunci Anda sendiri.
- Temukan jalur ke setiap kunci akun layanan dan CA menggunakan petunjuk di Menyiapkan CA dan kunci di cluster baru.
Membuat 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_CA
Ganti kode berikut:
CLUSTER_NAME
: nama cluster baru.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 di halaman ini.PATH_TO_ETCD_BACKUP_KEY
: jalur ke kunci enkripsi cadangan internal etcd Anda dari langkah-langkah sebelumnya di halaman 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 pool CA cluster.PATH_TO_ETCD_PEER_CA
: jalur ke pool CA peer etcd.PATH_TO_ETCD_API_CA
: jalur ke pool CA API etcd.PATH_TO_AGGREGATION_CA
: jalur ke pool 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_KEY
Ganti kode berikut:
CLUSTER_NAME
: nama cluster baru.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 sebelumnya.PATH_TO_ETCD_BACKUP_KEY
: jalur ke kunci enkripsi cadangan internal etcd Anda dari langkah-langkah sebelumnya.
Anda juga dapat menentukan semua tanda 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 konsol Trusted Cloud , 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, periksa apakah 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)"