Aktifkan, kueri, dan konfigurasikan peringatan untuk log audit server API guna memenuhi kebutuhan kepatuhan dan keamanan.
Audit kluster mencatat permintaan dan respons server API, sehingga memungkinkan Anda melacak riwayat operasi serta menyelidiki anomali.
Berlaku untuk kluster ACK yang dikelola, kluster khusus ACK, dan kluster ACK Serverless.
Untuk kluster terdaftar, lihat Gunakan audit kluster.
Penagihan
Data log audit menggunakan penagihan berbasis fitur. Lihat Lihat tagihan Anda dan Penagihan berbasis fitur.
Mengaktifkan audit kluster menimbulkan biaya Simple Log Service (SLS). Pantau volume log Anda dan atur periode retensi sesuai kebutuhan kepatuhan Anda. Periode retensi default adalah 30 hari untuk kluster ACK yang dikelola dan 365 hari untuk kluster khusus ACK.
Prasyarat
Pastikan kuota SLS berikut dalam Akun Alibaba Cloud Anda mencukupi:
Kuota proyek SLS
Kuota Logstore per proyek SLS
Kuota Dashboard per proyek SLS
Lihat Sesuaikan kuota sumber daya untuk detail kuota dan permintaan peningkatan.
Aktifkan audit kluster
Secara default, Enable Log Service dipilih saat pembuatan kluster. Jika Anda menonaktifkannya, ikuti langkah-langkah berikut untuk mengaktifkannya kembali.
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, klik nama kluster. Di panel sebelah kiri, pilih Security > Cluster Auditing.
Pilih proyek SLS dan aktifkan audit kluster.
ACK secara otomatis membuat Logstore bernama audit-${clustereid} dalam proyek tersebut.
Jangan ubah indeks default. Mengubahnya mencegah laporan audit dihasilkan dengan benar.
Lihat laporan log audit
ACK menyediakan empat laporan log audit bawaan. Filter berdasarkan namespace atau Pengguna RAM di halaman Cluster Auditing.
Jangan ubah laporan log audit bawaan. Buat laporan kustom di Konsol SLS sebagai gantinya.
Klik ikon
pada grafik apa pun untuk melihatnya dalam mode layar penuh atau pratinjau pernyataan kuerinya.
Ikhtisar
Menampilkan semua event kluster dan detail event prioritas tinggi, termasuk operasi Pengguna RAM, akses Internet, eksekusi perintah, penghapusan resource, akses Secret, dan kerentanan CVE.
Ikhtisar operasi
Memberikan statistik operasi create, update, delete, dan read pada:
Resource komputasi: Deployment, StatefulSet, CronJob, DaemonSet, Job, dan Pod
Resource jaringan: Service dan Ingress
Resource penyimpanan: ConfigMap, Secret, dan PersistentVolumeClaim (PVC)
Resource kontrol akses: Role, ClusterRole, RoleBinding, dan ClusterRoleBinding

