Ansichten:
Profilanwendbarkeit: Stufe 1
Die Datei azure.json in einem Azure Kubernetes Service (AKS) Cluster ist eine Konfigurationsdatei, die von der Kubernetes-Cloud-Anbieter-Integration für Azure verwendet wird. Diese Datei enthält wesentliche Details, die es dem Kubernetes-Cluster ermöglichen, effektiv mit Azure Resources zu interagieren. Sie ist Teil der Azure Cloud Provider-Konfiguration und ermöglicht es Kubernetes-Komponenten, mit Azure Services für Funktionen wie Load Balancer, Speicher und Netzwerk zu kommunizieren.
Stellen Sie sicher, dass die Datei root:root gehört.
Die Datei azure.json in der AKS-Struktur enthält typischerweise:
  • Mandanten-ID: Die Azure-Mandanten-ID, in der sich der AKS Cluster befindet.
  • Abonnement-ID: Die Azure Subscription-ID, die für Abrechnung und Ressourcenverwaltung verwendet wird.
  • AAD-Client-ID: Die Client-ID der Azure Active Directory (AAD)-Anwendung, die vom Kubernetes-Cloud-Anbieter verwendet wird, um mit Azure Resources zu interagieren.
  • AAD-Clientgeheimnis: Das Geheimnis für die AAD-Anwendung.
  • Ressourcengruppe: Der Name der Ressourcengruppe, in der sich die AKS Cluster-Ressourcen befinden.
  • Location: The Azure region where the AKS cluster is deployed.
  • VM-Typ: Gibt den Typ der von dem Cluster verwendeten VMs an (z. B. Standard-VMs oder Virtual Machine Scale Sets).
  • Subnet-Name, Sicherheitsgruppenname, Vnet-Name und Vnet-Ressourcengruppe: Netzwerkdetails für den Cluster.
  • Routentabellenname: Der Name der Routentabelle für den Cluster.
  • Speichertyp: Der Standardtyp des Speicherkontos, der für Kubernetes-Persistent-Volumes verwendet wird.
Hinweis
Hinweis
Siehe die Azure AKS-Dokumentation für den Standardwert.

Prüfung

Method 1
  1. SSH zum entsprechenden Worker-Knoten.
  2. Geben Sie den folgenden Befehl ein, um zu überprüfen, ob der Kubelet-Dienst läuft:
    sudo systemctl status kubelet
    Die Ausgabe sollte Aktiv: aktiv (läuft) zurückgeben.
  3. Führen Sie den folgenden Befehl auf jedem Knoten aus, um die entsprechende Kubelet-Konfigurationsdatei zu finden:
    ps -ef | grep kubelet
    Die Ausgabe sollte etwas Ähnliches wie --config /etc/kubernetes/azure.json zurückgeben, was den Speicherort der Kubelet-Konfigurationsdatei darstellt.
  4. Führen Sie den folgenden Befehl aus:
    stat -c %U:%G /etc/kubernetes/azure.json
    Überprüfen Sie, ob die Eigentümerschaft auf root:root gesetzt ist.
Method 2
Erstellen und Ausführen eines privilegierten Pods
  1. Run a pod that is privileged enough to access the host's file system. To do this, deploy a pod that uses the hostPath volume to mount the node's file system into the pod.
    Ein Beispiel für eine einfache Pod-Definition, die das Root-Verzeichnis des Hosts im Pod unter /host einbindet:
    apiVersion: v1
    kind: Pod
    metadata:
      name: file-check
    spec:
      volumes:
      - name: host-root
        hostPath:
          path: /
          type: Directory
      containers:
      - name: nsenter
        image: busybox
        command: ["sleep", "3600"]
        volumeMounts:
        - name: host-root
          mountPath: /host
        securityContext:
          privileged: true
  2. Speichern Sie dies in einer Datei (z.B. file-check-pod.yaml) und erstellen Sie das Pod:
    kubectl apply -f file-check-pod.yaml
  3. Sobald das Pod läuft, führen Sie einen Exec-Befehl aus, um die Dateibesitzrechte auf dem Knoten zu überprüfen.
    kubectl exec -it file-check -- sh
  4. Jetzt befinden Sie sich in einer Shell innerhalb des Pods, aber Sie können über das /host-Verzeichnis auf das Dateisystem des Knotens zugreifen und die Eigentümerschaft der Datei überprüfen:
    ls -l /etc/kubernetes/azure.json
    Überprüfen Sie, ob die Eigentümerschaft auf root:root gesetzt ist.

Wiederherstellung

Führen Sie den folgenden Befehl aus (unter Verwendung des im Audit-Schritt identifizierten Dateispeicherorts der Konfigurationsdatei):
chown root:root /etc/kubernetes/azure.json