Untuk memenuhi persyaratan kepatuhan kluster dan meningkatkan keamanan, aktifkan fitur tata kelola kebijakan. Fitur ini menyediakan pustaka kebijakan keamanan untuk aplikasi kontainer Kubernetes yang mencakup kategori seperti Infra (resource lapisan infrastruktur), Compliance (standar kepatuhan Kubernetes), PSP (ekstensi kemampuan PodSecurityPolicy), dan K8s-general (kebijakan umum). Anda dapat mengaktifkan atau menyesuaikan kebijakan keamanan untuk aplikasi kontainer Anda di Konsol ACK guna memverifikasi bahwa penerapan dan pembaruan Pod aman serta terkendali.
Tata kelola kebijakan
Mulai Kubernetes v1.21, PodSecurityPolicy (PSP) telah ditinggalkan. Sebagai respons, ACK telah meningkatkan fitur manajemen kebijakan berbasis PSP sebelumnya. Dibangun di atas admission controller Gatekeeper yang menggunakan kebijakan Open Policy Agent (OPA), ACK memperkaya fitur tersebut dengan kemampuan seperti statistik status tata kelola kebijakan, pelaporan log, dan pencarian log. ACK juga menyertakan pustaka kebijakan yang kaya dengan aturan yang disesuaikan untuk berbagai skenario aplikasi Kubernetes. Anda dapat mengonfigurasi kebijakan ini melalui antarmuka yang mudah digunakan di Konsol ACK, sehingga menyederhanakan penggunaan tata kelola kebijakan.
Prasyarat
-
Kluster menjalankan Kubernetes 1.16 atau lebih baru. Untuk meningkatkan kluster Anda, lihat Tingkatkan kluster ACK secara manual.
-
Jika Anda menggunakan RAM user untuk mengelola kebijakan, pastikan RAM user memiliki izin berikut:
-
cs:DescribePolicies: mencantumkan kebijakan dalam pustaka kebijakan. -
cs:DescribePolicyDetails: mendapatkan detail template kebijakan. -
cs:DescribePolicyGovernanceInCluster: mendapatkan detail tata kelola kebijakan suatu kluster. -
cs:DescribePolicyInstances: mencantumkan instance kebijakan yang diterapkan di kluster. -
cs:DescribePolicyInstancesStatus: mendapatkan status penerapan instance kebijakan untuk berbagai jenis kebijakan di kluster. -
cs:DeployPolicyInstance: menerapkan instance kebijakan di kluster tertentu. -
cs:DeletePolicyInstance: menghapus instance kebijakan di kluster tertentu. -
cs:ModifyPolicyInstance: memodifikasi instance kebijakan di kluster tertentu.
Untuk informasi selengkapnya tentang cara membuat kebijakan RAM kustom, lihat Berikan izin akses pada kluster dan resource cloud menggunakan RAM.
-
Komponen tata kelola kebijakan
ACK menyediakan dua jenis komponen tata kelola kebijakan: versi managed dan versi unmanaged. Hanya satu jenis yang dapat diaktifkan di kluster dalam satu waktu. Tabel berikut membandingkan kedua versi tersebut.
|
Item |
Versi Dikelola |
Versi Tidak Terkelola |
|
Mode penerapan |
Penerapan lapisan kontrol: ACK menerapkan dan sepenuhnya mengelola komponen pada control plane kluster. |
Penerapan lapisan data: Komponen diterapkan sebagai workload di kluster Anda dan secara default diinstal di namespace kube-system, mengonsumsi resource Pod pada node pekerja. |
|
Kluster Berlaku |
Kluster Auto Mode versi 1.30 atau lebih baru |
Kluster ACK yang dikelola dan kluster khusus ACK versi 1.16 atau lebih baru |
|
Konfigurasi parameter startup |
Sistem mengonfigurasi parameter startup komponen, yang tidak dapat dikustomisasi. |
Anda dapat mengkustomisasi parameter startup komponen. |
|
Instalasi komponen inti |
Di Konsol ACK, pada halaman Add-ons , kartu komponen untuk versi managed ditandai dengan ikon Managed |
|
|
Pengumpulan log kebijakan |
Mengumpulkan log menggunakan fitur Kumpulkan log komponen lapisan kontrol di kluster ACK yang dikelola dan mengirimkannya ke proyek Log Service yang ditentukan. |
Menginstal komponen pengumpulan log di kluster untuk mengumpulkan dan mengirim log ke proyek Log Service yang ditentukan. |
|
Pustaka kebijakan |
Semua kebijakan dalam Kebijakan keamanan pra-definisi untuk ACK |
|
Catatan
-
Fitur ini hanya berlaku untuk node Linux.
-
Fitur ini tidak mendukung kebijakan kustom. Semua aturan harus berasal dari pustaka kebijakan bawaan ACK.
Langkah 1: Instal atau tingkatkan tata kelola kebijakan
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Di halaman Policy, ikuti petunjuk di layar untuk menginstal atau meningkatkan komponen.
Saat Anda mengaktifkan fitur tata kelola kebijakan, Anda harus menginstal komponen berikut. Komponen-komponen ini gratis, tetapi akan mengonsumsi resource Pod Anda.
-
gatekeeper: admission controller kebijakan Kubernetes berbasis mesin kebijakan OPA. Membantu Anda mengelola dan menerapkan kebijakan OPA di kluster serta mengimplementasikan fitur seperti manajemen label namespace.
CatatanAnda harus menggunakan komponen gatekeeper yang disediakan oleh ACK. Jika Anda telah menginstal komponen gatekeeper dari sumber lain, uninstall terlebih dahulu, lalu instal ulang versi yang disediakan ACK. Untuk informasi selengkapnya tentang catatan rilis komponen gatekeeper, lihat gatekeeper.
-
komponen pengumpulan log: mengumpulkan dan mengambil event untuk permintaan yang ditolak atau ditandai oleh batasan kebijakan.
-
policy-template-controller: controller Kubernetes yang dikembangkan berdasarkan template kebijakan Alibaba Cloud. Membantu Anda mengelola instance kebijakan yang diterapkan dari berbagai template kebijakan dan status tata kelola keseluruhan kluster.
-
Langkah 2: Gunakan tata kelola kebijakan
Titik masuk
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Di halaman Policy, ikuti petunjuk di layar untuk menginstal atau meningkatkan komponen jika diminta, lalu lakukan operasi yang diperlukan.
Lihat status penegakan kebijakan
Klik tab Overview untuk melihat status tata kelola kebijakan saat ini di kluster Anda.
-
Bagian ikhtisar kebijakan menampilkan jumlah total kebijakan perlindungan risiko tinggi dan menengah, jumlah kebijakan yang diaktifkan, serta daftar kebijakan yang direkomendasikan untuk diaktifkan.
-
Statistik permintaan yang ditolak dan peringatan selama 7 hari terakhir.
-
Catatan penegakan kebijakan dalam 7 hari terakhir ditampilkan. Tabel ini secara default menampilkan 100 log terbaru dari permintaan yang ditolak atau peringatan dalam 7 hari terakhir. Untuk melihat lebih banyak log audit, klik ikon
di samping Actions within Last 7 Days dan klik tautan Log Service di jendela pop-up untuk melihat semua log di Logstore yang ditentukan di Konsol Log Service. Tabel Policy Enforcement Records for Last 7 Days di bagian bawah halaman menampilkan Enforcement Time, Policy Type, Policy Name, Policy Description, Risk Level, Action, dan Details untuk setiap kebijakan. Anda dapat menggunakan kotak pencarian dan tombol filter untuk menemukan catatan tertentu.
Buat dan kelola instance kebijakan
Klik tab My Policies, lalu klik Create Policy Instance. Di kotak dialog Create Policy Instance, konfigurasikan parameter.
|
Parameter |
Deskripsi |
|
Policy Type |
Pilih jenis kebijakan. Nilai yang valid:
Untuk informasi selengkapnya, lihat Kebijakan keamanan pra-definisi untuk ACK. |
|
Policy Name |
Berdasarkan jenis kebijakan yang dipilih, pilih nama template kebijakan yang ingin Anda terapkan dari daftar drop-down. |
|
Action |
|
|
Scope |
Pilih namespace di kluster tempat instance kebijakan berlaku. |
|
Parameters |
|
Lihat kebijakan dan instance
Klik tab My Policies untuk melihat semua kebijakan yang dapat diterapkan di kluster.
-
Anda dapat memfilter kebijakan yang ditampilkan di pojok kanan atas daftar. Kebijakan yang diaktifkan ditampilkan terlebih dahulu. Kolom Instances menunjukkan jumlah instance yang diterapkan untuk kebijakan terkait di kluster.
Jika nilai di kolom Instances kosong, kebijakan belum diterapkan di kluster. Anda dapat mengklik Enabled di kolom Actions untuk mengonfigurasi parameter dan menerapkan instance kebijakan.
-
Klik Edit di kolom Actions untuk memodifikasi konfigurasi instance kebijakan.
Jika suatu kebijakan memiliki beberapa instance, klik View Instances di kolom Actions, lalu klik Edit pada instance yang diinginkan untuk memodifikasinya.
-
Klik Delete di kolom Actions untuk menghapus semua instance kebijakan yang diterapkan di kluster.
Untuk informasi selengkapnya tentang deskripsi kebijakan dan contoh template, lihat Kebijakan keamanan pra-definisi untuk ACK.
Operasi terkait
Aktifkan perlindungan penghapusan
Setelah Anda mengaktifkan fitur tata kelola kebijakan seperti dijelaskan dalam Langkah 1: Instal atau tingkatkan tata kelola kebijakan, Anda juga dapat mengaktifkan perlindungan penghapusan untuk namespace atau Services yang melibatkan bisnis kritis atau data sensitif guna mencegah penghapusan tidak disengaja. Saat perlindungan penghapusan diaktifkan, Anda harus menonaktifkannya secara manual sebelum dapat menghapus resource terkait.
Bagian ini menunjukkan cara mengaktifkan perlindungan penghapusan untuk namespace yang sudah ada. Prosesnya serupa untuk resource lain.
-
Aktifkan perlindungan penghapusan untuk namespace yang sudah ada
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Namespaces and Quotas.
-
Di daftar namespace, temukan namespace yang ingin Anda kelola, klik Edit di kolom Actions, lalu ikuti petunjuk di layar di kotak dialog untuk mengaktifkan perlindungan penghapusan.
-
Aktifkan perlindungan penghapusan untuk Service yang sudah ada
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Di daftar Services, temukan Service yang ingin Anda kelola, klik
di kolom Actions, klik Enable Deletion Protection, lalu ikuti petunjuk di layar di kotak dialog untuk mengaktifkan perlindungan penghapusan.
Validasi lintas-resource dengan ack-policy-external-provider
Secara default, Gatekeeper membuat keputusan kebijakan hanya berdasarkan objek yang sedang ditinjau. Namun, skenario keamanan kompleks sering kali memerlukan kebijakan untuk memeriksa status resource kluster lain guna penegakan yang akurat.
Komponen managed ack-policy-external-provider bertindak sebagai sumber data eksternal untuk Gatekeeper, memungkinkan pengembang kebijakan melakukan kueri terhadap resource Kubernetes dari dalam kode Rego mereka. Kemampuan ini diperlukan untuk kebijakan lanjutan seperti kebijakan bawaan perlindungan penghapusan CRD.
Komponen ack-policy-external-provider harus digunakan dengan gatekeeper. Pastikan gatekeeper telah diterapkan di kluster Anda.
Instal dan konfigurasi ack-policy-external-provider
Di halaman ACK Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Add-ons.
-
Cari ack-policy-external-provider dan ikuti petunjuk di layar untuk menyelesaikan konfigurasi.
-
ProviderPodNumber: jumlah instance komponen.
-
ProtectedKinds: Tambahkan jenis resource yang sesuai dengan CRD yang ingin Anda lindungi.
Perlindungan penghapusan CRD memerlukan pemeriksaan apakah instance jenis resource tersebut ada di kluster. Mengikuti prinsip hak istimewa minimal, ack-policy-external-provider tidak memiliki izin kueri yang diperlukan secara default dan harus dikonfigurasi secara manual.
Atur ProviderPodNumber (jumlah replika, default:
1). Di bagian ProtectedKinds, masukkan nama jenis resource (sepertipods,policies, ataucustomresources). Klik Add untuk menambahkan beberapa entri, atau klik Delete untuk menghapus entri. Klik OK.
-
Definisi API dan parameter
ack-policy-external-provider mengimplementasikan Provider data eksternal Gatekeeper standar. Dalam template kebijakan Rego, Anda dapat mengirim permintaan kueri resource ke komponen ini dengan memanggil fungsi external_data dan menentukan provider: ack-policy-external-data-provider.
Parameter permintaan didefinisikan dalam format JSON. Berikut beberapa contohnya.
// Contoh 1
{
"action": "ListK8sResource",
"namespaced": false,
"group": "",
"version": "v1",
"resource": "persistentvolumeclaims"
"requestID": review.uid,
"userInfo": review.userInfo,
"requestFrom": "PVCProtector",
"labelSelector": "protected",
"limit": 1
}
// Contoh 2
{
"action": "GetK8sResource",
"namespaced": true,
"namespace": "default",
"group": "apps",
"version": "v1",
"resource": "deployments",
"requestID": review.uid,
"userInfo": review.userInfo,
"requestFrom": "FinOpsPolicy",
"labelSelector": "protected",
"limit": 1
}
Tabel berikut menjelaskan parameter inti.
|
Parameter |
Deskripsi |
Wajib |
|
|
Jenis operasi. Nilai yang didukung adalah |
Ya |
|
|
Grup API dari resource target. |
Ya |
|
|
Versi API dari resource target. |
Tidak |
|
|
Nama jamak dari resource target (seperti |
Ya |
|
|
Apakah resource target berada dalam namespace. Untuk resource cakupan kluster, gunakan
|
Ya |
|
|
Saat |
Tidak |
|
|
Saat |
Tidak |
|
|
Memfilter resource berdasarkan label, mengikuti sintaks pemilih label Kubernetes. |
Tidak |
|
|
Jumlah maksimum resource yang dikembalikan oleh |
Tidak |
|
|
ID unik permintaan. Kami menyarankan Anda menggunakan |
Tidak |
|
|
Informasi tentang pengguna yang menginisiasi permintaan. Kami menyarankan Anda menggunakan |
Tidak |
|
|
Identifikasi sumber permintaan, biasanya nama template kebijakan, digunakan untuk pelacakan log. |
Ya |
Contoh: Cegah penghapusan CRD
Contoh ini menunjukkan cara menggunakan ack-policy-external-provider untuk mengimplementasikan kebijakan lanjutan umum: melarang penghapusan CustomResourceDefinition (CRD) jika instance custom resource (CR) terkait masih ada.
Kebijakan ini merupakan aturan bawaan dan tidak memerlukan penerapan manual. Bagian ini hanya untuk tujuan demonstrasi.
-
Logika kebijakan
-
Kueri: Kebijakan Rego menggunakan
external_datauntuk memanggil ack-policy-external-provider. -
Periksa: Berdasarkan parameter permintaan, komponen ack-policy-external-provider melakukan kueri ke kluster untuk memeriksa apakah instance CR terkait ada.
-
Keputusan: Jika hasil kueri mengembalikan setidaknya satu instance CR, ack-policy-external-provider akan mengembalikan hasil tersebut ke kebijakan Rego, dan kebijakan tersebut pada akhirnya akan
deny(menolak) operasi penghapusan ini.
-
-
Template kebijakan (ConstraintTemplate)
Menentukan logika kebijakan.
apiVersion: templates.gatekeeper.sh/v1beta1 kind: ConstraintTemplate metadata: name: blockcrddeletion annotations: meta.helm.sh/release-name: gatekeeper meta.helm.sh/release-namespace: kube-system metadata.gatekeeper.sh/version: 1.0.0 labels: app.kubernetes.io/managed-by: Helm spec: crd: spec: names: kind: BlockCrdDeletion validation: legacySchema: true targets: - target: admission.k8s.gatekeeper.sh rego: | package block_crd_deletion violation[{"msg": msg}] { before(input.review.operation) response := handle(input.review) msg := after(response) } before(operation) { operation == "DELETE" } handle(review) = response { customrequest := { "action": "ListK8sResource", "namespaced": false, "group": review.object.spec.group, "version": "", "resource": review.object.spec.names.plural, "requestID": review.uid, "userInfo": review.userInfo, "requestFrom": "BlockCrdDeletion", "labelSelector": "protected", "limit": 1 } request_keys := [json.marshal(customrequest)] response := external_data({ "provider": "ack-policy-external-data-provider", "keys": request_keys }) } after(response) = msg { count(response.responses[0]) > 0 msg := sprintf( "The CRD %v is not allowed to be deleted. Reason: It is not allowed to delete a CRD object when it contains a collection of custom resources. Current existing custom resources: %v, etc.", [input.review.name, response.responses[0][0]] ) } -
Instance kebijakan (Constraint)
Menerapkan template ke resource tertentu. Contoh ini menerapkan kebijakan ke semua CRD.
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: BlockCrdDeletion metadata: name: block-crd-deletion-rule spec: enforcementAction: deny match: kinds: - apiGroups: - '*' kinds: - CustomResourceDefinition -
Verifikasi hasil
-
Buat CRD uji dan instance CR terkait.
# Buat CRD apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: simplestthings.example.com spec: group: example.com scope: Namespaced names: plural: simplestthings singular: simplestthing kind: SimplestThing versions: - name: v1 served: true storage: true schema: openAPIV3Schema: type: object properties: spec: type: object properties: message: type: string --- # Buat instance CR apiVersion: example.com/v1 kind: SimplestThing metadata: name: my-simple-thing namespace: default labels: protected: "false" spec: message: "Hello" -
Coba hapus CRD.
kubectl delete crd simplestthings.example.com -
Verifikasi bahwa kebijakan memblokir penghapusan dan mengembalikan pesan error yang jelas.
Output yang diharapkan:
Error from server (Forbidden): admission webhook "delete.validation.gatekeeper.sh" denied the request: [block-crd-deletion-rule] The CRD simplestthings.example.com is not allowed to be deleted. Reason: It is not allowed to delete a CRD object when it contains a collection of custom resources. Current existing custom resources: my-simple-thing, etc.
-
Topik terkait
Fitur inspeksi memungkinkan Anda memindai risiko keamanan dalam konfigurasi workload. Untuk informasi selengkapnya, lihat Konfigurasikan inspeksi untuk memeriksa workload kluster.