全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan fitur pemeriksaan cluster untuk melaksanakan O&M keamanan cluster

更新时间:Jul 02, 2025

API server menghasilkan log audit untuk mencatat permintaan dan respons API Kubernetes. Container Service for Kubernetes (ACK) memungkinkan administrator klaster menganalisis log audit dari API server untuk memeriksa operasi yang dilakukan pada sumber daya oleh pengguna yang berbeda. Ini membantu administrator melacak sejarah operasi klaster dan menyelesaikan masalah pengecualian klaster, sehingga menyederhanakan O&M keamanan klaster.

Catatan Penggunaan

Topik ini berlaku untuk klaster terkelola ACK, klaster khusus ACK, dan klaster Serverless ACK.

Untuk informasi lebih lanjut tentang cara menggunakan fitur pemeriksaan klaster dalam klaster terdaftar, lihat Gunakan pemeriksaan klaster.

Penagihan

Di halaman gambaran tagihan, Anda dapat melihat informasi penagihan tentang data log audit. Untuk informasi lebih lanjut, lihat Lihat tagihan Anda. Untuk informasi lebih lanjut tentang metode penagihan log audit, lihat Bayar-per-fitur.

Langkah 1: Aktifkan pemeriksaan cluster

Secara default, Enable Log Service secara otomatis dipilih saat Anda membuat klaster untuk mengaktifkan fitur pemeriksaan klaster. Jika fitur pemeriksaan klaster dinonaktifkan, lakukan langkah-langkah berikut untuk mengaktifkannya.

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

  2. Pada halaman Clusters, temukan klaster yang Anda inginkan dan klik namanya. Di panel di sebelah kiri, pilih Security > Cluster Auditing.

Jika Anda belum mengaktifkan fitur log klaster atau fitur pemeriksaan klaster, ikuti petunjuk di layar untuk secara manual memilih proyek Layanan Log Sederhana dan mengaktifkan fitur tersebut.

Penting

Pastikan bahwa kuota Layanan Log Sederhana berikut dalam akun Alibaba Cloud Anda cukup. Jika tidak, Anda gagal mengaktifkan fitur pemeriksaan klaster.

  • Kuota pada proyek Layanan Log Sederhana.

  • Kuota pada penyimpanan log dalam setiap proyek Layanan Log Sederhana.

  • Kuota pada dasbor dalam setiap proyek Layanan Log Sederhana.

Untuk informasi lebih lanjut tentang kuota Layanan Log Sederhana dan cara menyesuaikan kuota, lihat Sesuaikan Kuota sumber daya.

Langkah 2: Lihat laporan log audit

Penting

Jangan modifikasi laporan log audit. Jika Anda ingin menyesuaikan laporan log audit, masuk ke Konsol Layanan Log Sederhana dan buat laporan baru.

ACK menyediakan empat laporan log audit bawaan, yang memberikan gambaran umum pusat audit, gambaran umum operasi sumber daya, daftar rinci operasi sumber daya, dan daftar kerentanan Common Vulnerabilities and Exposures (CVE). Di halaman Cluster Auditing, Anda dapat memfilter peristiwa audit berdasarkan namespace atau pengguna RAM dan melihat konten berikut dalam laporan.

Anda juga dapat mengklik ikon image.png di bagian kanan atas grafik untuk melakukan operasi lainnya, seperti melihat grafik dalam mode layar penuh atau melihat pratinjau pernyataan kueri.

Gambaran Umum

Laporan ini menampilkan semua peristiwa dalam klaster ACK saat ini dan informasi rinci tentang peristiwa penting, seperti operasi pengguna RAM, akses Internet, eksekusi perintah, penghapusan sumber daya, akses Secret, dan kerentanan CVE Kubernetes.

Gambaran Operasi

Laporan ini memberikan statistik tentang operasi umum terkait sumber daya komputasi, sumber daya jaringan, dan sumber daya penyimpanan dalam klaster. Operasi termasuk pembuatan, pembaruan, penghapusan, dan akses sumber daya.

  • Sumber daya komputasi: Deployment, StatefulSet, CronJob, DaemonSet, Job, dan Pod.

  • Sumber daya jaringan: Service dan Ingress.

  • Sumber daya penyimpanan: ConfigMap, Secret, dan PersistentVolumeClaim.

  • Sumber daya kontrol akses: Role, ClusterRole, RoleBinding, dan ClusterRoleBinding.

