Mengenkripsi data Anda saat dalam pengiriman di GKE dengan kunci enkripsi yang dikelola pengguna

Halaman ini menunjukkan cara mengenkripsi data dalam pengiriman untuk komunikasi Pod di seluruh node Google Kubernetes Engine (GKE) menggunakan kunci enkripsi yang dikelola pengguna. Tingkat kontrol atas kunci enkripsi ini berguna jika Anda berada dalam industri yang diatur dan memiliki kebutuhan bisnis untuk audit kepatuhan dan keamanan. Di halaman ini, Anda akan mempelajari cara mengonfigurasi lingkungan cluster tunggal dan multi-cluster, termasuk praktik terbaik dan batasan.

Halaman ini ditujukan untuk spesialis Keamanan yang memerlukan kontrol terperinci atas kunci enkripsi untuk memenuhi persyaratan kepatuhan dan keamanan. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam Google Cloud konten, lihat Peran dan tugas pengguna GKE umum.

Sebelum membaca halaman ini, pastikan Anda memahami konsep berikut:

Secara default, Google mengenkripsi semua data dalam pengiriman antar- VM di tingkat pengontrol antarmuka jaringan (NIC) untuk memastikan kerahasiaan data dalam pengiriman, terlepas dari layanan atau aplikasi yang berjalan di VM (termasuk GKE). Lapisan enkripsi ini berlaku untuk semua node GKE dan traffic Pod. Kunci enkripsi disediakan dan dikelola oleh Google.

Anda dapat mengaktifkan enkripsi transparan antar-node di lingkungan cluster tunggal dan multi-cluster. Untuk mengetahui informasi selengkapnya tentang cara kerja fitur ini, lihat Cara kerja enkripsi transparan antar-node dengan GKE.

Batasan

  • Fitur ini sendiri tidak menjamin bahwa Google tidak dapat mengakses kunci enkripsi yang disimpan dalam memori node GKE. Di beberapa lingkungan atau yurisdiksi yang diatur, atau untuk memenuhi persyaratan kepatuhan tertentu, Anda mungkin ingin mengenkripsi lebih lanjut kunci ini dan mengontrol akses. Untuk melakukannya, sebaiknya gunakan enkripsi transparan antar-node dengan Confidential GKE Nodes.

  • Enkripsi transparan antar-node untuk GKE hanya didukung di cluster GKE Dataplane V2.

  • GKE Autopilot tidak didukung.

  • Enkripsi transparan antar-node untuk GKE menggunakan WireGuard. WireGuard tidak FIPS FIPS.

  • Kunci enkripsi tidak dirotasi secara dinamis. Rotasi kunci harus ditangani secara manual dengan memulai ulang node.

  • Enkripsi transparan antar-node bersama dengan Confidential GKE Nodes hanya berfungsi di Container-Optimized OS (COS) dan Ubuntu, bukan di Windows.

  • Enkripsi transparan antar-node tidak mengenkripsi traffic jaringan yang dimulai oleh node GKE atau Pod menggunakan hostNetwork.

  • Enkripsi transparan antar-node tidak mengenkripsi traffic jaringan yang dikirim ke Pod yang diekspos di port node. Meskipun ExternalTrafficPolicy: Cluster dikonfigurasi di Layanan, traffic yang diteruskan dari node pertama yang menerima traffic dari klien ke Pod backend tidak dienkripsi.

  • Jumlah maksimum node yang didukung dengan enkripsi transparan antar-node yang diaktifkan untuk konfigurasi cluster tunggal atau multi-cluster adalah 500.

  • Enkripsi transparan antar-node dapat menyebabkan node kelebihan permintaan. Anda mungkin memperkirakan peningkatan CPU rata-rata sebesar 15% pada node n2-standard-8 dengan OS Ubuntu dengan throughput 2 Gbps.

    Peningkatan penggunaan CPU tidak dikaitkan dengan Pod mana pun karena tidak diketahui oleh kube-scheduler. Pod dengan peningkatan traffic mungkin menggunakan semua resource CPU di node. Hal ini dapat mencegah Pod lain mendapatkan resource CPU yang mereka butuhkan, meskipun dikonfigurasi dengan benar. Hal ini dapat menyebabkan masalah bagi Pod yang mencoba menjalankan workload sensitif atau yang perlu dapat merespons permintaan dengan cepat. Sebagai solusinya, Anda dapat menyimpan sejumlah besar CPU yang tidak dijadwalkan di node yang mengaktifkan enkripsi transparan antar-node. Atau, Anda dapat menjadwalkan Pod dengan a low PriorityClass yang memiliki permintaan CPU besar tetapi tidak pernah menggunakan CPU ini.

  • Enkripsi transparan antar-node menimbulkan latensi 150 mikrodetik pada dua node di zona yang sama yang tidak menggunakan Confidential GKE Nodes.

  • Saat Anda mengaktifkan enkripsi transparan antar-node, fitur kemampuan observasi traffic yang digunakan untuk melacak traffic di Pod mungkin tidak berfungsi seperti yang diharapkan karena data dalam pengiriman dienkripsi dengan kunci yang tidak dapat diakses oleh infrastruktur Google yang mendasarinya.

  • Saat Anda mengaktifkan enkripsi transparan antar-node, alamat IP Pod tidak terlihat di VPC. Fitur yang bergantung pada pemeriksaan paket seperti Packet Mirroring dan aturan firewall VPC berbasis Pod CIDR tidak kompatibel dengan enkripsi transparan antar-node.

  • Saat Anda mengaktifkan enkripsi transparan antar-node di seluruh cluster yang terpasang ke subnet VPC yang berbeda, Anda harus membuat aturan firewall secara manual untuk mengizinkan komunikasi antar-node cluster.

  • Enkripsi transparan antar-node menonaktifkan beberapa kemampuan Lapisan 7 GKE Dataplane V2. Akibatnya, Anda tidak dapat mengaktifkan kebijakan jaringan FQDN dan enkripsi transparan antar-node secara bersamaan.

  • Anda tidak dapat mengaktifkan fitur ini secara bersamaan dengan visibilitas intranode.

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Untuk 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 menjalankan perintah dalam dokumen ini.
  • Enkripsi transparan antar-node GKE hanya didukung di Google Cloud CLI versi 458.0.0 dan yang lebih baru serta versi GKE berikut:

    • 1.26.10-gke.1024000 atau yang lebih baru
    • 1.27.7-gke.1506000 atau yang lebih baru
    • 1.28.2-gke.1098000 atau yang lebih baru

