58 Anhang

58.1 Verschlüsselung: Symmetrische und Asymmetrische Methoden

58.1.1 Einführung

Verschlüsselung ist ein grundlegendes Element der Informationssicherheit. Sie schützt sensible Daten vor unbefugtem Zugriff und Manipulation. Es gibt zwei Hauptarten der Verschlüsselung: symmetrische und asymmetrische Verschlüsselung. Dieses Kapitel behandelt die Grundlagen beider Verschlüsselungsmethoden, ihre Funktionsweise und Anwendungsbereiche.

58.1.2 Symmetrische Verschlüsselung

58.1.2.1 Grundlagen

Bei der symmetrischen Verschlüsselung wird derselbe Schlüssel sowohl zum Verschlüsseln als auch zum Entschlüsseln der Daten verwendet. Diese Methode ist effizient und schnell, aber sie erfordert, dass der Schlüssel sicher zwischen den Kommunikationsparteien ausgetauscht wird.

Schlüsselmerkmale: - Ein-Schlüssel-System: Der gleiche Schlüssel wird für Verschlüsselung und Entschlüsselung verwendet. - Schnelligkeit: Symmetrische Verschlüsselung ist im Allgemeinen schneller als asymmetrische Verschlüsselung. - Schlüsselaustauschproblem: Der sichere Austausch des Schlüssels zwischen den Parteien ist kritisch.

58.1.2.2 Algorithmen

Einige der gängigsten Algorithmen der symmetrischen Verschlüsselung sind:

58.1.2.3 Beispiel: AES-Verschlüsselung

Python-Code für AES-Verschlüsselung:

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes

# Schlüssel und Daten
key = get_random_bytes(16)  # AES-128
data = b"Dies ist ein geheimer Text"

# Verschlüsselung
cipher = AES.new(key, AES.MODE_CBC)
ciphertext = cipher.encrypt(pad(data, AES.block_size))
iv = cipher.iv

# Entschlüsselung
cipher_dec = AES.new(key, AES.MODE_CBC, iv=iv)
plaintext = unpad(cipher_dec.decrypt(ciphertext), AES.block_size)

print("Verschlüsselter Text:", ciphertext)
print("Entschlüsselter Text:", plaintext)

58.1.3 Asymmetrische Verschlüsselung

58.1.3.1 Grundlagen

Bei der asymmetrischen Verschlüsselung werden zwei verschiedene Schlüssel verwendet: ein öffentlicher Schlüssel zum Verschlüsseln der Daten und ein privater Schlüssel zum Entschlüsseln. Der öffentliche Schlüssel kann frei verteilt werden, während der private Schlüssel geheim bleibt.

Schlüsselmerkmale: - Zwei-Schlüssel-System: Ein öffentlicher Schlüssel für die Verschlüsselung und ein privater Schlüssel für die Entschlüsselung. - Sicherheit: Erhöhte Sicherheit durch getrennte Schlüssel. - Langsamkeit: Asymmetrische Verschlüsselung ist im Allgemeinen langsamer als symmetrische Verschlüsselung.

58.1.3.2 Algorithmen

Einige der gängigsten Algorithmen der asymmetrischen Verschlüsselung sind:

58.1.3.3 Beispiel: RSA-Verschlüsselung

Python-Code für RSA-Verschlüsselung:

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

# Generieren von RSA-Schlüsseln
key = RSA.generate(2048)
public_key = key.publickey()
private_key = key

# Daten
data = b"Dies ist ein geheimer Text"

# Verschlüsselung
cipher = PKCS1_OAEP.new(public_key)
ciphertext = cipher.encrypt(data)

# Entschlüsselung
cipher_dec = PKCS1_OAEP.new(private_key)
plaintext = cipher_dec.decrypt(ciphertext)

print("Verschlüsselter Text:", ciphertext)
print("Entschlüsselter Text:", plaintext)

58.1.4 Vergleich von symmetrischer und asymmetrischer Verschlüsselung

Merkmal Symmetrische Verschlüsselung Asymmetrische Verschlüsselung
Schlüsselanzahl 1 2
Geschwindigkeit Schnell Langsam
Sicherheit Abhängig von sicherem Hohe Sicherheit durch
Schlüsselaustausch getrennte Schlüssel
Schlüsselverteilung Problematisch Einfacher durch öffentlichen
Schlüssel
Anwendungsbereiche Datenverschlüsselung, Sichere Datenübertragung,
Festplattenverschlüsselung digitale Signaturen