资源操作概览

Rincian Operasi

Laporan ini memberikan rincian operasi pada tipe sumber daya. Anda dapat memilih atau memasukkan tipe sumber daya untuk menanyakan rincian operasi secara real-time. Laporan ini menampilkan jumlah total operasi, distribusi namespace, tingkat keberhasilan operasi, tren operasi dari waktu ke waktu, dan rincian operasi lainnya.

资源操作详细列表

Catatan

Untuk menanyakan operasi terkait CustomResourceDefinition (CRD) yang terdaftar di Kubernetes atau sumber daya yang tidak tercantum dalam laporan, masukkan bentuk jamak dari nama sumber daya. Misalnya, untuk menanyakan operasi terkait CRD AliyunLogConfig, masukkan AliyunLogConfigs.

Kerentanan CVE

Laporan ini menampilkan kerentanan CVE Kubernetes dalam klaster saat ini. Anda dapat memilih atau memasukkan ID pengguna RAM untuk menanyakan informasi secara real-time. Kemudian, laporan menampilkan kerentanan CVE Kubernetes yang terkait dengan pengguna RAM yang Anda tentukan. Untuk informasi lebih lanjut tentang kerentanan CVE dan solusi, lihat [CVE Securities] Perbaikan kerentanan CVE.

(Opsional) Langkah 3: Lihat data log detail

Untuk menyesuaikan kueri atau menganalisis data log audit, masuk ke Konsol Layanan Log Sederhana dan lihat data log detail.

Catatan

Secara default, periode retensi log audit server API dalam klaster terkelola ACK adalah 30 hari dan periode retensi log audit server API dalam klaster khusus ACK adalah 365 hari. Untuk informasi lebih lanjut tentang cara memodifikasi periode retensi default, lihat Kelola penyimpanan log.

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

  2. Pada halaman Clusters, temukan klaster yang Anda inginkan dan klik namanya. Di panel di sebelah kiri, klik Cluster Information.

  3. Di tab Basic Information, klik ID proyek di sebelah Log Service Project. Dalam daftar Logstores, klik Logstore bernama audit-${clustered}.

    Selama proses pembuatan klaster, Logstore bernama audit-${clustereid} secara otomatis dibuat dalam proyek.

    Penting

    Secara default, indeks dikonfigurasikan untuk Logstore. Jangan modifikasi indeks agar laporan tetap dapat dihasilkan.

  4. Masukkan pernyataan kueri dan tentukan rentang waktu yang akan diperiksa, seperti 15 menit. Kemudian, klik Search & Analysis untuk melihat hasil kueri.

    Anda dapat menanyakan log audit dengan cara berikut:

    • Untuk menanyakan operasi yang dilakukan oleh pengguna RAM, masukkan ID pengguna RAM dan klik Search & Analysis.

    • Untuk menanyakan operasi yang dilakukan pada sumber daya, masukkan nama sumber daya komputasi, jaringan, penyimpanan, atau kontrol akses dan klik Search & Analysis.

    • Untuk menyaring operasi terkait 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 Search & Analysis.

    Untuk informasi lebih lanjut tentang cara menanyakan data log, lihat Metode kueri.

(Opsional) Langkah 4: Konfigurasi peringatan

Anda dapat mengkonfigurasi Layanan Log Sederhana untuk menghasilkan peringatan secara real-time ketika operasi dilakukan pada sumber daya tertentu. Metode notifikasi peringatan yang didukung termasuk

chatbot DingTalk, webhook kustom, dan Pusat Pesan Alibaba Cloud. Untuk informasi lebih lanjut, lihat Konfigurasikan aturan peringatan di Layanan Log Sederhana.

Contoh 1: Hasilkan peringatan ketika perintah dieksekusi dalam kontainer

