Audit kluster memungkinkan administrator meninjau log audit server API untuk melacak riwayat operasi, menyelidiki insiden keamanan, dan mempermudah kepatuhan. Topik ini menjelaskan cara mengaktifkan audit kluster, melihat laporan bawaan, melakukan kueri terhadap data log mentah, serta mengonfigurasi peringatan.
Batasan
Topik ini berlaku untuk kluster ACK yang dikelola, kluster khusus ACK, dan kluster ACK Serverless.
Untuk kluster terdaftar, lihat Gunakan audit kluster.
Penagihan
Penyimpanan log audit ditagih berdasarkan model Pay-by-feature. Untuk melihat tagihan Anda, lihat Lihat tagihan Anda dan Pay-by-feature.
Langkah 1: Aktifkan audit kluster
Secara default, Enable Log Service dipilih secara otomatis saat Anda membuat kluster. Jika audit kluster dinonaktifkan pada kluster yang sudah ada, ikuti langkah-langkah berikut untuk mengaktifkannya.
Login ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Pada halaman Clusters, temukan kluster target dan klik namanya. Di panel sebelah kiri, pilih Security > Cluster Auditing.
Jika audit kluster belum diaktifkan, ikuti petunjuk di layar untuk memilih proyek Simple Log Service (SLS) dan aktifkan fitur tersebut.
Pastikan kuota SLS berikut dalam Akun Alibaba Cloud Anda mencukupi sebelum mengaktifkan audit kluster. Kuota yang tidak mencukupi akan menyebabkan operasi pengaktifan gagal.
Kuota proyek SLS
Kuota Logstore di setiap proyek SLS
Kuota dashboard di setiap proyek SLS
Untuk memeriksa atau menyesuaikan kuota, lihat Sesuaikan kuota sumber daya.
Langkah 2: Lihat laporan log audit
Jangan mengubah laporan log audit bawaan. Untuk membuat laporan kustom, login ke Konsol Simple Log Service dan buat laporan baru di sana.
Jangan mengubah laporan log audit bawaan. Jika Anda ingin membuat laporan log audit kustom, buka Konsol Simple Log Service untuk membuat laporan baru.
ACK menyediakan empat laporan log audit bawaan. Pada halaman Cluster Auditing, filter event berdasarkan namespace atau RAM user untuk menjelajahi laporan berikut.
Anda juga dapat mengklik ikon
di pojok kanan atas grafik apa pun untuk melihatnya dalam mode layar penuh atau melihat pratinjau pernyataan kueri.
Overview
Menampilkan semua event di kluster ACK saat ini, dengan informasi detail untuk event yang menarik perhatian: operasi RAM user, akses Internet, eksekusi perintah, penghapusan resource, akses Secret, serta kerentanan Common Vulnerabilities and Exposures (CVE) Kubernetes.
Operations overview
Menyediakan statistik untuk operasi create, update, delete, dan access di kategori resource berikut:
Computing resources: Deployment, StatefulSet, CronJob, DaemonSet, Job, Pod
Network resources: Service, Ingress
Storage resources: ConfigMap, Secret, PersistentVolumeClaim
Access control resources: Role, ClusterRole, RoleBinding, ClusterRoleBinding

Operation details
Menampilkan rincian berdasarkan jenis resource: jumlah total operasi, distribusi namespace, tingkat keberhasilan operasi, dan tren dari waktu ke waktu. Pilih atau masukkan jenis resource untuk melakukan kueri secara real time.

