GKE Enterprise menyediakan platform yang konsisten untuk membangun dan memberikan layanan yang aman, dengan fitur keamanan bawaan di setiap level yang bekerja secara terpisah dan bersama-sama untuk memberikan pertahanan yang mendalam terhadap masalah keamanan. Tutorial ini memperkenalkan Anda pada beberapa fitur keamanan GKE Enterprise yang andal menggunakan Anthos Sample Deployment di Google Cloud. Anthos Sample Deployment men-deploy lingkungan interaktif GKE Enterprise yang nyata dengan cluster GKE, mesh layanan, dan aplikasi Bank of GKE Enterprise dengan beberapa microservice.
Tujuan
Dalam tutorial ini, Anda diperkenalkan dengan beberapa fitur keamanan GKE Enterprise melalui tugas-tugas berikut:
Terapkan TLS (mTLS) bersama di mesh layanan Anda menggunakan Config Sync untuk memastikan komunikasi yang aman secara menyeluruh.
Siapkan pelindung keamanan yang memastikan bahwa pod dengan container dengan hak istimewa tidak di-deploy secara tidak sengaja dengan menggunakan Pengontrol Kebijakan.
Biaya
Men-deploy aplikasi Bank of Anthos akan dikenai biaya bayar sesuai penggunaan untuk GKE Enterprise di Google Cloud seperti yang tercantum di halaman Harga kami, kecuali jika Anda telah membeli langganan.
Anda juga bertanggung jawab atas biaya Google Cloud lainnya yang timbul saat menjalankan aplikasi Bank of Anthos, seperti tagihan untuk VM Compute Engine dan load balancer.
Sebaiknya bersihkan setelah menyelesaikan tutorial atau menjelajahi deployment agar tidak dikenai biaya lebih lanjut.
Sebelum memulai
Tutorial ini adalah tindak lanjut dari tutorial Jelajahi Anthos. Sebelum memulai tutorial ini, ikuti petunjuk di halaman tersebut untuk menyiapkan project Anda dan menginstal Deployment Contoh Anthos.
Menyiapkan lingkungan Cloud Shell Anda
Dalam tutorial ini, Anda akan menggunakan command line Cloud Shell dan editor untuk membuat perubahan pada konfigurasi cluster.
Guna menginisialisasi lingkungan shell untuk tutorial, Anthos Sample Deployment menyediakan skrip yang melakukan hal berikut:
Menginstal semua alat command line yang hilang untuk bekerja secara interaktif dan memverifikasi perubahan pada deployment:
Menetapkan konteks Kubernetes untuk
anthos-sample-cluster1
Meng-clone repositori yang digunakan Config Sync untuk menyinkronkan perubahan konfigurasi ke cluster Anda. Perubahan yang Anda commit dan kirim ke repositori upstream akan disinkronkan ke infrastruktur Anda oleh Config Sync. Ini adalah praktik terbaik yang direkomendasikan untuk menerapkan perubahan pada infrastruktur Anda.
Untuk menyiapkan lingkungan Anda:
Pastikan Anda memiliki sesi Cloud Shell yang aktif. Anda dapat meluncurkan Cloud Shell dengan mengklik Activate Cloud Shell dari Google Cloud Console dalam project tutorial Anda.
Buat direktori untuk bekerja di:
mkdir tutorial cd tutorial
Download skrip inisialisasi:
curl -sLO https://github.com/GoogleCloudPlatform/anthos-sample-deployment/releases/latest/download/init-anthos-sample-deployment.env
Sediakan skrip inisialisasi ke dalam lingkungan Cloud Shell Anda:
source init-anthos-sample-deployment.env
Output:
/google/google-cloud-sdk/bin/gcloud /google/google-cloud-sdk/bin/kubectl Your active configuration is: [cloudshell-13605] export PROJECT as anthos-launch-demo-1 export KUBECONFIG as ~/.kube/anthos-launch-demo-1.anthos-trial-gcp.config Fetching cluster endpoint and auth data. kubeconfig entry generated for anthos-sample-cluster1. Copying gs://config-management-release/released/latest/linux_amd64/nomos... \ [1 files][ 40.9 MiB/ 40.9 MiB] Operation completed over 1 objects/40.9 MiB. Installed nomos into ~/bin. Cloned ACM config repo: ./anthos-sample-deployment-config-repo
Ubah direktori ke repositori konfigurasi dan gunakan sebagai direktori kerja selama sisa tutorial ini:
cd anthos-sample-deployment-config-repo
Menegakkan mTLS di mesh layanan Anda
Untuk mengantisipasi ekspansi global, CIO Anda telah mewajibkan semua data pengguna untuk dienkripsi saat dalam pengiriman untuk mengamankan informasi sensitif agar sesuai dengan hukum enkripsi dan privasi data regional.
Jadi, apakah semua traffic Anda aman saat ini?
Buka halaman Anthos Service Mesh di project tempat Anthos Sample Deployment di-deploy:
Klik transactionhistory di daftar layanan. Seperti yang Anda lihat di Explore GKE Enterprise, halaman detail layanan menampilkan semua telemetri yang tersedia untuk layanan ini.
Di halaman transactionhistory, pada menu Navigasi, pilih Layanan Terhubung. Di sini, Anda dapat melihat koneksi Masuk dan Keluar untuk layanan. Ikon gembok tidak terkunci menunjukkan bahwa beberapa traffic telah diamati di port ini yang tidak menggunakan TLS bersama (mTLS).
mTLS adalah protokol keamanan yang memastikan bahwa traffic aman dan dipercaya di kedua arah di antara dua layanan. Setiap layanan hanya menerima traffic terenkripsi dari layanan yang diautentikasi. Seperti yang Anda lihat, Anthos Service Mesh dengan jelas menunjukkan bahwa Anda memiliki traffic yang tidak dienkripsi di mesh Anda. Warna yang berbeda digunakan di Anthos Service Mesh untuk menunjukkan apakah traffic yang tidak dienkripsi memiliki campuran teks biasa dan mTLS (oranye) atau hanya teks biasa (merah).
Tinggal beberapa langkah lagi untuk memenuhi kepatuhan Anda dengan GKE Enterprise. Daripada membuat perubahan pada tingkat kode sumber serta mem-build ulang dan men-deploy ulang aplikasi untuk mengatasi situasi ini, Anda dapat menerapkan kebijakan enkripsi baru secara deklaratif melalui konfigurasi menggunakan Config Sync untuk men-deploy konfigurasi baru secara otomatis dari repositori Git pusat.
Di bagian ini, Anda akan melakukan hal berikut:
Sesuaikan konfigurasi kebijakan di repositori Git Anda untuk menerapkan bahwa layanan menggunakan komunikasi terenkripsi melalui mTLS.
Andalkan Config Sync untuk otomatis mengambil perubahan kebijakan dari repositori dan menyesuaikan kebijakan Anthos Service Mesh.
Pastikan perubahan kebijakan terjadi di cluster Anda yang dikonfigurasi untuk disinkronkan dengan repositori.
Konfirmasi penyiapan Config Sync
Perintah
nomos
adalah alat command line yang memungkinkan Anda berinteraksi dengan Config Management Operator dan melakukan tugas Config Sync penting lainnya dari mesin lokal atau Cloud Shell. Untuk memastikan bahwa Config Sync sudah diinstal dan dikonfigurasi dengan benar pada cluster Anda, jalankannomos status
:nomos status
Output:
Connecting to clusters... Current Context Sync Status Last Synced Token Sync Branch Resource Status ------- ------- ----------- ----------------- ----------- --------------- * anthos-sample-cluster1 SYNCED abef0b01 master Healthy
Output tersebut mengonfirmasi bahwa Config Sync dikonfigurasi untuk menyinkronkan cluster Anda ke cabang master repositori konfigurasi Anda. Tanda bintang di kolom pertama menunjukkan bahwa konteks saat ini disetel ke
anthos-sample-cluster1
. Jika Anda tidak melihatnya, ganti konteks saat ini keanthos-sample-cluster1
:kubectl config use-context anthos-sample-cluster1
Output:
Switched to context "anthos-sample-cluster1".
Pastikan Anda berada di cabang
master
:git checkout master
Output:
Already on 'master' Your branch is up to date with 'origin/master'.
Verifikasi repositori konfigurasi upstream Anda:
git remote -v
Output:
origin https://source.developers.google.com/.../anthos-sample-deployment-config-repo (fetch) origin https://source.developers.google.com/.../anthos-sample-deployment-config-repo (push)
Pastikan Anda masih berada di direktori
anthos-sample-deployment-config-repo
, dan jalankan perintah berikut untuk memeriksa penyiapan git Anda. Fungsi bantuan ini bersumber ke lingkungan Anda oleh skrip inisialisasi, dan menjalankan perintahgit config
untuk memeriksa nilaiuser.email
danuser.name
yang ada pada konfigurasi git Anda. Jika nilai ini tidak dikonfigurasi, fungsi akan menetapkan default pada level repo berdasarkan akun Google Cloud yang saat ini aktif.init_git
Output (contoh):
Configured local git user.email to user@example.com Configured local git user.name to user
Anda kini siap untuk meng-commit perubahan kebijakan pada repositori Anda. Saat Anda mengirim commit ini ke repositori upstream (origin), Config Sync akan memastikan perubahan ini diterapkan ke cluster yang telah Anda konfigurasi untuk mengelolanya.
Memperbarui kebijakan untuk mengenkripsi semua traffic layanan
Konfigurasi untuk Anthos Service Mesh ditentukan secara deklaratif menggunakan file YAML. Untuk mengenkripsi semua traffic layanan, Anda harus memodifikasi YAML yang menentukan jenis traffic yang dapat diterima oleh layanan, dan YAML yang menentukan jenis traffic yang dikirim oleh layanan ke tujuan tertentu.
File YAML pertama yang perlu Anda lihat adalah
namespaces/istio-system/peer-authentication.yaml
, yang merupakan kebijakan autentikasi tingkat mesh yang menentukan jenis traffic yang diterima secara default oleh semua layanan di mesh Anda.cat namespaces/istio-system/peer-authentication.yaml
Output:
apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "default" namespace: "istio-system" spec: mtls: mode: PERMISSIVE
Seperti yang dapat Anda lihat, mode mTLS
PeerAuthentication
adalahPERMISSIVE
, yang berarti layanan menerima traffic HTTP dan mTLS dalam teks biasa.Ubah
namespaces/istio-system/peer-authentication.yaml
untuk hanya mengizinkan komunikasi terenkripsi antarlayanan dengan menyetel mode mTLS keSTRICT
:cat <<EOF> namespaces/istio-system/peer-authentication.yaml apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "default" namespace: "istio-system" spec: mtls: mode: STRICT EOF
Selanjutnya, lihat Aturan Tujuan di
namespaces/istio-system/destination-rule.yaml
. Atribut ini menentukan aturan untuk mengirimkan traffic ke tujuan yang ditentukan, termasuk apakah traffic dienkripsi atau tidak. Perhatikan bahwa TLSmode adalahDISABLE
, yang berarti traffic dikirim dalam teks biasa ke semua host yang cocok.cat namespaces/istio-system/destination-rule.yaml
Output:
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: annotations: meshsecurityinsights.googleapis.com/generated: "1561996419000000000" name: default namespace: istio-system spec: host: '*.local' trafficPolicy: tls: mode: DISABLE
Ubah
namespaces/istio-system/destination-rule.yaml
agar Istio menetapkan kebijakan traffic yang mengaktifkan TLS untuk semua host yang cocok di cluster dengan menggunakan TLSmodeISTIO_MUTUAL
:cat <<EOF> namespaces/istio-system/destination-rule.yaml apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: annotations: meshsecurityinsights.googleapis.com/generated: "1561996419000000000" name: default namespace: istio-system spec: host: '*.local' trafficPolicy: tls: mode: ISTIO_MUTUAL EOF
Mengirim perubahan ke repositori
Anda hampir siap untuk mengirim perubahan konfigurasi; namun, kami menyarankan beberapa pemeriksaan sebelum Anda akhirnya melakukan update.
Jalankan
nomos vet
untuk memastikan konfigurasi Anda valid:nomos vet
Tidak ada output yang menunjukkan bahwa tidak ada error validasi.
Segera setelah Anda mengirim perubahan, Config Sync akan mengambilnya dan menerapkannya ke sistem Anda. Untuk menghindari hasil yang tidak diharapkan, sebaiknya periksa apakah status live saat ini pada konfigurasi Anda tidak berubah sejak Anda melakukan pengeditan. Gunakan
kubectl
untuk memeriksa apakahdestinationrule
mencerminkan bahwa mTLS dinonaktifkan untuk cluster:kubectl get destinationrule default -n istio-system -o yaml
Output:
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule ... spec: host: '*.local' trafficPolicy: tls: mode: DISABLE
Sekarang commit dan kirim perubahan ini ke repositori upstream. Perintah berikut menggunakan fungsi bantuan yang disebut
watchmtls
yang bersumber ke lingkungan Anda oleh skripinit
. Fungsi bantuan ini menjalankan kombinasinomos status
dan perintahkubectl
yang Anda coba sebelumnya. Fungsi ini memantau cluster untuk perubahan hingga Anda menekanCtrl+C
untuk keluar. Pantau tampilan sampai Anda melihat bahwa perubahan diterapkan dan disinkronkan di cluster.git commit -am "enable mtls" git push origin master && watchmtls
Anda juga dapat melihat perubahan yang ditampilkan pada halaman Anthos Service Mesh di GKE Enterprise.
Buka halaman Anthos Service Mesh
Anda akan melihat ikon gembok tidak terkunci berwarna merah telah berubah. Ikon gembok akan tampak berwarna oranye (traffic campuran), bukan berwarna hijau (traffic yang sepenuhnya dienkripsi) karena secara default kita melihat secara default pada satu jam terakhir dengan campuran mTLS dan teks biasa. Jika memeriksa kembali setelah satu jam, Anda akan melihat ikon gembok hijau yang menunjukkan bahwa Anda telah berhasil mengenkripsi semua traffic layanan.
Menggunakan Pengontrol Kebijakan untuk menyiapkan pagar pembatas
Tim keamanan Anda khawatir dengan potensi serangan root yang mungkin terjadi saat menjalankan pod dengan container dengan hak istimewa (container dengan akses root). Meskipun konfigurasi saat ini tidak men-deploy container yang memiliki hak istimewa, Anda ingin mencegah sebanyak mungkin vektor ancaman yang dapat membahayakan performa atau, bahkan lebih buruk, data pelanggan.
Terlepas dari ketekunan tim, masih ada risiko Anda dapat menjadi rentan terhadap serangan root secara tidak sengaja dari update konfigurasi mendatang melalui proses continuous delivery. Anda memutuskan untuk menyiapkan pagar pembatas keamanan untuk melindungi dari bahaya ini.
Menerapkan pagar pembatas
Batasan adalah kontrol administratif otomatis yang dimaksudkan untuk menerapkan kebijakan yang melindungi lingkungan Anda. Pengontrol Kebijakan mencakup dukungan untuk menentukan dan menerapkan aturan khusus yang tidak dicakup oleh objek Kubernetes native. Pengontrol Kebijakan memeriksa, mengaudit, dan menerapkan pagar pembatas yang Anda terapkan sesuai dengan persyaratan keamanan unik, kepatuhan terhadap peraturan, dan tata kelola organisasi Anda.
Gunakan Pengontrol Kebijakan
Pengontrol Kebijakan dibangun di mesin kebijakan open source bernama Gatekeeper yang digunakan untuk menerapkan kebijakan setiap kali resource dalam cluster dibuat, diperbarui, atau dihapus. Kebijakan ini ditentukan dengan menggunakan batasan dari library template Pengontrol Kebijakan atau dari template batasan Gatekeeper lainnya.
Anthos Sample Deployment di Google Cloud sudah Menginstal Pengontrol Kebijakan dan juga mengaktifkan library template Pengontrol Kebijakan. Anda dapat memanfaatkan hal ini saat menerapkan batasan dengan menggunakan batasan yang ada untuk container dengan hak istimewa dari library.
Menerapkan batasan kebijakan untuk penampung dengan hak istimewa
Untuk mengatasi masalah tim keamanan, Anda menerapkan
batasan K8sPSPPrivilegedContainer
.
Batasan ini menolak pod agar tidak dijalankan dengan container dengan hak istimewa.
Dengan menggunakan terminal Cloud Shell, buat file
constraint.yaml
baru dengan teks dari batasan library, seperti berikut:cat <<EOF> ~/tutorial/anthos-sample-deployment-config-repo/cluster/constraint.yaml apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sPSPPrivilegedContainer metadata: name: psp-privileged-container spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] excludedNamespaces: ["kube-system"] EOF
Gunakan
nomos vet
untuk memverifikasi bahwa konfigurasi yang diperbarui sudah valid sebelum Anda menerapkannya.nomos vet
Perintah akan ditampilkan secara diam-diam selama tidak ada error.
Commit dan kirim perubahan untuk menerapkan kebijakan. Anda dapat menggunakan
nomos status
dengan perintahwatch
untuk mengonfirmasi bahwa perubahan telah diterapkan ke cluster Anda. TekanCtrl+C
untuk keluar dari perintah smartwatch setelah selesai.git add . git commit -m "add policy constraint for privileged containers" git push && watch nomos status
Output:
Connecting to clusters... Current Context Sync Status Last Synced Token Sync Branch Resource Status ------- ------- ----------- ----------------- ----------- --------------- * anthos-sample-cluster1 SYNCED f2898e92 master Healthy
Menguji kebijakan Anda
Setelah menerapkan kebijakan, Anda dapat mengujinya dengan mencoba menjalankan pod dengan container dengan hak istimewa.
Di terminal Cloud Shell, gunakan perintah berikut untuk membuat file baru dalam direktori tutorial,
nginx-privileged.yaml
, dengan konten dari spesifikasi contoh ini:cat <<EOF> ~/tutorial/nginx-privileged.yaml apiVersion: v1 kind: Pod metadata: name: nginx-privileged-disallowed labels: app: nginx-privileged spec: containers: - name: nginx image: nginx securityContext: privileged: true EOF
Mencoba meluncurkan pod dengan
kubectl apply
.kubectl apply -f ~/tutorial/nginx-privileged.yaml
Output:
Error from server ([denied by psp-privileged-container] Privileged container is not allowed: nginx, securityContext: {"privileged": true}): error when creating "~/nginx-privileged.yaml": admission webhook "validation.gatekeeper.sh" denied the request: [denied by psp-privileged-container] Privileged container is not allowed: nginx, security Context: {"privileged": true}
Error ini menunjukkan bahwa pengontrol penerimaan Gatekeeper yang memantau lingkungan Kubernetes Anda menerapkan kebijakan baru. Hal ini mencegah eksekusi pod karena adanya container dengan hak istimewa dalam spesifikasi pod.
Konsep kebijakan berbasis versi yang dapat Anda terapkan untuk menyiapkan pagar pembatas dengan Pengontrol Kebijakan adalah konsep yang efektif karena menstandarkan, menyatukan, dan memusatkan tata kelola cluster Anda, menerapkan kebijakan melalui pemantauan aktif terhadap lingkungan Anda pasca-deployment.
Anda dapat menemukan berbagai jenis kebijakan lainnya untuk digunakan sebagai pagar pembatas bagi lingkungan Anda di repositori Gatekeeper.
Mempelajari deployment lebih lanjut
Meskipun tutorial ini telah menunjukkan cara menggunakan beberapa fitur keamanan GKE Enterprise, masih banyak hal yang dapat Anda lihat dan lakukan di GKE Enterprise dengan deployment kami. Jangan ragu untuk mencoba tutorial lain atau lanjutkan mempelajari Anthos Sample Deployment di Google Cloud sendiri, sebelum mengikuti petunjuk pembersihan di bagian berikutnya.
Pembersihan
Setelah selesai menjelajahi aplikasi Bank of Anthos, Anda dapat membersihkan resource yang Anda buat di Google Cloud sehingga tidak menghabiskan kuota dan Anda tidak akan ditagih di masa mendatang.
Opsi 1. Anda dapat menghapus project. Namun, jika ingin mempertahankan project, Anda dapat menggunakan Opsi 2 untuk menghapus deployment.
Opsi 2. Jika ingin mempertahankan project saat ini, Anda dapat menggunakan
terraform destroy
untuk menghapus aplikasi contoh dan cluster.
Menghapus project (opsi 1)
Cara termudah untuk menghindari penagihan adalah dengan menghapus project yang Anda buat untuk tutorial ini.
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Menghapus deployment (opsi 2)
Pendekatan ini menghapus aplikasi dan cluster Bank of Anthos, tetapi tidak menghapus project. Jalankan perintah berikut di Cloud Shell Anda:
Ubah ke direktori yang menghosting skrip penginstalan:
cd bank-of-anthos/iac/tf-anthos-gke
Hapus sampel dan cluster:
terraform destroy
Masukkan project ID saat diminta.
Jika Anda berencana men-deploy ulang, pastikan semua persyaratan terpenuhi seperti yang dijelaskan di bagian Sebelum memulai.
Langkah selanjutnya
Masih banyak lagi yang dapat dijelajahi di dokumentasi GKE Enterprise kami.
Coba tutorial lainnya
Pelajari pengelolaan layanan dengan Anthos Sample Deployment di Mengelola layanan dengan GKE Enterprise.
Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.
Pelajari GKE Enterprise lebih lanjut
Pelajari lebih lanjut GKE Enterprise di ringkasan teknis kami.
Cari tahu cara menyiapkan GKE Enterprise dalam lingkungan produksi sungguhan dalam panduan penyiapan kami.
Cari tahu cara melakukan lebih banyak hal dengan Anthos Service Mesh di dokumentasi Anthos Service Mesh.
Cari tahu lebih lanjut tentang Pengontrol Kebijakan di panduan Pengontrol Kebijakan
Cari tahu lebih lanjut tentang pengelolaan kebijakan dan konfigurasi terpusat yang deklaratif di dokumentasi Config Sync dan dokumentasi Pengontrol Kebijakan