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.
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.
ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters öğesini tıklayın.
Clusters sayfasında küme adını tıklayın. Sol bölmede Security > Cluster Auditing yolunu izleyin.
Bir SLS projesi seçin ve küme denetimini etkinleştirin.
ACK, projede otomatik olarak audit-${clustereid} adlı bir Logstore oluşturur.
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.
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
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

İş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,AliyunLogConfigkaynağını sorgulamak içinAliyunLogConfigsgirin.
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.
ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters öğesini tıklayın.
Clusters sayfasında küme adını tıklayın. Sol bölmede Cluster Information öğesini tıklayın.
Cluster Resources sekmesinde Log Service Project yanındaki proje kimliğini tıklayın. Logstore listesinde audit-${clustereid} adlı Logstore'u tıklayın.
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:
ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters öğesini tıklayın.
Clusters sayfasında küme adını tıklayın. Sol bölmede Security > Cluster Auditing yolunu izleyin.
Change Log Service Project öğesini tıklayın ve ekrandaki talimatları izleyin.
Küme denetimini devre dışı bırakma
ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters öğesini tıklayın.
Clusters sayfasında küme adını tıklayın. Sol bölmede Security > Cluster Auditing yolunu izleyin.
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 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:nodesGET düğüm istekleri, kube-system uç nokta işlemleri ve API sunucusunun ad alanlarına yönelik GET istekleri hariç tutulur.authentication,rbac,certificates,autoscalingvestorageAPI'leri için okuma işlemleri (get,list,watch)Requestdüzeyinde günlüğe kaydedilir. Bu API'lerdeki yazma işlemleriRequestResponsedüzeyinde kaydedilir.Secrets ve ConfigMaps yalnızca
Metadatadü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:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Sonraki adımlar
Konteynerlerdeki
kubectl execkomutlarını denetlemek için Konteyner denetimini etkinleştirme konusuna bakın.Kurumsal güvenlik için En iyi güvenlik uygulamaları bölümüne göz atın.