58.1.5 Anwendungsbereiche

Symmetrische Verschlüsselung: - Verschlüsselung von großen Datenmengen. - Festplattenverschlüsselung. - VPN-Verbindungen.

Asymmetrische Verschlüsselung: - Sichere Schlüsselverteilung. - SSL/TLS für sichere Internetverbindungen. - Digitale Signaturen.

Sowohl symmetrische als auch asymmetrische Verschlüsselung haben ihre eigenen Stärken und Schwächen. In vielen Sicherheitsanwendungen werden beide Methoden kombiniert, um die Vorteile beider Ansätze zu nutzen. Ein tiefes Verständnis der Funktionsweise und der richtigen Anwendungsbereiche ist entscheidend für die Implementierung effektiver Sicherheitslösungen.

58.2 Public Key Infrastructure (PKI) in Kubernetes

58.2.1 Einführung

Eine Public Key Infrastructure (PKI) ist ein Rahmenwerk, das die Verwaltung von digitalen Zertifikaten und öffentlichen/privaten Schlüsselpaaren ermöglicht. In Kubernetes wird PKI verwendet, um die Sicherheit der Kommunikation zwischen verschiedenen Komponenten des Clusters zu gewährleisten, einschließlich API-Server, Kubelets und Benutzer. Dieses Kapitel beschreibt die Grundlagen der PKI, ihre Implementierung in Kubernetes und die Verwaltung von Zertifikaten.

58.2.2 Grundlagen der PKI

PKI basiert auf der Verwendung von digitalen Zertifikaten, die von einer vertrauenswürdigen Zertifizierungsstelle (Certificate Authority, CA) ausgestellt werden. Diese Zertifikate bestätigen die Identität von Entitäten (wie Servern oder Benutzern) und ermöglichen sichere, verschlüsselte Kommunikation.

Wichtige Komponenten der PKI sind: - Certificate Authority (CA): Eine vertrauenswürdige Entität, die Zertifikate ausstellt und signiert. - Zertifikate: Digitale Dokumente, die die Identität einer Entität bestätigen und einen öffentlichen Schlüssel enthalten. - Private Schlüssel: Geheime Schlüssel, die zur Erstellung von Signaturen und zur Entschlüsselung von Daten verwendet werden. - Public Schlüssel: Öffentliche Schlüssel, die zur Überprüfung von Signaturen und zur Verschlüsselung von Daten verwendet werden.

58.2.3 PKI in Kubernetes

In Kubernetes spielt PKI eine zentrale Rolle bei der Sicherung der Kommunikation zwischen verschiedenen Komponenten. Kubernetes verwendet TLS (Transport Layer Security) für die Verschlüsselung der Kommunikation und die Authentifizierung von Komponenten.

58.2.3.1 Zertifikate in Kubernetes

Kubernetes verwendet verschiedene Arten von Zertifikaten, darunter: - Serverzertifikate: Für API-Server, Kubelets und andere Komponenten. - Clientzertifikate: Für Benutzer und Komponenten, die mit dem API-Server kommunizieren. - CA-Zertifikate: Zur Validierung von Server- und Clientzertifikaten.

58.2.3.2 Zertifikatsverwaltung

Kubernetes bietet mehrere Methoden zur Verwaltung von Zertifikaten: - Selbstsignierte Zertifikate: Zertifikate, die von einer selbstsignierten CA erstellt werden. - Von Dritten ausgestellte Zertifikate: Zertifikate, die von einer externen CA ausgestellt werden. - Kubeadm: Ein Tool zur Automatisierung der Cluster-Erstellung und Zertifikatsverwaltung.

58.2.4 Implementierung einer PKI in Kubernetes

58.2.4.1 1. Erstellung einer Zertifizierungsstelle (CA)

Erstellen Sie eine CA mithilfe von OpenSSL:

Generieren Sie den CA-Schlüssel:

openssl genpkey -algorithm RSA -out ca.key -aes256

Erstellen Sie ein CA-Zertifikat:

openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt -subj "/CN=Kubernetes-CA"

58.2.4.2 2. Erstellung von Server- und Client-Zertifikaten

Generieren Sie den Server-Schlüssel:

openssl genpkey -algorithm RSA -out server.key -aes256

