Audit di server API mencatat permintaan ke API Kubernetes dan hasilnya. Alibaba Cloud Container Service for Kubernetes (ACK) menyediakan log audit server API yang membantu administrator kluster menentukan siapa yang melakukan operasi apa pada sumber daya tertentu dan kapan. Log ini dapat digunakan untuk melacak sejarah operasi kluster serta memecahkan masalah, mengurangi beban kerja operasi dan pemeliharaan (O&M) keamanan kluster.
Langkah 1: Aktifkan fitur audit API Server untuk kluster
Saat membuat kluster ACK, opsi Use Log Service dipilih secara default untuk mengaktifkan fitur audit API Server. Jika fitur ini tidak diaktifkan, ikuti langkah-langkah berikut untuk mengaktifkannya.
Masuk ke Konsol ACS. Di panel navigasi di sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik ID-nya. Di panel navigasi di sebelah kiri halaman detail kluster, pilih Security > Cluster Auditing.
Jika logging kluster atau audit kluster belum diaktifkan, ikuti petunjuk di layar untuk memilih proyek Simple Log Service (SLS) dan mengaktifkan fitur tersebut.
Pastikan kuota sumber daya SLS di akun Anda tidak terlampaui. Jika tidak, Anda tidak dapat mengaktifkan fitur audit kluster.
Kuota jumlah proyek SLS.
Kuota jumlah Logstore per proyek SLS.
Kuota jumlah dasbor per proyek SLS.
Untuk informasi lebih lanjut tentang kuota SLS dan cara menyesuaikannya, lihat Sesuaikan kuota sumber daya.
Langkah 2: Lihat laporan audit
Jangan modifikasi laporan audit. Untuk menyesuaikan laporan audit, Anda dapat membuat laporan baru di Konsol Layanan Log Sederhana.
Kluster ACK memiliki empat laporan log audit bawaan: Ikhtisar Pusat Audit, Ikhtisar Operasi Sumber Daya, Rincian Operasi Sumber Daya, dan Risiko Keamanan CVE Kubernetes. Di halaman Cluster Audit, Anda dapat memilih dimensi seperti namespace dan Pengguna Resource Access Management (RAM) untuk memfilter peristiwa audit dan mendapatkan informasi berikut dari laporan.
Setelah mendapatkan hasilnya, Anda dapat mengklik ikon
di sudut kanan atas area tertentu untuk melakukan lebih banyak operasi, seperti melihat grafik dalam mode layar penuh atau melihat pratinjau pernyataan kueri untuk area tersebut.
Ikhtisar Pusat Audit
Laporan Ikhtisar Pusat Audit menampilkan gambaran umum peristiwa di kluster ACK dan memberikan rincian tentang peristiwa penting, termasuk operasi pengguna RAM, akses jaringan publik, eksekusi perintah, penghapusan sumber daya, akses ke rahasia, dan risiko keamanan CVE Kubernetes.
Ikhtisar Operasi Sumber Daya
Laporan Ikhtisar Operasi Sumber Daya menampilkan statistik tentang operasi pada sumber daya komputasi, jaringan, dan penyimpanan umum di kluster ACK, termasuk pembuatan, pembaruan, penghapusan, dan akses. Sumber daya meliputi:
Sumber daya komputasi: Deployment, StatefulSet, Job, CronJob, Pod, dan DaemonSet.
Sumber daya jaringan: Layanan dan Ingress.
Sumber daya penyimpanan: ConfigMap, rahasia, dan PersistentVolumeClaim.
Sumber daya kontrol akses: Roles, ClusterRoles, RoleBindings, dan ClusterRoleBindings.
Rincian Operasi Sumber Daya
Laporan ini menampilkan daftar rinci operasi pada jenis sumber daya tertentu di kluster ACK. Anda harus memilih atau memasukkan jenis sumber daya untuk menjalankan kueri waktu nyata. Laporan tersebut menunjukkan jumlah total peristiwa untuk setiap jenis operasi sumber daya, distribusi namespace, tingkat keberhasilan, tren deret waktu, dan daftar rinci operasi.
Untuk melihat operasi terkait sumber daya CustomResourceDefinition (CRD) yang terdaftar di Kubernetes atau sumber daya lain yang tidak terdaftar, Anda dapat memasukkan bentuk jamak dari nama sumber daya. Misalnya, jika sumber daya CRD adalah AliyunLogConfig, masukkan AliyunLogConfigs.
Risiko Keamanan CVE Kubernetes
Laporan ini menampilkan potensi risiko keamanan CVE Kubernetes di kluster. Anda dapat memilih atau memasukkan ID sub-akun, yaitu ID pengguna RAM, untuk menjalankan kueri waktu nyata. Laporan kemudian menampilkan risiko keamanan CVE Kubernetes untuk akun yang ditentukan. Untuk informasi lebih lanjut tentang detail CVE dan solusi, lihat [CVE Security] Pengumuman Perbaikan Kerentanan.
(Opsional) Langkah 3: Lihat catatan log rinci
Untuk menjalankan kueri kustom atau menganalisis log audit, Anda dapat pergi ke Konsol Layanan Log Sederhana untuk melihat catatan log rinci.
Secara default, data di Logstore yang sesuai dengan log audit server API kluster ACK disimpan selama 30 hari. Untuk mengubah periode retensi, lihat Kelola Logstore.
Masuk ke Konsol ACS. Di panel navigasi di sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi di sebelah kiri halaman detail kluster, klik Cluster Information.
Klik tab Basic Information. Di bagian Cluster Resources, klik ID proyek di sebelah Log Service Project. Kemudian, di daftar proyek, klik Logstore bernama audit-${clusterid}.
Selama pembuatan kluster, Logstore bernama
audit-${clusterid}dibuat secara otomatis di proyek SLS yang ditentukan.PentingIndeks dikonfigurasikan untuk Logstore audit secara default. Jangan ubah indeks. Jika tidak, laporan mungkin menjadi tidak valid.
Masukkan pernyataan kueri di kotak pencarian, tentukan rentang waktu untuk kueri, seperti 15 menit terakhir, dan klik Query/Analysis untuk melihat hasilnya.
Berikut adalah cara umum untuk mencari log audit:
Untuk mengkueri catatan operasi pengguna RAM, masukkan ID pengguna RAM dan klik Query/Analysis.
Untuk mengkueri operasi pada sumber daya, masukkan nama sumber daya komputasi, jaringan, penyimpanan, atau kontrol akses di kluster dan klik Query/Analysis.
Untuk menyaring operasi komponen sistem, masukkan
NOT user.username: node NOT user.username: serviceaccount NOT user.username: apiserver NOT user.username: kube-scheduler NOT user.username: kube-controller-managerdan klik Query/Analysis.
Untuk informasi lebih lanjut tentang metode kueri dan statistik, lihat Metode kueri dan analisis untuk Layanan Log Sederhana.
(Opsional) Langkah 4: Konfigurasikan peringatan
Jika Anda memerlukan peringatan waktu nyata untuk operasi pada sumber daya tertentu, Anda dapat menggunakan fitur peringatan dari Layanan Log Sederhana. Metode notifikasi yang didukung meliputi DingTalk chatbot, webhook kustom, dan Pusat Notifikasi. Untuk informasi lebih lanjut, lihat Atur peringatan berbasis log dengan cepat.
Contoh 1: Peringatan pada eksekusi perintah di kontainer
Sebuah perusahaan memiliki batasan ketat pada penggunaan kluster Kubernetes-nya dan melarang pengguna untuk masuk ke kontainer atau menjalankan perintah di dalamnya. Jika pengguna menjalankan perintah, peringatan harus dikirim segera. Informasi peringatan harus mencakup kontainer yang diakses oleh pengguna, perintah yang dijalankan, operator, ID peristiwa, waktu, dan alamat IP sumber.
Pernyataan kueri:
verb : create and objectRef.subresource:exec and stage: ResponseStarted | SELECT auditID as "Event ID", date_format(from_unixtime(__time__), '%Y-%m-%d %T' ) as "Operation Time", regexp_extract("requestURI", '([^\?]*)/exec\?.*', 1)as "Resource", regexp_extract("requestURI", '\?(.*)', 1)as "Command" ,"responseStatus.code" as "Status Code", CASE WHEN "user.username" != 'kubernetes-admin' then "user.username" WHEN "user.username" = 'kubernetes-admin' and regexp_like("annotations.authorization.k8s.io/reason", 'RoleBinding') then regexp_extract("annotations.authorization.k8s.io/reason", ' to User "(\w+)"', 1) ELSE 'kubernetes-admin' END as "Operator Account", CASE WHEN json_array_length(sourceIPs) = 1 then json_format(json_array_get(sourceIPs, 0)) ELSE sourceIPs END as "Source Address" order by "Operation Time" desc limit 10000Ekspresi kondisional:
Operation Event =~ ".*".
Contoh 2: Peringatan pada akses jaringan publik gagal ke server API
Sebuah kluster telah mengaktifkan akses jaringan publik. Untuk mencegah serangan jahat, Anda harus memantau jumlah percobaan akses dan tingkat kegagalan. Saat jumlah percobaan akses mencapai ambang tertentu, seperti 10, dan tingkat kegagalan lebih tinggi dari ambang tertentu, seperti 50%, peringatan harus dikirim segera. Informasi peringatan harus mencakup wilayah alamat IP pengguna, alamat IP sumber, dan apakah alamat IP tersebut berisiko tinggi.
Pernyataan kueri:
* | select ip as "Source Address", total as "Access Count", round(rate * 100, 2) as "Failure Rate %", failCount as "Illegal Access Count", CASE when security_check_ip(ip) = 1 then 'yes' else 'no' end as "Is High-Risk IP", ip_to_country(ip) as "Country", ip_to_province(ip) as "Province", ip_to_city(ip) as "City", ip_to_provider(ip) as "Carrier" from (select CASE WHEN json_array_length(sourceIPs) = 1 then json_format(json_array_get(sourceIPs, 0)) ELSE sourceIPs END as ip, count(1) as total, sum(CASE WHEN "responseStatus.code" < 400 then 0 ELSE 1 END) * 1.0 / count(1) as rate, count_if("responseStatus.code" = 403) as failCount from log group by ip limit 10000) where ip_to_domain(ip) != 'intranet' and ip not LIKE '%,%' and not try(is_subnet_of('<Your subnet IP address>')) ORDER by "Access Count" desc limit 10000Ekspresi kondisional:
Source Address =~ ".*".
Operasi terkait
Log Perubahan Proyek
Untuk memigrasikan data log audit server API kluster ke proyek SLS lain, Anda dapat menggunakan fitur Change SLS Project.
Masuk ke Konsol ACS. Di panel navigasi di sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik ID-nya. Di panel navigasi di sebelah kiri halaman detail kluster, pilih Security > Cluster Auditing.
Di sudut kanan atas halaman Audit Kluster, klik Change Log Service Project untuk memigrasikan data log audit kluster ke proyek SLS yang berbeda.
Nonaktifkan fitur audit API Server untuk kluster
Jika Anda tidak lagi memerlukan fitur audit API Server, Anda dapat menonaktifkannya.
Masuk ke Konsol ACS. Di panel navigasi di sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik ID-nya. Di panel navigasi di sebelah kiri halaman detail kluster, pilih Security > Cluster Auditing.
Di sudut kanan atas halaman Cluster Audit, klik Disable Cluster Audit untuk menonaktifkan fitur audit untuk kluster.
Di kluster ACS: Gunakan solusi logging pihak ketiga
Kami merekomendasikan Anda menggunakan Alibaba Cloud Simple Log Service (SLS) untuk mencatat log audit kluster ACK. Namun, jika Anda ingin menggunakan layanan logging pihak ketiga, Anda dapat memilih untuk tidak menggunakan SLS saat membuat kluster. Anda kemudian dapat menghubungkan ke solusi logging lain untuk mengumpulkan dan mengambil log audit.
Referensi: Pengenalan konfigurasi audit API Server untuk kluster ACK
Saat Anda membuat kluster ACK dan mengonfigurasi komponennya, opsi Use Log Service dipilih secara default di konsol. Ini mengaktifkan fitur audit API Server, yang mengumpulkan data peristiwa berdasarkan kebijakan audit dan menulis data ke backend.
Kebijakan audit
Kebijakan audit mendefinisikan konfigurasi fitur audit dan aturan untuk mengumpulkan permintaan. Aturan untuk mengumpulkan log peristiwa bervariasi berdasarkan tingkat audit. Tingkat audit berikut tersedia.
Tingkat Audit | Aturan pengumpulan log |
Tidak ada | Peristiwa yang cocok dengan aturan tidak dikumpulkan. |
Metadata | Mengumpulkan metadata permintaan, seperti informasi pengguna dan cap waktu, tetapi tidak mengumpulkan badan permintaan atau respons. |
Permintaan | Mengumpulkan metadata dan badan permintaan, tetapi tidak mengumpulkan badan respons. Ini tidak berlaku untuk permintaan non-sumber daya. |
RequestResponse | Mengumpulkan metadata, badan permintaan, dan badan respons. Ini tidak berlaku untuk permintaan non-sumber daya. |
Anda dapat menggunakan flag baris perintah --audit-policy-file untuk menyimpan file YAML sampel berikut sebagai parameter startup untuk server API. Blok kode berikut menunjukkan file YAML sampel untuk kebijakan konfigurasi log audit.
Log tidak dicatat segera setelah permintaan diterima. Pencatatan dimulai hanya setelah header respons dikirim.
Sistem tidak mengaudit permintaan watch kube-proxy yang berlebihan, permintaan GET untuk node dari kubelet dan system:nodes, operasi endpoint yang dilakukan oleh komponen kube di namespace kube-system, atau permintaan GET untuk namespace dari server API.
Untuk antarmuka sensitif seperti authentication, rbac, certificates, autoscaling, dan storage, sistem mencatat badan permintaan dan respons yang sesuai berdasarkan operasi baca dan tulis.
Backend audit
Setelah peristiwa audit dikumpulkan, mereka disimpan di file sistem backend log. File log berada dalam format JSON standar.