Denetleme günlüğüne kaydetmeyi yapılandırma

K3s , varsayılan olarak devre dışı bırakılan denetim günlüğü sağlayan bir Kubernetes dağıtımıdır. Bir yönetici olarak, K3s-based IBM® Security Edge Gateway kümesinde denetleme günlüğüne kaydetmeyi etkinleştirebilirsiniz.

Başlamadan önce

K3s denetimini etkinleştirmek için Edge Gateway sürümünüz 1.8.1 ya da üstü olmalıdır.

Bu görev hakkında

Denetleme günlüğüne kaydetme için gerekli yapılandırma şunları içerir:

  • Olayların günlüğe kaydedildiği bir denetim ilkesi tanımlama dosyası.
  • Günlükleri toplamak ve depolamak için arka uç yapılandırmasını denetleyin.
Tüm ek yapılandırmalar /var/lib/rancher/k3s/server/manifests/ altında oluşturulur ve günlükler /var/log/kubernetes/audit/ ' e aşağıdaki gibi yazılır:
sudo mkdir -p /var/lib/rancher/k3s/server/manifests /var/log/kubernetes/audit

İşlem

  1. Denetim ilkesi dosyanızı oluşturun ve ilke kurallarını tanımlayın.

    Aşağıdaki örnek, request/response gövdesi olmadan yalnızca konuşlandırma yaratmalarını kaydeder:

    cat >/var/lib/rancher/k3s/server/manifests/policy.yaml <<EOF
    # Log only deployment creations at the Metadata level.
    apiVersion: audit.k8s.io/v1
    kind: Policy
    rules:
      - level: Metadata
        verbs: ["create"]
        resources:
        - group: "apps"
          resources: ["deployments"]
    EOF
    Denetim ilkesinin nasıl oluşturulacağına ilişkin daha fazla bilgi için Kubernetes belgelerinebakın.
  2. Kullanılabilir iki denetim arka ucundan istediğiniz denetim arka ucunu seçin:
    • Arka ucu günlüğe kaydet: olayları dosya sistemine yazar.
    • Webhook arka ucu: olayları bir dış HTTP API ' ya gönderen.
    Arka uç, K3s’ systemd birim yapılandırmasında yapılandırılır.
  3. Kullandığınız denetim arka ucuna bağlı olarak aşağıdaki yordamlardan birini tamamlayın.
    Yerel dosya sistemi günlüğü arka ucuyla denetim günlüğüne kaydetmeyi etkinleştirmek için, ilgili yapılandırmaları K3s systemd başlangıç bağımsız değişkenlerine eklemeniz, yapılandırmayı yeniden yüklemeniz ve K3s hizmetini aşağıdaki gibi yeniden başlatmanız gerekir:
    1. k3s.service yapılandırma dosyasında, Service bölümü altında, ExecStartiçindeki seçenekleri ekleyin:
      vi /etc/systemd/system/k3s.service

      Aşağıdaki iki seçenek gereklidir ve her ikisi de --kube-apiserver-arg=option-name=option-valuetarafından iletilmelidir:

      • audit-policy-file , birinci adımda açıklandığı gibi denetim ilkesinin yoludur.

      • audit-log-path , çıkış denetleme günlüğünün yoludur.

      Günlük döndürmeyi denetlemek için aşağıdaki isteğe bağlı bağımsız değişkenleri kullanabilirsiniz:

      • audit-log-maxsize , günlük döndürmeden önce MB cinsinden boyut üst sınırıdır.
      • audit-log-maxbackup , döndürülmüş günlük sayısı üst sınırıdır.
      • audit-log-maxage , eski döndürülen dosyaların alıkonacağı gün sayısı üst sınırıdır.
      Aşağıdaki grafikte bir örnek gösterilmektedir:
    2. systemd birim yapılandırmasını tamamladıktan sonra, aşağıdaki komutları kullanarak hizmeti yeniden yükleyin ve yeniden başlatın:
      systemctl daemon-reload
      systemctl restart k3s
      Çıkış denetleme olayları, hizmet başlatma bağımsız değişkeninde belirtilen konumdaki JSONline dosyalarında saklanır. Aşağıdaki örnek, bu yordamda açıklanan denetim ilkesiyle yeni bir Edge Gateway eşlemesinin ardından çıkışı gösterir:
      {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Metadata","auditID":"b20ac0e0-bd02-4b93-90fd-dd24b73c9330","stage":"RequestReceived","requestURI":"/apis/apps/v1/namespaces/cfd3995c-c011-4e1f-aa05-8c6787d1861b/deployments","verb":"create","user":{"username":"system:admin","groups":["system:masters","system:authenticated"]},"sourceIPs":["127.0.0.1"],"userAgent":"okhttp/3.12.12","objectRef":{"resource":"deployments","namespace":"cfd3995c-c011-4e1f-aa05-8c6787d1861b","apiGroup":"apps","apiVersion":"v1"},"requestReceivedTimestamp":"2022-11-30T07:52:23.440012Z","stageTimestamp":"2022-11-30T07:52:23.440012Z"}
      {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Metadata","auditID":"b20ac0e0-bd02-4b93-90fd-dd24b73c9330","stage":"ResponseComplete","requestURI":"/apis/apps/v1/namespaces/cfd3995c-c011-4e1f-aa05-8c6787d1861b/deployments","verb":"create","user":{"username":"system:admin","groups":["system:masters","system:authenticated"]},"sourceIPs":["127.0.0.1"],"userAgent":"okhttp/3.12.12","objectRef":{"resource":"deployments","namespace":"cfd3995c-c011-4e1f-aa05-8c6787d1861b","name":"deployment-synchronizer","apiGroup":"apps","apiVersion":"v1"},"responseStatus":{"metadata":{},"code":201},"requestReceivedTimestamp":"2022-11-30T07:52:23.440012Z","stageTimestamp":"2022-11-30T07:52:23.446914Z","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":""}}
      {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Metadata","auditID":"c10353df-095a-4454-96c5-ca028988911a","stage":"RequestReceived","requestURI":"/apis/apps/v1/namespaces/cfd3995c-c011-4e1f-aa05-8c6787d1861b/deployments","verb":"create","user":{"username":"system:admin","groups":["system:masters","system:authenticated"]},"sourceIPs":["127.0.0.1"],"userAgent":"okhttp/3.12.12","objectRef":{"resource":"deployments","namespace":"cfd3995c-c011-4e1f-aa05-8c6787d1861b","apiGroup":"apps","apiVersion":"v1"},"requestReceivedTimestamp":"2022-11-30T07:52:23.521285Z","stageTimestamp":"2022-11-30T07:52:23.521285Z"}
      {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Metadata","auditID":"c10353df-095a-4454-96c5-ca028988911a","stage":"ResponseComplete","requestURI":"/apis/apps/v1/namespaces/cfd3995c-c011-4e1f-aa05-8c6787d1861b/deployments","verb":"create","user":{"username":"system:admin","groups":["system:masters","system:authenticated"]},"sourceIPs":["127.0.0.1"],"userAgent":"okhttp/3.12.12","objectRef":{"resource":"deployments","namespace":"cfd3995c-c011-4e1f-aa05-8c6787d1861b","name":"deployment-operator","apiGroup":"apps","apiVersion":"v1"},"responseStatus":{"metadata":{},"code":201},"requestReceivedTimestamp":"2022-11-30T07:52:23.521285Z","stageTimestamp":"2022-11-30T07:52:23.531923Z","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":""}}

      Daha fazla bilgi için Kubernetes belgelerinebakın.

    Uzak webhook günlüğü arka ucunu kullanıyorsanız, webhook yapılandırmasını oluşturmanız, ilgili yapılandırmaları K3s sistem başlangıç bağımsız değişkenlerine eklemeniz, yapılandırmayı yeniden yüklemeniz ve K3s hizmetini aşağıdaki gibi yeniden başlatmanız gerekir:
    1. Bir webhook yapılandırma dosyası oluşturun. Bu dosya, HTTP bağlantılarına ilişkin adresi ve kimlik bilgilerini içerir ve $HOME/.kube/configiçindeki kubectl yapılandırmasına benzer. Aşağıdaki örnek, temel kimlik doğrulamasıyla bir geriçevrim arka ucunu tanımlar:
      cat >/var/lib/rancher/k3s/server/manifests/webhook.yaml <<EOF
      apiVersion: v1
      kind: Config
      preferences: {}
      
      clusters:
      # address and port of remote server
      - name: example-audit-backend
        cluster:
          server: http://localhost:8888
      
      users:
      # client credential
      - name: example-user
        user:
          username: example-username
          password: example-password
      
      contexts:
      # link the remote server address and credential
      - name: example-context
        context:
          cluster: example-audit-backend
          user: example-user
      current-context: example-context
      EOF

      Daha fazla bilgi için Kubernetes belgelerinebakın.

    2. k3s.service yapılandırma dosyasında, Service bölümünün altında, ExecStartiçindeki seçenekleri ekleyin:
      vi /etc/systemd/system/k3s.service

      Aşağıdaki iki seçenek gereklidir ve her ikisi de --kube-apiserver-arg=option-name=option-valuetarafından iletilmelidir:

      • audit-policy-file , birinci adımda açıklandığı gibi denetim ilkesinin yoludur.

      • audit-webhook-config-file , önceki adımda açıklandığı gibi webhook yapılandırmasının yoludur.
    3. systemd birim yapılandırmasını düzenledikten sonra hizmeti yeniden yükleyin ve yeniden başlatın:
      systemctl daemon-reload
      systemctl restart k3s

      Çıkış denetim olayları, HTTP POST gövdesinde JSON listeleri olarak toplu olarak gönderilecek. Aşağıda, bu yordamda ve webhook istek gövdesinde açıklanan denetim ilkesiyle yeni bir Edge Gateway eşlemesinden sonraki bir çıkış örneği verilmiştir:

      {
        "kind":"EventList",
        "apiVersion":"audit.k8s.io/v1",
        "metadata":{},
        "items":
        [
          {"level":"Metadata","auditID":"86fcb3ac-9ae2-4f8f-a102-9efa0747f513","stage":"RequestReceived","requestURI":"/apis/apps/v1/namespaces/cfd3995c-c011-4e1f-aa05-8c6787d1861b/deployments","verb":"create","user":{"username":"system:admin","groups":["system:masters","system:authenticated"]},"sourceIPs":["127.0.0.1"],"userAgent":"okhttp/3.12.12","objectRef":{"resource":"deployments","namespace":"cfd3995c-c011-4e1f-aa05-8c6787d1861b","apiGroup":"apps","apiVersion":"v1"},"requestReceivedTimestamp":"2022-12-02T09:02:10.502140Z","stageTimestamp":"2022-12-02T09:02:10.502140Z"},
          {"level":"Metadata","auditID":"86fcb3ac-9ae2-4f8f-a102-9efa0747f513","stage":"ResponseComplete","requestURI":"/apis/apps/v1/namespaces/cfd3995c-c011-4e1f-aa05-8c6787d1861b/deployments","verb":"create","user":{"username":"system:admin","groups":["system:masters","system:authenticated"]},"sourceIPs":["127.0.0.1"],"userAgent":"okhttp/3.12.12","objectRef":{"resource":"deployments","namespace":"cfd3995c-c011-4e1f-aa05-8c6787d1861b","name":"deployment-synchronizer","apiGroup":"apps","apiVersion":"v1"},"responseStatus":{"metadata":{},"code":201},"requestReceivedTimestamp":"2022-12-02T09:02:10.502140Z","stageTimestamp":"2022-12-02T09:02:10.511688Z","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":""}},
          {"level":"Metadata","auditID":"4366e4f2-f437-44f7-bc8d-97dec21b54ef","stage":"RequestReceived","requestURI":"/apis/apps/v1/namespaces/cfd3995c-c011-4e1f-aa05-8c6787d1861b/deployments","verb":"create","user":{"username":"system:admin","groups":["system:masters","system:authenticated"]},"sourceIPs":["127.0.0.1"],"userAgent":"okhttp/3.12.12","objectRef":{"resource":"deployments","namespace":"cfd3995c-c011-4e1f-aa05-8c6787d1861b","apiGroup":"apps","apiVersion":"v1"},"requestReceivedTimestamp":"2022-12-02T09:02:10.583000Z","stageTimestamp":"2022-12-02T09:02:10.583000Z"},
          {"level":"Metadata","auditID":"4366e4f2-f437-44f7-bc8d-97dec21b54ef","stage":"ResponseComplete","requestURI":"/apis/apps/v1/namespaces/cfd3995c-c011-4e1f-aa05-8c6787d1861b/deployments","verb":"create","user":{"username":"system:admin","groups":["system:masters","system:authenticated"]},"sourceIPs":["127.0.0.1"],"userAgent":"okhttp/3.12.12","objectRef":{"resource":"deployments","namespace":"cfd3995c-c011-4e1f-aa05-8c6787d1861b","name":"deployment-operator","apiGroup":"apps","apiVersion":"v1"},"responseStatus":{"metadata":{},"code":201},"requestReceivedTimestamp":"2022-12-02T09:02:10.583000Z","stageTimestamp":"2022-12-02T09:02:10.612983Z","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":""}}
        ]
      }

      Daha fazla bilgi için Kubernetes belgelerinebakın.