Erstellen Sie ein Zertifikatsignierungsantrag (CSR):

openssl req -new -key server.key -out server.csr -subj "/CN=kube-apiserver"

Signieren Sie das Zertifikat mit der CA:

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256

58.2.4.3 3. Verwendung der Zertifikate in Kubernetes

Kopieren Sie die Zertifikate und Schlüssel auf die entsprechenden Kubernetes-Komponenten. Beispiel für den API-Server:

API-Server-Konfigurationsdatei (kube-apiserver.yaml):

apiVersion: v1
kind: Pod
metadata:
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
  - name: kube-apiserver
    image: k8s.gcr.io/kube-apiserver:v1.21.0
    command:
    - kube-apiserver
    - --advertise-address=$(NODE_IP)
    - --allow-privileged=true
    - --authorization-mode=Node,RBAC
    - --client-ca-file=/etc/kubernetes/pki/ca.crt
    - --tls-cert-file=/etc/kubernetes/pki/server.crt
    - --tls-private-key-file=/etc/kubernetes/pki/server.key
    volumeMounts:
    - mountPath: /etc/kubernetes/pki
      name: pki
      readOnly: true
  volumes:
  - name: pki
    hostPath:
      path: /etc/kubernetes/pki

58.2.4.4 4. Zertifikatsrotation

Kubernetes unterstützt die automatische Rotation von Zertifikaten, um die Sicherheit zu erhöhen. Dies kann durch die Konfiguration von kubelet und kube-controller-manager erreicht werden.

Kubelet-Konfiguration:

apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
serverTLSBootstrap: true
rotateCertificates: true

Kube-controller-manager-Konfiguration:

apiVersion: kubecontrollerconfig.k8s.io/v1
kind: KubeControllerManagerConfiguration
clusterSigningCertFile: /etc/kubernetes/pki/ca.crt
clusterSigningKeyFile: /etc/kubernetes/pki/ca.key

58.2.5 Überprüfung und Fehlerbehebung

Überprüfen Sie die Zertifikate:

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout

Überprüfen Sie die Kubelet-Zertifikate:

kubectl get csr
kubectl certificate approve <csr-name>

58.2.6 Best Practices

Eine robuste PKI ist entscheidend für die Sicherheit eines Kubernetes-Clusters. Durch die Implementierung von PKI können Administratoren sicherstellen, dass die Kommunikation zwischen den Komponenten verschlüsselt und authentifiziert ist. Eine sorgfältige Verwaltung und regelmäßige Überprüfung der Zertifikate tragen zur Aufrechterhaltung der Sicherheit und Integrität des Clusters bei.

58.3 Netzwerk-Grundlagen: OSI-Modell von Layer 1 bis Layer 7

58.3.1 Einführung

Das OSI-Modell (Open Systems Interconnection) ist ein konzeptionelles Rahmenwerk, das die Standardisierung der Kommunikationsfunktionen eines Telekommunikations- oder Computersystems ohne Rücksicht auf seine zugrunde liegende interne Struktur und Technologie ermöglicht. Es besteht aus sieben Schichten, die jeweils spezifische Netzwerkfunktionen und -dienste bereitstellen. Dieses Kapitel gibt einen Überblick über jede der sieben Schichten des OSI-Modells.

58.3.2 Layer 1: Physische Schicht (Physical Layer)

Funktion: Die physische Schicht definiert die Hardwarekomponenten und physikalischen Verbindungen, die für die Übertragung von Rohdaten über ein physisches Medium (z. B. Kupferkabel, Glasfaser) erforderlich sind.

Hauptaufgaben: - Übertragung von Bits (0 und 1) über ein physisches Medium. - Definition der physikalischen Eigenschaften von Schnittstellen und Medien. - Steuerung von Signalübertragung und Modulation.

Beispiele: - Netzwerkkabel (Ethernet, Glasfaser) - Hubs und Repeater - Stecker und Buchsen

Funktion: Die Sicherungsschicht stellt die Fehlererkennung und -korrektur sicher und sorgt für eine zuverlässige Datenübertragung zwischen direkt verbundenen Netzwerkknoten.

Hauptaufgaben: - Rahmenbildung (Framing): Segmentierung der Daten in Frames. - Medienzugriffskontrolle (MAC): Regelung des Zugriffs auf das physische Medium. - Fehlererkennung und -korrektur: Erkennung und Behebung von Übertragungsfehlern.

