All Products
Search
Document Center

Container Service for Kubernetes:Amankan operasi kluster dengan auditing server API

Last Updated:Jun 18, 2026

Aktifkan, kueri, dan konfigurasikan peringatan untuk log audit server API guna memenuhi kebutuhan kepatuhan dan keamanan.

Auditing 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 auditing kluster.

Penagihan

Data log audit menggunakan penagihan berbasis fitur. Lihat Lihat tagihan Anda dan Penagihan berbasis fitur.

Penting

Mengaktifkan auditing kluster menimbulkan biaya Layanan Log Sederhana (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 penyimpanan log per proyek SLS

  • Kuota dashboard per proyek SLS

Lihat Sesuaikan kuota sumber daya untuk detail kuota dan prosedur permintaan peningkatan.

Aktifkan auditing kluster

Secara default, Enable Log Service dipilih saat pembuatan kluster. Jika Anda menonaktifkannya, ikuti langkah-langkah berikut untuk mengaktifkannya kembali.

  1. Login ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, klik nama kluster. Di panel kiri, pilih Security > Cluster Auditing.

  3. Pilih proyek SLS dan aktifkan auditing kluster.

ACK secara otomatis membuat penyimpanan log bernama audit-${clustereid} di dalam proyek tersebut.

Penting

Jangan ubah indeks default. Mengubahnya mencegah laporan audit dibuat dengan benar.

Lihat laporan log audit

ACK menyediakan empat laporan log audit bawaan. Filter berdasarkan namespace atau Pengguna RAM di halaman Cluster Auditing.

Penting

Jangan ubah laporan log audit bawaan. Buat laporan kustom di Konsol SLS sebagai gantinya.

Jangan ubah laporan log audit bawaan. Buat laporan kustom di Konsol SLS sebagai gantinya.

Klik ikon image.png 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

Operations overview

Detail operasi

Menampilkan operasi untuk tipe resource tertentu. Pilih tipe resource untuk dikueri. Laporan ini menampilkan jumlah total, distribusi namespace, laju keberhasilan, dan tren dari waktu ke waktu.

Operation details
Untuk mengkueri resource CRD atau resource yang tidak tercantum, masukkan nama resource jamaknya. Misalnya, untuk mengkueri AliyunLogConfig, masukkan AliyunLogConfigs.

Kerentanan CVE

Menampilkan kerentanan CVE Kubernetes. Filter berdasarkan ID Pengguna RAM. Lihat \[CVE Securities\] 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 penyimpanan log untuk mengubah periode retensi.
  1. Login ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, klik nama kluster. Di panel kiri, klik Cluster Information.

  3. Pada tab Cluster Resources, klik ID Proyek di samping Log Service Project. Di daftar penyimpanan log, klik penyimpanan log audit-${clustereid}.

  4. Masukkan pernyataan kueri, misalnya, lalu klik Search & Analysis.

Pola kueri umum:

  • Berdasarkan Pengguna RAM: Masukkan ID Pengguna RAM.

  • Berdasarkan resource: Masukkan nama resource (Deployment, Service, ConfigMap, atau yang serupa).

  • Kecualikan komponen sistem: Filter kebisingan dari 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 mencakup chatbot DingTalk, webhook kustom, dan Pusat Pesan Alibaba Cloud.

Lihat Konfigurasikan aturan peringatan di SLS.

Contoh peringatan 1: Perintah dieksekusi di kontainer

Memberikan 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 10000

Ekspresi 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 10000

Ekspresi kondisi: Source IP address =~ ".*"

Kelola pengaturan auditing kluster

Ubah proyek SLS

Untuk memigrasi log audit ke proyek SLS berbeda:

  1. Login ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, klik nama kluster. Di panel kiri, pilih Security > Cluster Auditing.

  3. Klik Change Log Service Project dan ikuti petunjuknya.

Nonaktifkan auditing kluster

  1. Login ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, klik nama kluster. Di panel kiri, pilih Security > Cluster Auditing.

  3. 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.

Konfigurasi kebijakan dan backend audit (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. Terdapat 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: Metadata

Perilaku utama:

  • Log dihasilkan setelah header respons dikirim, bukan saat permintaan diterima.

  • Permintaan watch kube-proxy, permintaan GET kubelet dan system:nodes ke node, operasi endpoint kube-system, dan permintaan GET server API ke namespace dikecualikan.

  • Operasi baca (get, list, watch) untuk API authentication, rbac, certificates, autoscaling, dan storage dicatat pada tingkat Request. Operasi tulis pada API-API ini dicatat pada tingkat RequestResponse.

  • 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
--audit-log-maxbackup Jumlah maksimum file log terotasi yang disimpan 10
--audit-log-maxsize Ukuran maksimum per file log sebelum rotasi 100 MB
--audit-log-path Path output untuk file log audit /var/log/kubernetes/kubernetes.audit
--audit-log-maxage Periode retensi untuk file log terotasi 7 hari
--audit-policy-file Path ke file kebijakan audit /etc/kubernetes/audit-policy.yml

Langkah selanjutnya