全部产品
Search
文档中心

Container Compute Service:Gunakan fitur audit API Server dari sebuah kluster untuk keamanan operasi dan pemeliharaan (O&M)

更新时间:Nov 10, 2025

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.

  1. Masuk ke Konsol ACS. Di panel navigasi di sebelah kiri, klik Clusters.

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

Penting

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

Penting

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

Catatan

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.

Catatan

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.

  1. Masuk ke Konsol ACS. Di panel navigasi di sebelah kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi di sebelah kiri halaman detail kluster, klik Cluster Information.

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

    Penting

    Indeks dikonfigurasikan untuk Logstore audit secara default. Jangan ubah indeks. Jika tidak, laporan mungkin menjadi tidak valid.

  4. 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-manager dan 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 10000
  • Ekspresi 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 10000
  • Ekspresi 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.

  1. Masuk ke Konsol ACS. Di panel navigasi di sebelah kiri, klik Clusters.

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

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

  1. Masuk ke Konsol ACS. Di panel navigasi di sebelah kiri, klik Clusters.

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

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

Lihat File YAML Sampel

apiVersion: audit.k8s.io/v1 # Diperlukan. Nilainya adalah audit.k8s.io/v1 untuk kluster Kubernetes v1.24 atau lebih baru, dan audit.k8s.io/v1beta1 untuk versi sebelumnya.
kind: Policy
# Jangan buat peristiwa audit untuk permintaan pada tahap RequestReceived.
omitStages:
  - "RequestReceived"
rules:
  # Jenis permintaan berikut sering terjadi dan memiliki risiko rendah. Kami sarankan Anda mengatur level ke None untuk melewati audit.
  - 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 warisan
    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"]
  # Untuk URL read-only, seperti /healthz*, /version*, dan /swagger*, atur level ke None untuk melewati audit.
  - level: None
    nonResourceURLs:
      - /healthz*
      - /version
      - /swagger*
  # Atur level ke None untuk peristiwa untuk melewati audit.
  - level: None
    resources: 
      - group: "" # core
        resources: ["events"]
  # Untuk antarmuka seperti Secrets, ConfigMaps, dan TokenReviews yang mungkin berisi informasi sensitif atau file biner, atur level ke Metadata.
  - level: Metadata
    resources:
      - group: "" # core
        resources: ["secrets", "configmaps"]
      - group: authentication.k8s.io
        resources: ["tokenreviews"]
  # Permintaan mungkin mengembalikan sejumlah besar data. Atur level ke Request untuk tidak mengumpulkan badan respons.
  - 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"
  # Untuk API Kubernetes yang dikenal, level diatur ke RequestResponse secara default untuk mengembalikan 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"
  # Untuk semua permintaan lainnya, level diatur ke Metadata secara default.
  - level: Metadata
    Catatan

    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.