Mengaktifkan enkripsi transparan antar-node dengan GKE

Anda dapat mengaktifkan enkripsi transparan antar-node dengan GKE di satu cluster atau di lingkungan multi-cluster.

Mengaktifkan di cluster baru

  1. Untuk mengaktifkan enkripsi transparan antar-node di cluster baru:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-datapane-v2 \
        --in-transit-encryption inter-node-transparent
    

    Ganti kode berikut:

    • CLUSTER_NAME dengan nama cluster Anda.
    • CONTROL_PLANE_LOCATION: lokasi Compute Engine dari bidang kontrol cluster Anda. Berikan region untuk cluster regional, atau zona untuk cluster zona.
  2. Untuk memverifikasi konfigurasi Anda, gunakan perintah berikut untuk memeriksa status enkripsi:

    kubectl -n kube-system exec -ti anetd-XXXX -- cilium status | grep Encryption
    

    Outputnya mirip dengan hal berikut ini:

    Encryption: Wireguard [cilium_wg0 (Pubkey: <key>, Port: 51871, Peers: 2)]
    

Mengaktifkan di cluster yang ada

  1. Untuk mengaktifkan enkripsi transparan antar-node di cluster yang ada:

    gcloud container clusters update CLUSTER_NAME \
      --in-transit-encryption inter-node-transparent \
      --location=CONTROL_PLANE_LOCATION
    

    Ganti kode berikut:

    • CLUSTER_NAME dengan nama cluster Anda.
    • CONTROL_PLANE_LOCATION: lokasi Compute Engine dari bidang kontrol cluster Anda. Berikan region untuk cluster regional, atau zona untuk cluster zona.
  2. Untuk memeriksa apakah perintah Google Cloud CLI berhasil diselesaikan :

    gcloud container clusters describe CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --format json | jq .status
    

    Ganti kode berikut:

    • CLUSTER_NAME dengan nama cluster Anda.
    • CONTROL_PLANE_LOCATION: lokasi Compute Engine dari bidang kontrol cluster Anda. Berikan region untuk cluster regional, atau zona untuk cluster zona.

    Tunggu hingga status menampilkan "RUNNING". Mengaktifkan enkripsi antar-node di GKE akan otomatis memulai ulang node. Mungkin perlu waktu beberapa jam agar node dimulai ulang dan node baru menerapkan kebijakan.

  3. Untuk mengonfirmasi bahwa node telah dimulai ulang:

    kubectl get nodes
    

    Periksa kolom AGE setiap node dan lanjutkan jika kolom AGE mencerminkan node baru.

  4. Untuk memverifikasi konfigurasi Anda, Anda dapat menggunakan perintah berikut untuk memeriksa status enkripsi:

    kubectl -n kube-system exec -ti anetd-XXXX -- cilium status | grep Encryption
    

    Outputnya mirip dengan hal berikut ini:

    Encryption: Wireguard [cilium_wg0 (Pubkey: <key>, Port: 51871, Peers: 2)]
    

    Pastikan jumlah peer kurang satu dari jumlah node di cluster Anda. Misalnya, di cluster dengan 24 node, jumlah peer harus 23. Jika jumlah peer tidak kurang satu dari jumlah node di cluster, mulai ulang agen anetd di node Anda lagi.

