Tüm Ürünler
Search
Belge Merkezi

Container Service for Kubernetes:Secure cluster operations with API server auditing

Son Güncelleme:Oct 06, 2026

Uyumluluk ve güvenlik gereksinimlerinizi karşılamak için API sunucusu denetim günlüklerini etkinleştirin, sorgulayın ve uyarı yapılandırmalarını ayarlayın.

Küme denetimi, API sunucusu isteklerini ve yanıtlarını kaydeder; böylece işlem geçmişini izleyebilir ve anormallikleri araştırabilirsiniz.

ACK yönetilen, ACK özel ve ACK Sunucusuz kümeler için geçerlidir.

Kayıtlı kümeler için bkz. Küme denetimini kullanma .

Faturalama

Denetim günlüğü verileri özellik bazlı faturalandırma modeline tabidir. Ayrıntılar için Faturalarınızı görüntüleme ve Özellik bazlı faturalandırma konularına bakın.

Önemli

Küme denetimini etkinleştirmek Simple Log Service (SLS) maliyetleri doğurur. Günlük hacminizi izleyin ve uyumluluk gereksinimlerinize uygun bir saklama süresi belirleyin. Varsayılan olarak ACK yönetilen kümelerde 30 gün, ACK özel kümelerde 365 gün saklanır.

Ön koşullar

Alibaba Cloud hesabınızdaki aşağıdaki SLS kotalarının yeterli olduğundan emin olun:

  • SLS proje kotası

  • SLS proje başına Logstore kotası

  • SLS proje başına pano kotası

Kota ayrıntıları ve artırma talepleri için Kaynak kotalarını ayarlama bölümüne bakın.

Küme denetimini etkinleştirme

Küme oluşturma sırasında varsayılan olarak Enable Log Service seçeneği işaretlidir. Bu seçeneği devre dışı bıraktıysanız yeniden etkinleştirmek için aşağıdaki adımları izleyin.

  1. ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters öğesini tıklayın.

  2. Clusters sayfasında küme adını tıklayın. Sol bölmede Security > Cluster Auditing yolunu izleyin.

  3. Bir SLS projesi seçin ve küme denetimini etkinleştirin.

ACK, projede otomatik olarak audit-${clustereid} adlı bir Logstore oluşturur.

Önemli

Varsayılan dizinleri değiştirmeyin. Değişiklik yapmanız durumunda denetim raporları doğru şekilde oluşturulamaz.

Denetim günlüğü raporlarını görüntüleme

ACK dört yerleşik denetim günlüğü raporu sağlar. Cluster Auditing sayfasında ad alanına veya RAM kullanıcısına göre filtreleme yapabilirsiniz.

Önemli

Yerleşik denetim günlüğü raporlarını değiştirmeyin. Bunun yerine SLS konsolu içinde özel raporlar oluşturun.

Herhangi bir grafikte tam ekran görünümüne geçmek veya sorgu ifadesini önizlemek için image.png simgesini tıklayın.

Genel bakış

Tüm küme olaylarını ve yüksek öncelikli olay ayrıntılarını gösterir. Buna RAM kullanıcı işlemleri, İnternet erişimi, komut çalıştırmaları, kaynak silme işlemleri, Secret erişimi ve CVE güvenlik açıkları dahildir.

İşlem özeti

Aşağıdaki kaynak türlerinde oluşturma, güncelleme, silme ve okuma işlemlerine ilişkin istatistikleri sunar:

  • Hesaplama kaynakları: Deployment, StatefulSet, CronJob, DaemonSet, Job ve Pod

  • Ağ kaynakları: Service ve Ingress

  • Depolama kaynakları: ConfigMap, Secret ve PersistentVolumeClaim (PVC)

  • Erişim kontrolü kaynakları: Role, ClusterRole, RoleBinding ve ClusterRoleBinding

Operations overview

İşlem ayrıntıları

Belirli bir kaynak türü için işlemleri gösterir. Sorgulamak üzere bir kaynak türü seçin. Rapor toplam sayıyı, ad alanı dağılımını, başarı oranını ve zaman içindeki eğilimleri görüntüler.

CRD kaynaklarını veya listelenmeyen kaynakları sorgulamak için çoğul kaynak adını girin. Örneğin, AliyunLogConfig kaynağını sorgulamak için AliyunLogConfigs girin.

CVE güvenlik açıkları