Sebuah perusahaan ingin melarang pengguna masuk ke kontainer atau menjalankan perintah dalam kontainer. Ketika pengguna menjalankan perintah dalam kontainer, peringatan segera dihasilkan. Pesan peringatan berisi informasi tentang kontainer, perintah, pengguna, ID peristiwa, waktu, dan alamat IP sumber.

  • Contoh pernyataan kueri:

    verb : create and objectRef.subresource:exec and stage:  ResponseStarted | SELECT auditID as "ID Event", date_format(from_unixtime(__time__), '%Y-%m-%d %T' ) as "Waktu",  regexp_extract("requestURI", '([^\?]*)/exec\?.*', 1)as "Sumber Daya",  regexp_extract("requestURI", '\?(.*)', 1)as "Perintah" ,"responseStatus.code" as "Kode status",
     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 "Akun pengguna", 
    CASE WHEN json_array_length(sourceIPs) = 1 then json_format(json_array_get(sourceIPs, 0)) ELSE  sourceIPs END
    as "Alamat IP Sumber" order by "Waktu" desc  limit 10000
  • Ekspresi kondisi adalah Event =~ ".*".

Contoh 2: Hasilkan peringatan ketika server API gagal mengakses Internet

Sebuah klaster telah mengaktifkan akses Internet. Untuk mencegah serangan, perusahaan perlu memantau jumlah kali dan tingkat kegagalan akses Internet. Ketika jumlah kali akses Internet mencapai ambang batas (10) dan tingkat kegagalan melebihi ambang batas (50%), peringatan segera dihasilkan. Pesan peringatan berisi informasi tentang wilayah alamat IP sumber, alamat IP sumber, dan apakah alamat IP tersebut berisiko.

  • Contoh pernyataan kueri:

    * | 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 adalah Source IP address =~ ".*".

Apa yang harus dilakukan selanjutnya

Ubah Proyek Layanan Log Sederhana

Jika Anda ingin memigrasi log audit ke proyek Layanan Log Sederhana lain, Anda dapat menggunakan fitur Change Log Service Project dalam pemeriksaan klaster.

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

  2. Pada halaman Clusters, temukan klaster yang Anda inginkan dan klik namanya. Di panel di sebelah kiri, pilih Security > Cluster Auditing.

  3. Di sudut kanan atas halaman pemeriksaan klaster, klik Change Log Service Project untuk memigrasi log audit ke proyek Layanan Log Sederhana lain.

Nonaktifkan pemeriksaan cluster

Anda dapat melakukan langkah-langkah berikut untuk menonaktifkan pemeriksaan klaster.

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

  2. Pada halaman Clusters, temukan klaster yang Anda inginkan dan klik namanya. Di panel di sebelah kiri, pilih Security > Cluster Auditing.

  3. Di sudut kanan atas halaman Cluster Auditing, klik Disable Cluster Auditing.

Gunakan layanan log pihak ketiga dalam klaster khusus ACK

Kami merekomendasikan Anda menggunakan Layanan Log Sederhana untuk menyimpan log audit. Untuk menggunakan layanan log pihak ketiga, Anda dapat memilih untuk tidak menggunakan Layanan Log Sederhana saat membuat klaster dan kemudian mengintegrasikan layanan log pihak ketiga untuk mengumpulkan dan mengambil log audit. Anda dapat memperoleh file sumber log audit node master dalam jalur /var/log/kubernetes/kubernetes.audit. File-file tersebut dalam format JSON.

Pengenalan konfigurasi pemeriksaan cluster untuk klaster khusus ACK

Ketika Anda mengonfigurasi komponen klaster untuk klaster khusus ACK, konsol secara default memilih Enable Log Service untuk mengaktifkan pemeriksaan klaster. Data peristiwa dikumpulkan berdasarkan kebijakan audit dan ditulis ke backend.

Catatan

Fitur ini melibatkan modifikasi parameter startup kube-apiserver dan hanya berlaku untuk klaster khusus ACK. Bidang kontrol klaster klaster terkelola ACK dan klaster Serverless ACK dikelola oleh ACK dan tidak mendukung modifikasi manual.

Kebijakan audit