Mengaktifkan di beberapa cluster

Enkripsi transparan antar-node tidak didukung di cluster Autopilot. Jika fleet Anda menyertakan cluster Autopilot, cluster tersebut tidak akan dapat berkomunikasi dengan cluster Standar yang mengaktifkan enkripsi.

Untuk mengaktifkan enkripsi transparan antar-node di lingkungan multi-cluster:

  1. Aktifkan enkripsi transparan antar-node di cluster baru atau di cluster yang ada.

  2. Daftarkan cluster Anda ke fleet.

  3. Aktifkan enkripsi transparan antar-node untuk fleet:

    gcloud container fleet dataplane-v2-encryption enable --project PROJECT_ID
    

    Ganti PROJECT_ID dengan project ID Anda.

  4. Verifikasi status di semua node:

    kubectl -n kube-system get pods -l k8s-app=cilium -o name | xargs -I {} kubectl -n kube-system exec -ti {} -- cilium status
    

    Outputnya mirip dengan hal berikut ini:

    ...
    Encryption: Wireguard [cilium_wg0 (Pubkey: <key>, Port: 51871, Peers: 5)]
    ...
    

Menonaktifkan enkripsi transparan antar-node

Dalam beberapa kasus, Anda mungkin ingin menonaktifkan enkripsi transparan antar-node di cluster GKE untuk meningkatkan performa, atau untuk memecahkan masalah konektivitas aplikasi Anda. Sebelum melanjutkan operasi ini, pertimbangkan hal berikut:

  • Enkripsi transparan antar-node diaktifkan untuk seluruh cluster dan Anda tidak dapat menonaktifkannya sebagian di resource Kubernetes individual seperti namespace atau Pod.

  • Lakukan operasi ini selama periode pemeliharaan karena operasi ini akan mengganggu traffic Pod Anda.

Menonaktifkan di satu cluster

Untuk menonaktifkan enkripsi transparan antar-node di satu cluster:

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --in-transit-encryption none

Ganti kode berikut:

  • CLUSTER_NAME: dengan nama cluster Anda.
  • CONTROL_PLANE_LOCATION: lokasi Compute Engine dari bidang kontrol cluster Anda. Berikan region untuk cluster regional, atau zona untuk cluster zona.

Menonaktifkan di cluster yang merupakan bagian dari fleet

Anda dapat menonaktifkan enkripsi untuk cluster di fleet menggunakan salah satu dari dua opsi berikut:

  • Untuk menghapus cluster sepenuhnya dari fleet, batalkan pendaftaran cluster Anda.

  • Atau, pertahankan cluster di fleet, tetapi nonaktifkan enkripsi:

    gcloud container fleet dataplane-v2-encryption disable --project PROJECT_ID
    

    Ganti PROJECT_ID dengan project ID Anda.

    Menonaktifkan enkripsi dengan perintah ini akan memulai penghapusan node jarak jauh dari daftar peer Wireguard di setiap cluster. Proses ini dapat memerlukan waktu hingga beberapa menit untuk diselesaikan, bergantung pada jumlah cluster dan node yang terlibat. Untuk melihat jumlah peer yang diperbarui, Anda harus memuat ulang daftar peer WireGuard secara manual di setiap cluster. Anda dapat menggunakan alat pengelolaan cluster atau perintah berikut:

    kubectl -n kube-system exec -ti anetd-XXXX -- cilium status | grep Encryption
    

