All Products
Search
Document Center

Container Service for Kubernetes:Gunakan fitur audit API Server untuk mengamankan operasi kluster

Last Updated:Apr 21, 2026

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.

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

  2. Pada halaman Clusters, temukan kluster target dan klik namanya. Di panel sebelah kiri, pilih Security > Cluster Auditing.

  3. Jika audit kluster belum diaktifkan, ikuti petunjuk di layar untuk memilih proyek Simple Log Service (SLS) dan aktifkan fitur tersebut.

Penting

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

Penting

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

Catatan

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.

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

  2. Pada halaman Clusters, temukan kluster target dan klik namanya. Di panel sebelah kiri, klik Cluster Information.

  3. Pada tab Basic Information, klik ID proyek di samping Log Service Project. Di daftar penyimpanan log, klik penyimpanan log bernama audit-${clusterId}.

    Penting

    Indeks telah dikonfigurasi sebelumnya untuk Logstore ini. Jangan mengubah indeks — tindakan tersebut akan mencegah pembuatan laporan.

  4. 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 10000

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

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

Langkah selanjutnya

Ubah proyek SLS

Untuk memigrasi log audit ke proyek SLS yang berbeda:

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

  2. Pada halaman Clusters, temukan kluster target dan klik namanya. Di panel sebelah kiri, pilih Security > Cluster Auditing.

  3. Di pojok kanan atas, klik Change Log Service Project.

Nonaktifkan audit kluster

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

  2. Pada halaman Clusters, temukan kluster target dan klik namanya. Di panel sebelah kiri, pilih Security > Cluster Auditing.

  3. 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 levelApa yang dikumpulkanEvent khas
NoneTidak ada — event yang cocok tidak dicatatPermintaan watch kube-proxy, permintaan GET kubelet ke node, URL pemeriksaan kesehatan (/healthz\*, /version, /swagger\*), event Kubernetes
MetadataHanya metadata permintaan: info pengguna, stempel waktu, jenis resource. Tidak ada badan permintaan atau responsAkses Secret, pembacaan ConfigMap, permintaan API TokenReview
RequestMetadata dan badan permintaan. Tidak ada badan respons. Tidak berlaku untuk permintaan non-resourceOperasi GET, list, dan watch pada grup API inti (menghindari pengumpulan badan respons besar)
RequestResponseMetadata, badan permintaan, dan badan respons. Tidak berlaku untuk permintaan non-resourceOperasi 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:nodes ke node, operasi endpoint oleh komponen Kubernetes di kube-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: Metadata

Backend 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).

FlagNilai defaultDeskripsi
--audit-log-maxbackup10Jumlah maksimum shard log audit yang diputar ulang yang disimpan
--audit-log-maxsize100 (MB)Ukuran maksimum file log audit tunggal sebelum rotasi
--audit-log-path/var/log/kubernetes/kubernetes.auditJalur output untuk file log audit
--audit-log-maxage7 (hari)Jumlah hari penyimpanan file log audit yang diputar ulang
--audit-policy-file/etc/kubernetes/audit-policy.ymlJalur ke file kebijakan audit

Referensi