Kebijakan audit mendefinisikan konfigurasi audit dan aturan pengumpulan log. Log peristiwa dari tingkat audit yang berbeda dikumpulkan berdasarkan aturan pengumpulan log yang berbeda. Tabel berikut menjelaskan tingkat audit.

Tingkat audit

Aturan pengumpulan log

Tidak ada

Peristiwa yang sesuai dengan aturan tidak dikumpulkan.

Metadata

Kumpulkan metadata permintaan, seperti informasi pengguna dan timestamp. Badan permintaan dan badan respons tidak dikumpulkan.

Permintaan

Kumpulkan metadata permintaan dan badan permintaan. Badan respons tidak dikumpulkan. Aturan ini tidak berlaku untuk permintaan non-sumber daya.

PermintaanRespons

Kumpulkan metadata permintaan, badan permintaan, dan badan respons. Aturan ini tidak berlaku untuk permintaan non-sumber daya.

Anda dapat mengatur flag --audit-policy-file untuk menyimpan file YAML berikut sebagai konfigurasi boot server API. Setelah Anda masuk ke node master, Anda dapat melihat file kebijakan audit di direktori /etc/kubernetes/audit-policy.yml. File YAML berikut adalah contoh kebijakan audit.

Lihat isi file YAML

apiVersion: audit.k8s.io/v1 # Wajib. Tetapkan ke audit.k8s.io/v1 jika versi Kubernetes klaster adalah 1.24 atau lebih baru dan tetapkan ke audit.k8s.io/v1beta1 jika versi Kubernetes klaster lebih lama dari 1.24.
kind: Policy
# Tidak perlu menghasilkan peristiwa audit pada tahap RequestReceived.
omitStages:
  - "RequestReceived"
rules:
  # Jenis permintaan berikut sering terjadi dan risiko permintaan ini rendah. Kami sarankan Anda mengatur 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 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"]
  # Atur aturan ke None untuk URL baca saja, seperti /healthz*, /version*, dan /swagger*.
  - level: None
    nonResourceURLs:
      - /healthz*
      - /version
      - /swagger*
  # Atur aturan ke None untuk peristiwa.
  - level: None
    resources:
      - group: "" # core
        resources: ["events"]
  # Atur aturan ke Metadata untuk permintaan API Secrets, ConfigMaps, dan 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 sejumlah besar data. Atur aturan ke Permintaan sehingga 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      - group: "storage.k8s.io"
  # Aturan diatur ke PermintaanRespons secara default untuk permintaan API Kubernetes yang dikenal untuk 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 diatur ke Metadata secara default untuk permintaan lainnya.
  - level: Metadata
    Catatan

    Log tidak segera dihasilkan setelah permintaan diterima. Log hanya dihasilkan setelah header respons dikirim.

    Sistem tidak memeriksa permintaan tonton kube-proxy, permintaan GET yang dikirim dari kubelet dan system:nodes ke node, operasi titik akhir yang dilakukan oleh komponen Kubernetes di namespace kube-system, dan permintaan GET yang dikirim dari server API ke namespace.

    Sistem mencatat badan permintaan dan respons berdasarkan pembacaan dan penulisan untuk API authentication, rbac, certificates, autoscaling, dan storage.

Backend audit

Peristiwa audit yang dikumpulkan disimpan dalam sistem file log backend sebagai file log dalam format JSON. Anda dapat mengonfigurasi flag berikut sebagai konfigurasi boot server API.

Catatan

Setelah Anda masuk ke node master, Anda dapat melihat file konfigurasi server API di direktori /etc/kubernetes/manifests/kube-apiserver.yaml.

Flag

Deskripsi

--audit-log-maxbackup

Jumlah maksimum shard log audit yang dapat disimpan. Nilai default: 10.

--audit-log-maxsize

Penyimpanan memori maksimum untuk satu log audit. Nilai default: 100 MB.

--audit-log-path

Jalur keluaran log audit. Nilai default: /var/log/kubernetes/kubernetes.audit.

--audit-log-maxage

Periode retensi log audit dalam hari. Nilai default: 7.

--audit-policy-file

Jalur file kebijakan audit. Nilai default: /etc/kubernetes/audit-policy.yml.

Referensi