Kubernetes CVE güvenlik açıklarını görüntüler. RAM kullanıcı kimliğine göre filtreleme yapabilirsiniz. Düzeltme adımları için [[CVE Güvenliği] CVE güvenlik açığı düzeltmeleri](t96487.xdita#) bölümüne bakın.

Ayrıntılı günlük verilerini sorgulama

Özel sorgular ve daha derin analizler için SLS konsolundaki ham denetim günlüğü verilerine erişin.

Varsayılan saklama süresi: ACK yönetilen kümelerde 30 gün, ACK özel kümelerde 365 gün. Saklama süresini değiştirmek için Logstore yönetimi konusuna bakın.
  1. ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters öğesini tıklayın.

  2. Clusters sayfasında küme adını tıklayın. Sol bölmede Cluster Information öğesini tıklayın.

  3. Cluster Resources sekmesinde Log Service Project yanındaki proje kimliğini tıklayın. Logstore listesinde audit-${clustereid} adlı Logstore'u tıklayın.

  4. Bir sorgu ifadesi girin, sorgu zaman aralığını yapılandırın (örneğin son 15 dakika) ve Search & Analysis öğesini tıklayın.

Yaygın sorgu kalıpları:

  • RAM kullanıcısına göre: RAM kullanıcı kimliğini girin.

  • Kaynağa göre: Kaynak adını girin (Deployment, Service, ConfigMap vb.).

  • Sistem bileşenlerini hariç tutma: Sistem bileşeni gürültüsünü filtreleyin:

    NOT user.username: node NOT user.username: serviceaccount NOT user.username: apiserver NOT user.username: kube-scheduler NOT user.username: kube-controller-manager

Sözdizimi ayrıntıları için Sorgu yöntemleri bölümüne bakın.

Uyarı yapılandırma

Belirli işlemler gerçekleştiğinde gerçek zamanlı bildirim almak için SLS uyarı kuralları oluşturun. DingTalk sohbet botları, özel Webhook'lar ve Alibaba Cloud Message Center desteklenen yöntemler arasındadır.

Ayrıntılar için SLS'de uyarı kuralı yapılandırma konusuna bakın.

Uyarı örneği 1: Konteynerlerde çalıştırılan komutlar

Kullanıcılar konteynerlerde komut çalıştırdığında uyarı gönderir. Her uyarı konteyneri, komutu, kullanıcıyı, olay kimliğini, zamanı ve kaynak IP adresini içerir.

Örnek sorgu ifadesi:

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

Koşul ifadesi: Event =~ ".*"

Uyarı örneği 2: API sunucusundan başarısız İnternet erişimi

Kümenizden giden İnternet isteklerini izler. İstek sayısı 10'a ulaştığında ve hata oranı %50'yi aştığında tetiklenir.

Örnek sorgu ifadesi:

* | 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

Koşul ifadesi: Source IP address =~ ".*"

Küme denetimi ayarlarını yönetme

SLS projesini değiştirme

Denetim günlüklerini farklı bir SLS projesine taşımak için:

  1. ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters öğesini tıklayın.

  2. Clusters sayfasında küme adını tıklayın. Sol bölmede Security > Cluster Auditing yolunu izleyin.

  3. Change Log Service Project öğesini tıklayın ve ekrandaki talimatları izleyin.

Küme denetimini devre dışı bırakma

  1. ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters öğesini tıklayın.

  2. Clusters sayfasında küme adını tıklayın. Sol bölmede Security > Cluster Auditing yolunu izleyin.

  3. Disable Cluster Auditing öğesini tıklayın.

Üçüncü taraf günlük hizmeti kullanma (yalnızca ACK özel kümeler)

Denetim günlükleri için önerilen depolama çözümü SLS'dir. Üçüncü taraf bir günlük hizmeti kullanmak istiyorsanız küme oluşturma sırasında SLS adımını atlayın ve üçüncü taraf hizmeti entegre edin. Ham denetim günlükleri ana düğümlerde JSON formatında /var/log/kubernetes/kubernetes.audit konumunda bulunur.

Denetim ilkesi ve arka uç yapılandırması (ACK özel kümeler)

ACK özel kümelerde varsayılan olarak Enable Log Service seçeneği işaretlidir. Denetim olayları denetim ilkesine göre toplanır ve arka uç dosya sistemine yazılır.

Denetim ilkesi

Denetim ilkesi hangi olayların toplanacağını ve hangi ayrıntı düzeyinde kaydedileceğini tanımlar. Dört denetim düzeyi bulunur:


Denetim düzeyi


Toplanan veriler


None


Hiçbir şey. Eşleşen olaylar atlanır.


Metadata


Yalnızca kullanıcı bilgileri ve zaman damgaları gibi istek meta verileri. İstek veya yanıt gövdesi dahil edilmez.


Request


İstek meta verileri ve gövdesi. Yanıt gövdesi dahil edilmez. Kaynak dışı istekler hariç tutulur.


RequestResponse


İstek meta verileri, istek gövdesi ve yanıt gövdesi. Kaynak dışı istekler hariç tutulur.

Denetim ilkesi ana düğümlerdeki /etc/kubernetes/audit-policy.yml dosyasından (--audit-policy-file bayrağı aracılığıyla) yüklenir. Varsayılan ACK ilkesi:

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

Temel davranışlar:

  • Günlükler istek alındığında değil, yanıt üstbilgileri gönderildikten sonra oluşturulur.

  • kube-proxy watch istekleri, kubelet ve system:nodes GET düğüm istekleri, kube-system uç nokta işlemleri ve API sunucusunun ad alanlarına yönelik GET istekleri hariç tutulur.

  • authentication, rbac, certificates, autoscaling ve storage API'leri için okuma işlemleri (get, list, watch) Request düzeyinde günlüğe kaydedilir. Bu API'lerdeki yazma işlemleri RequestResponse düzeyinde kaydedilir.

  • Secrets ve ConfigMaps yalnızca Metadata düzeyinde günlüğe kaydedilir; böylece içerikleri denetim günlüklerine asla yazılmaz.

Denetim arka ucu

Denetim olayları ana düğümlerdeki yerel dosya sistemine JSON dosyaları olarak yazılır. /etc/kubernetes/manifests/kube-apiserver.yaml konumundaki API sunucusu yapılandırması aşağıdaki bayraklarla arka uç davranışını kontrol eder:


Bayrak


Açıklama


Varsayılan


--audit-log-maxbackup


Tutulacak maksimum döndürülmüş günlük dosyası sayısı


10


--audit-log-maxsize


Döndürmeden önceki maksimum günlük dosyası boyutu


100 MB


--audit-log-path


Denetim günlük dosyalarının çıkış yolu


/var/log/kubernetes/kubernetes.audit


--audit-log-maxage


Döndürülmüş günlük dosyaları için saklama süresi


7 gün


--audit-policy-file


Denetim ilkesi dosyasının yolu


/etc/kubernetes/audit-policy.yml

Sonraki adımlar