Beispiele: - Ethernet (IEEE 802.3) - Wi-Fi (IEEE 802.11) - MAC-Adressen - Switches und Bridges

58.3.4 Layer 3: Netzwerkschicht (Network Layer)

Funktion: Die Netzwerkschicht ist verantwortlich für die logische Adressierung und das Routing von Datenpaketen über verschiedene Netzwerke hinweg.

Hauptaufgaben: - Logische Adressierung: Zuweisung von IP-Adressen. - Routing: Bestimmung des optimalen Pfads für Datenpakete. - Fragmentierung und Reassemblierung: Aufteilung von Datenpaketen in kleinere Einheiten und deren Zusammenführung.

Beispiele: - IP (Internet Protocol) - Router - ICMP (Internet Control Message Protocol) - OSPF (Open Shortest Path First)

58.3.5 Layer 4: Transportschicht (Transport Layer)

Funktion: Die Transportschicht gewährleistet die zuverlässige Übertragung von Daten zwischen Endgeräten, unabhängig von der darunterliegenden Netzwerkinfrastruktur.

Hauptaufgaben: - Segmentierung und Reassemblierung: Aufteilung von Datenströmen in Segmente. - Fehlererkennung und -korrektur: Sicherstellung der Datenintegrität. - Flusskontrolle: Verhinderung von Überlastungen durch Datenströme. - Sitzungsverwaltung: Auf- und Abbau von Kommunikationssitzungen.

Beispiele: - TCP (Transmission Control Protocol) - UDP (User Datagram Protocol) - Portnummern

58.3.6 Layer 5: Sitzungsschicht (Session Layer)

Funktion: Die Sitzungsschicht verwaltet und synchronisiert die Kommunikation zwischen Anwendungen. Sie sorgt für den Auf- und Abbau sowie die Verwaltung von Sitzungen.

Hauptaufgaben: - Sitzungsaufbau und -abbau: Initiierung und Beendigung von Sitzungen. - Sitzungsverwaltung: Synchronisierung und Wiederherstellung von Sitzungen. - Dialogsteuerung: Verwaltung der Kommunikationsrichtung und -sequenz.

Beispiele: - RPC (Remote Procedure Call) - NetBIOS (Network Basic Input/Output System)

58.3.7 Layer 6: Darstellungsschicht (Presentation Layer)

Funktion: Die Darstellungsschicht übersetzt und formatiert Daten zwischen Anwendungs- und Transportschicht. Sie stellt sicher, dass die Daten in einer für die Anwendung verständlichen Form vorliegen.

Hauptaufgaben: - Datenformatierung: Umwandlung von Daten in verschiedene Formate. - Datenverschlüsselung: Verschlüsselung und Entschlüsselung von Daten. - Datenkomprimierung: Reduzierung der Datenmenge.

Beispiele: - SSL/TLS (Secure Sockets Layer/Transport Layer Security) - JPEG, GIF, PNG (Bildformate) - ASCII, EBCDIC (Zeichencodes)

58.3.8 Layer 7: Anwendungsschicht (Application Layer)

Funktion: Die Anwendungsschicht stellt die Schnittstelle zwischen der Netzwerkinfrastruktur und den Anwendungsprogrammen bereit. Sie ermöglicht den direkten Zugriff auf Netzwerkdienste für Endbenutzer und Anwendungen.

Hauptaufgaben: - Bereitstellung von Netzwerkanwendungen: Unterstützung von Anwendungen wie E-Mail, Webbrowser und Dateitransfer. - Netzwerkverwaltung: Verwaltung von Netzwerkressourcen und -diensten. - Authentifizierung: Verifizierung der Identität von Benutzern und Anwendungen.

Beispiele: - HTTP/HTTPS (Hypertext Transfer Protocol/Secure) - FTP (File Transfer Protocol) - SMTP (Simple Mail Transfer Protocol) - DNS (Domain Name System)

Das OSI-Modell bietet einen strukturierten Ansatz zur Standardisierung der Netzwerkkommunikation. Jede Schicht des Modells hat spezifische Aufgaben und Verantwortlichkeiten, die zusammenarbeiten, um eine zuverlässige und effiziente Datenübertragung zu gewährleisten. Ein tiefes Verständnis des OSI-Modells ist entscheidend für die Fehlerbehebung, Optimierung und Verwaltung von Netzwerken.