Menonaktifkan untuk seluruh fleet cluster

  • Untuk menonaktifkan enkripsi transparan antar-node di fleet:

    gcloud container fleet dataplane-v2-encryption disable --project PROJECT_ID
    

    Ganti PROJECT_ID dengan project ID Anda.

  • Untuk menonaktifkan enkripsi transparan antar-node dan menghapus API yang tidak digunakan lagi, nonaktifkan GKE Dataplane V2 API di tingkat fleet. Tindakan ini akan menonaktifkan pengontrol GKE Dataplane V2 yang berjalan di fleet Anda.

    gcloud services disable gkedataplanev2.googleapis.com \
        --project=PROJECT_ID
    

    Ganti PROJECT_ID dengan project ID Anda.

    Untuk mengelola cluster secara efisien dengan nama yang sama dan memastikan aktivasi enkripsi multi-cluster, ikuti langkah-langkah berikut:

    1. Batalkan pendaftaran cluster lama dari fleet sebelum membuat cluster baru dengan nama yang sama.

    2. Daftarkan kembali cluster baru setelah dibuat ulang.

    3. Jika Anda lupa membatalkan pendaftaran cluster, hapus keanggotaan lama, dan buat ulang cluster baru dengan keanggotaan baru.

    Jika langkah-langkah ini tidak diikuti, enkripsi multi-cluster mungkin tidak akan diaktifkan di cluster baru hingga keanggotaan fleet dibuat ulang.

Cara kerja enkripsi transparan antar-node dengan GKE

Bagian berikut menjelaskan cara kerja enkripsi transparan antar-node saat Anda mengaktifkannya di cluster:

Enkripsi traffic jaringan antara dua Pod di node yang berbeda

Dengan enkripsi transparan antar-node yang diaktifkan, GKE Dataplane V2 mengenkripsi traffic Pod-ke-Pod jika Pod berada di node yang berbeda, terlepas dari cluster tempat node tersebut berada. Jika cluster adalah bagian dari fleet yang sama, cluster tersebut akan berada di domain enkripsi yang sama.

Cluster dengan konfigurasi enkripsi transparan antar-node yang berbeda dapat berada bersama di fleet yang sama. Jika Anda memiliki lingkungan multi-cluster yang hanya menggunakan enkripsi transparan antar-node di beberapa cluster, pertimbangkan hal berikut:

  • Komunikasi Pod-ke-Pod antara node di cluster yang sama dienkripsi menggunakan pasangan kunci publik/pribadi.

  • Komunikasi Pod-ke-Pod antara node di cluster yang mengaktifkan enkripsi transparan antar-node dan node di cluster yang tidak mengaktifkan enkripsi transparan antar-node akan gagal.

Pembuatan dan penggunaan kunci enkripsi

Saat fitur ini diaktifkan, setiap node GKE di cluster akan otomatis membuat pasangan kunci publik/pribadi yang dikenal sebagai kunci enkripsi.

  • Kunci pribadi disimpan dalam memori (bukan di disk) dan tidak pernah meninggalkan node. Menggunakan GKE Confidential Nodes akan semakin mengurangi risiko kunci disusupi karena memori node juga dienkripsi (dengan kunci yang berbeda).

  • Kunci publik dibagikan ke node lain menggunakan bidang kontrol GKE Dataplane V2 dan dapat diakses oleh semua node di domain enkripsi yang sama.

Setelah kunci ditukar, setiap node dapat membuat tunnel WireGuard dengan node lain di domain enkripsi yang sama. Setiap tunnel bersifat unik untuk pasangan node tertentu.

Pertimbangkan hal berikut saat menangani pasangan kunci pribadi atau publik dan kunci sesi:

  • Pasangan kunci pribadi/publik:

    • Kunci publik didistribusikan di cluster dan semua node di cluster dapat mengakses kunci publik.

    • Pasangan kunci dirotasi saat node dimulai ulang. GKE tidak merotasi kunci secara berkala. Untuk memicu rotasi kunci secara manual, kosongkan dan mulai ulang node. Tindakan ini akan membatalkan pasangan kunci asli dan membuat pasangan kunci baru.

  • Kunci sesi:

    • Kunci ini tidak dapat dikonfigurasi.

    • Kunci ini dirotasi secara berkala setiap dua menit.

    • Kunci sesi bersifat eksklusif untuk node yang terlibat dalam tunnel.

Langkah berikutnya