Untuk melakukan kueri terhadap operasi pada resource CustomResourceDefinition (CRD) atau resource apa pun yang tidak tercantum secara default, masukkan bentuk jamak dari nama resource tersebut. Misalnya, masukkan AliyunLogConfigs untuk melakukan kueri terhadap CRD AliyunLogConfig.CVE vulnerabilities
Menampilkan kerentanan CVE Kubernetes yang terdeteksi di kluster saat ini. Masukkan ID RAM user untuk memfilter hasil berdasarkan pengguna. Untuk detail CVE dan perbaikannya, lihat [CVE Securities] Perbaikan kerentanan CVE.
(Opsional) Langkah 3: Lihat data log detail
Untuk kueri kustom atau analisis lebih mendalam, lihat data log audit mentah langsung di konsol SLS.
Periode retensi log audit default berbeda-beda tergantung jenis kluster:
Kluster ACK yang dikelola: 30 hari
Kluster khusus ACK: 365 hari
Untuk mengubah periode retensi, lihat Kelola logstore.
Login ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Pada halaman Clusters, temukan kluster target dan klik namanya. Di panel sebelah kiri, klik Cluster Information.
Pada tab Basic Information, klik ID proyek di samping Log Service Project. Di daftar penyimpanan log, klik penyimpanan log bernama audit-${clusterId}.
PentingIndeks telah dikonfigurasi sebelumnya untuk Logstore ini. Jangan mengubah indeks — tindakan tersebut akan mencegah pembuatan laporan.
Masukkan pernyataan kueri, atur rentang waktu (misalnya, 15 menit), lalu klik Search & Analysis.
Pola kueri umum:
Berdasarkan RAM user: Masukkan ID RAM user, lalu klik Search & Analysis.
Berdasarkan resource: Masukkan nama resource komputasi, jaringan, penyimpanan, atau kontrol akses, lalu klik Search & Analysis.
Kecualikan komponen sistem: Masukkan pernyataan berikut untuk memfilter komponen internal Kubernetes:
NOT user.username: node NOT user.username: serviceaccount NOT user.username: apiserver NOT user.username: kube-scheduler NOT user.username: kube-controller-manager
Untuk sintaks kueri, lihat Metode kueri.
(Opsional) Langkah 4: Konfigurasi peringatan
SLS dapat menghasilkan peringatan real-time ketika operasi tertentu terjadi. Saluran notifikasi yang didukung mencakup chatbot DingTalk, webhook kustom, dan Pusat Pesan Alibaba Cloud. Untuk petunjuk penyiapan, lihat Konfigurasi aturan peringatan di Simple Log Service.
Contoh 1: Peringatan saat eksekusi perintah di kontainer
Memicu peringatan setiap kali pengguna menjalankan perintah di dalam kontainer. Peringatan tersebut mencakup nama kontainer, perintah, pengguna, ID event, stempel waktu, dan alamat IP sumber.
Pernyataan kueri contoh:
verb : create and objectRef.subresource:exec and stage: ResponseStarted | SELECT auditID as "Event ID", date_format(from_unixtime(__time__), '%Y-%m-%d %T' ) as "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 "User account",
CASE WHEN json_array_length(sourceIPs) = 1 then json_format(json_array_get(sourceIPs, 0)) ELSE sourceIPs END
as "Source IP address" order by "Time" desc limit 10000Ekspresi kondisi: Event =~ ".*"
Contoh 2: Peringatan saat kegagalan akses Internet
Memantau kluster yang memiliki akses Internet diaktifkan. Memicu peringatan ketika jumlah upaya akses Internet mencapai 10 dan tingkat kegagalannya melebihi 50%. Peringatan tersebut mencakup wilayah alamat IP sumber, alamat IP sumber, jumlah akses, tingkat kegagalan, dan apakah IP tersebut ditandai sebagai berisiko.
Pernyataan kueri contoh:
* | select ip as "Source IP address", total as "Number of times of Internet access", round(rate * 100, 2) as "Failure rate in percentage", failCount as "Number of times of illegal access", CASE when security_check_ip(ip) = 1 then 'yes' else 'no' end as "Whether the IP address is risky", ip_to_country(ip) as "Country", ip_to_province(ip) as "Province", ip_to_city(ip) as "City", ip_to_provider(ip) as "ISP" 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 '%,%' ORDER by "Number of times of Internet access" desc limit 10000Ekspresi kondisi: Source IP address =~ ".*"
Langkah selanjutnya
Ubah proyek SLS
Untuk memigrasi log audit ke proyek SLS yang berbeda:
Login ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Pada halaman Clusters, temukan kluster target dan klik namanya. Di panel sebelah kiri, pilih Security > Cluster Auditing.
Di pojok kanan atas, klik Change Log Service Project.
Nonaktifkan audit kluster
Login ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Pada halaman Clusters, temukan kluster target dan klik namanya. Di panel sebelah kiri, pilih Security > Cluster Auditing.
Di pojok kanan atas, klik Disable Cluster Auditing.
Gunakan layanan log pihak ketiga (hanya untuk kluster khusus ACK)
Untuk menggunakan layanan log pihak ketiga alih-alih SLS, lewati pemilihan SLS saat pembuatan kluster, lalu integrasikan layanan log pilihan Anda untuk mengumpulkan log audit dari node master. File log audit disimpan di /var/log/kubernetes/kubernetes.audit dalam format JSON.
Konfigurasi audit untuk kluster khusus ACK
Konfigurasi yang dijelaskan dalam bagian ini memodifikasi parameter startup kube-apiserver dan hanya berlaku untuk kluster khusus ACK. Kluster ACK yang dikelola dan kluster ACK Serverless memiliki lapisan kontrol yang dikelola oleh ACK dan tidak mendukung modifikasi manual.
Saat Anda membuat kluster khusus ACK, Enable Log Service dipilih secara default untuk mengaktifkan audit kluster. Data event dikumpulkan sesuai kebijakan audit dan ditulis ke backend audit.
Kebijakan audit
Kebijakan audit menentukan event mana yang dikumpulkan dan tingkat detailnya. Tabel berikut menjelaskan empat level audit dan data yang dikumpulkan masing-masing level.
| Audit level | Apa yang dikumpulkan | Event khas |
|---|---|---|
| None | Tidak ada — event yang cocok tidak dicatat | Permintaan watch kube-proxy, permintaan GET kubelet ke node, URL pemeriksaan kesehatan (/healthz\*, /version, /swagger\*), event Kubernetes |
| Metadata | Hanya metadata permintaan: info pengguna, stempel waktu, jenis resource. Tidak ada badan permintaan atau respons | Akses Secret, pembacaan ConfigMap, permintaan API TokenReview |
| Request | Metadata dan badan permintaan. Tidak ada badan respons. Tidak berlaku untuk permintaan non-resource | Operasi GET, list, dan watch pada grup API inti (menghindari pengumpulan badan respons besar) |
| RequestResponse | Metadata, badan permintaan, dan badan respons. Tidak berlaku untuk permintaan non-resource | Operasi write pada grup API inti: autentikasi, RBAC, sertifikat, autoscaling, API penyimpanan |
File kebijakan audit disimpan di /etc/kubernetes/audit-policy.yml pada node master. Atur flag --audit-policy-file untuk memuatnya sebagai konfigurasi boot server API.
Kebijakan default menerapkan aturan berikut:
None untuk permintaan frekuensi tinggi dan risiko rendah: permintaan watch kube-proxy, permintaan GET kubelet dan
system:nodeske node, operasi endpoint oleh komponen Kubernetes dikube-system, permintaan GET server API ke namespace, URL health/version/swagger, dan event.Metadata untuk resource sensitif: Secret, ConfigMap, dan permintaan API TokenReview.
Request untuk operasi GET, list, dan watch di semua grup API Kubernetes inti (untuk menghindari pengumpulan badan respons besar).
RequestResponse untuk semua operasi write lainnya di grup API yang sama.
Metadata sebagai fallback untuk permintaan lainnya.
Log dihasilkan setelah header respons dikirim, bukan saat permintaan diterima. Pengaturan omitStages: [RequestReceived] dalam kebijakan mencerminkan perilaku ini.apiVersion: audit.k8s.io/v1 # Wajib. Tetapkan ke audit.k8s.io/v1 jika versi Kubernetes kluster adalah 1.24 atau lebih baru, dan tetapkan ke audit.k8s.io/v1beta1 jika versi Kubernetes kluster lebih lama dari 1.24.
kind: Policy
# Tidak perlu menghasilkan event audit pada tahap RequestReceived.
omitStages:
- "RequestReceived"
rules:
# Jenis permintaan berikut sering terjadi dan risikonya rendah. Disarankan menetapkan aturan ke None untuk melewati permintaan ini.
- level: None
users: ["system:kube-proxy"]
verbs: ["watch"]
resources:
- group: "" # core
resources: ["endpoints", "services"]
- level: None
users: ["system:unsecured"]
namespaces: ["kube-system"]
verbs: ["get"]
resources:
- group: "" # core
resources: ["configmaps"]
- level: None
users: ["kubelet"] # identitas kubelet lama
verbs: ["get"]
resources:
- group: "" # core
resources: ["nodes"]
- level: None
userGroups: ["system:nodes"]
verbs: ["get"]
resources:
- group: "" # core
resources: ["nodes"]
- level: None
users:
- system:kube-controller-manager
- system:kube-scheduler
- system:serviceaccount:kube-system:endpoint-controller
verbs: ["get", "update"]
namespaces: ["kube-system"]
resources:
- group: "" # core
resources: ["endpoints"]
- level: None
users: ["system:apiserver"]
verbs: ["get"]
resources:
- group: "" # core
resources: ["namespaces"]
# Tetapkan aturan ke None untuk URL read-only, seperti /healthz*, /version*, dan /swagger*.
- level: None
nonResourceURLs:
- /healthz*
- /version
- /swagger*
# Tetapkan aturan ke None untuk event.
- level: None
resources:
- group: "" # core
resources: ["events"]
# Tetapkan aturan ke Metadata untuk Secret, ConfigMap, dan permintaan API TokenReview yang mungkin berisi informasi sensitif atau file biner.
- level: Metadata
resources:
- group: "" # core
resources: ["secrets", "configmaps"]
- group: authentication.k8s.io
resources: ["tokenreviews"]
# Respons mungkin berisi data dalam jumlah besar. Tetapkan aturan ke Request agar badan respons tidak dikumpulkan.
- level: Request
verbs: ["get", "list", "watch"]
resources:
- group: "" # core
- group: "admissionregistration.k8s.io"
- group: "apps"
- group: "authentication.k8s.io"
- group: "authorization.k8s.io"
- group: "autoscaling"
- group: "batch"
- group: "certificates.k8s.io"
- group: "extensions"
- group: "networking.k8s.io"
- group: "policy"
- group: "rbac.authorization.k8s.io"
- group: "settings.k8s.io"
- group: "storage.k8s.io"
# Aturan ditetapkan ke RequestResponse secara default untuk permintaan API Kubernetes yang dikenal guna mengumpulkan badan permintaan dan respons.
- level: RequestResponse
resources:
- group: "" # core
- group: "admissionregistration.k8s.io"
- group: "apps"
- group: "authentication.k8s.io"
- group: "authorization.k8s.io"
- group: "autoscaling"
- group: "batch"
- group: "certificates.k8s.io"
- group: "extensions"
- group: "networking.k8s.io"
- group: "policy"
- group: "rbac.authorization.k8s.io"
- group: "settings.k8s.io"
- group: "storage.k8s.io"
# Aturan ditetapkan ke Metadata secara default untuk permintaan lainnya.
- level: MetadataBackend audit
Event audit yang dikumpulkan ditulis ke file log JSON pada sistem file node master. Konfigurasikan flag berikut dalam konfigurasi boot server API (/etc/kubernetes/manifests/kube-apiserver.yaml).
| Flag | Nilai default | Deskripsi |
|---|---|---|
--audit-log-maxbackup | 10 | Jumlah maksimum shard log audit yang diputar ulang yang disimpan |
--audit-log-maxsize | 100 (MB) | Ukuran maksimum file log audit tunggal sebelum rotasi |
--audit-log-path | /var/log/kubernetes/kubernetes.audit | Jalur output untuk file log audit |
--audit-log-maxage | 7 (hari) | Jumlah hari penyimpanan file log audit yang diputar ulang |
--audit-policy-file | /etc/kubernetes/audit-policy.yml | Jalur ke file kebijakan audit |
Referensi
Aktifkan audit kontainer — audit eksekusi perintah
kubectl execdi dalam kontainerPraktik keamanan terbaik — panduan O&M keamanan untuk insinyur enterprise