Detail operasi
Menampilkan operasi untuk jenis resource tertentu. Pilih jenis resource untuk dikueri. Laporan ini menampilkan jumlah total, distribusi namespace, laju keberhasilan, dan tren dari waktu ke waktu.
Untuk mengkueri resource CRD atau resource yang tidak tercantum, masukkan nama plural resource tersebut. Misalnya, untuk mengkueriAliyunLogConfig, masukkanAliyunLogConfigs.
Kerentanan CVE
Menampilkan kerentanan CVE Kubernetes. Filter berdasarkan ID Pengguna RAM. Lihat [Keamanan CVE] Perbaikan kerentanan CVE untuk remediasi.
Kueri data log detail
Untuk kueri kustom dan analisis lebih mendalam, akses data log audit mentah di Konsol SLS.
Retensi default: 30 hari untuk kluster ACK yang dikelola, 365 hari untuk kluster khusus ACK. Lihat Kelola logstore untuk mengubah periode retensi.
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, klik nama kluster. Di panel sebelah kiri, klik Cluster Information.
Di tab Cluster Resources, klik ID proyek di samping Log Service Project. Di daftar Logstore, klik Logstore bernama audit-${clustereid}.
Masukkan pernyataan kueri, konfigurasikan rentang waktu kueri (misalnya, 15 menit terakhir), lalu klik Search & Analysis.
Pola kueri umum:
Berdasarkan Pengguna RAM: Masukkan ID Pengguna RAM.
Berdasarkan resource: Masukkan nama resource (Deployment, Service, ConfigMap, atau serupa).
Kecualikan komponen sistem: Filter noise komponen sistem:
NOT user.username: node NOT user.username: serviceaccount NOT user.username: apiserver NOT user.username: kube-scheduler NOT user.username: kube-controller-manager
Lihat Metode kueri untuk detail sintaksis.
Konfigurasikan peringatan
Atur aturan peringatan SLS untuk notifikasi real-time ketika operasi tertentu terjadi. Metode yang didukung meliputi chatbot DingTalk, webhook kustom, dan Pusat Pesan Alibaba Cloud.
Lihat Konfigurasikan aturan peringatan di SLS.
Contoh peringatan 1: Perintah dieksekusi di kontainer
Memberi peringatan ketika pengguna mengeksekusi perintah di kontainer. Setiap peringatan mencakup kontainer, perintah, pengguna, ID event, 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 peringatan 2: Gagal akses Internet dari server API
Memantau permintaan Internet arah keluar dari kluster Anda. Memicu peringatan ketika jumlah permintaan mencapai 10 dan laju kegagalan melebihi 50%.
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 '%,%' and not try(is_subnet_of('7.0.0.0/8', ip)) ORDER by "Number of times of Internet access" desc limit 10000Ekspresi kondisi: Source IP address =~ ".*"
Kelola pengaturan audit kluster
Ubah proyek SLS
Untuk memigrasi log audit ke proyek SLS berbeda:
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, klik nama kluster. Di panel sebelah kiri, pilih Security > Cluster Auditing.
Klik Change Log Service Project dan ikuti petunjuknya.
Nonaktifkan audit kluster
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster. Di panel sebelah kiri, pilih Security > Cluster Auditing.
Klik Disable Cluster Auditing.
Gunakan layanan log pihak ketiga (hanya untuk kluster khusus ACK)
SLS direkomendasikan sebagai penyimpanan log audit. Untuk menggunakan layanan log pihak ketiga, lewati SLS saat pembuatan kluster dan integrasikan layanan pihak ketiga tersebut. Log audit mentah tersedia di node master pada /var/log/kubernetes/kubernetes.audit dalam format JSON.
Kebijakan audit dan konfigurasi backend (kluster khusus ACK)
Untuk kluster khusus ACK, Enable Log Service dipilih secara default. Event audit dikumpulkan sesuai kebijakan audit dan ditulis ke sistem file log backend.
Kebijakan audit
Kebijakan audit menentukan event mana yang dikumpulkan dan pada tingkat detail apa. Empat tingkat audit:
Tingkat audit | Apa yang dikumpulkan |
None | Tidak ada. Event yang cocok dilewati. |
Metadata | Hanya metadata permintaan, seperti info pengguna dan stempel waktu. Tidak ada badan permintaan atau respons. |
Request | Metadata dan badan permintaan. Tidak ada badan respons. Permintaan non-resource dikecualikan. |
RequestResponse | Metadata permintaan, badan permintaan, dan badan respons. Permintaan non-resource dikecualikan. |
Kebijakan audit dimuat dari /etc/kubernetes/audit-policy.yml di node master (melalui flag --audit-policy-file). Kebijakan ACK default:
apiVersion: audit.k8s.io/v1 # Required. Set to audit.k8s.io/v1 if the Kubernetes version of the cluster is 1.24 or later and set to audit.k8s.io/v1beta1 if the Kubernetes version of the cluster is earlier than 1.24.
kind: Policy
# No need to generate audit events at the RequestReceived stage.
omitStages:
- "RequestReceived"
rules:
# The following types of requests are frequent and the risk of these requests is low. We recommend that you set the rule to None to skip these requests.
- 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"] # legacy kubelet identity
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"]
# Set the rule to None for read-only URLs, such as /healthz*, /version*, and /swagger*.
- level: None
nonResourceURLs:
- /healthz*
- /version
- /swagger*
# Set the rule to None for events.
- level: None
resources:
- group: "" # core
resources: ["events"]
# Set the rule to Metadata for Secrets, ConfigMaps, and TokenReview API requests that may contain sensitive information or binary files.
- level: Metadata
resources:
- group: "" # core
resources: ["secrets", "configmaps"]
- group: authentication.k8s.io
resources: ["tokenreviews"]
# Responses may contain large amounts of data. Set the rule to Request so that the response body is not collected.
- 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"
# The rule is set to RequestResponse by default for known Kubernetes API requests to collect the request and response bodies.
- 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"
# The rule is set to Metadata by default for other requests.
- level: MetadataPerilaku utama:
Log dihasilkan setelah header respons dikirim, bukan saat permintaan diterima.
Permintaan watch kube-proxy, permintaan GET kubelet dan
system:nodeske node, operasi endpoint kube-system, dan permintaan GET server API ke namespace dikecualikan.Operasi baca (
get,list,watch) untuk APIauthentication,rbac,certificates,autoscaling, danstoragedicatat pada tingkatRequest. Operasi tulis pada API tersebut dicatat padaRequestResponse.Secret dan ConfigMap hanya dicatat pada tingkat
Metadata, sehingga kontennya tidak pernah ditulis ke log audit.
Backend audit
Event audit ditulis sebagai file JSON ke sistem file lokal di node master. Konfigurasi server API di /etc/kubernetes/manifests/kube-apiserver.yaml mengontrol perilaku backend dengan flag-flag berikut:
Flag | Deskripsi | Default |
| Jumlah maksimum file log terotasi yang disimpan |
|
| Ukuran maksimum per file log sebelum rotasi |
|
| Jalur output untuk file log audit |
|
| Periode retensi untuk file log terotasi |
|
| Jalur ke file kebijakan audit |
|
Langkah selanjutnya
Lihat Aktifkan audit kontainer untuk mengaudit perintah
kubectl execdi kontainer.Lihat Praktik keamanan terbaik untuk keamanan enterprise.