| .. | ||
| aufgabe.ps1 | ||
| index.html | ||
| musterloesung.ps1 | ||
| README.md | ||
| test_aufgabe.ps1 | ||
PS 12: Sicherheit, Execution Policies & SecretManagement 🛡️
Willkommen zu Modul 12 des PowerShell 7+ DevOps-Kurses!
In Enterprise- und Cloud-Umgebungen ist die Sicherheit von Zugangsdaten, API-Schlüsseln und Skriptausführungen oberste Priorität. PowerShell bietet mit [SecureString], [PSCredential] und dem modernen Modul Microsoft.PowerShell.SecretManagement ein robustes Fundament gegen Credential Leaks und unsichere Klartext-Passwörter im Code.
💡 1. Das Wichtigste in Kürze
A. Execution Policies (Ausführungsrichtlinien)
Execution Policies sind eine Schutzplanke (Safety Guardrail), um versehentliches Ausführen ungetesteter Skripte zu verhindern:
| Richtlinie | Bedeutung |
|---|---|
Restricted |
Keine Skripte erlaubt, nur interaktive Befehle. |
RemoteSigned |
Lokale Skripte erlaubt; aus dem Internet heruntergeladene Skripte müssen digital signiert sein. |
AllSigned |
Alle Skripte müssen von einem vertrauenswürdigen Herausgeber signiert sein. |
Bypass / Unrestricted |
Keine Blockaden (nur für CI/CD-Pipelines und kontrollierte Container!). |
B. [SecureString] & [PSCredential]
Passwörter dürfen niemals als Klartext-Strings im Speicher oder in Skriptdateien liegen. Ein [SecureString] wird im Arbeitsspeicher verschlüsselt gehalten:
# Passwort sicher erfassen oder konvertieren:
$secPass = ConvertTo-SecureString "MeinGeheimesPasswort123!" -AsPlainText -Force
# Typensicheres PSCredential erzeugen:
$cred = [PSCredential]::new("admin@cloudcorp.de", $secPass)
# Sicher an Cloud-Cmdlets übergeben:
Connect-AzAccount -Credential $cred
C. Modernes SecretManagement (Microsoft.PowerShell.SecretManagement)
Das moderne SecretManagement-Ökosystem abstrahiert Secrets: Skripte greifen über Get-Secret und Set-Secret auf Passwörter zu, unabhängig davon, ob im Hintergrund Azure Key Vault, HashiCorp Vault, KeePass oder der lokale Windows Credential Manager verwendet wird:
# Standardisierter Secret-Zugriff:
$dbKey = Get-Secret -Name "ProductionDbToken" -AsPlainText
🎼 Die didaktische Analogie: "Der gepanzerte Geldtransporter"
- Klartext-Passwort im Code:
Bargeld liegt offen auf dem Beifahrersitz eines Cabrios – jeder, der durch das Skriptfenster (oder Git-Repository) schaut, kann es sofort stehlen. [SecureString]:
Das Geld wird sofort in einen versiegelten Stahlkoffer gepackt. Es ist unlesbar, bis der autorisierte Empfänger es mit dem Schlüssel öffnet.SecretVault:
Ein unterirdischer Banktresor. Du musst dir nur noch den Namen des Schließfachs ("DbPassword") merken, nicht die Zahlenkombination des Schlosses.
🎯 Aufgaben & Teilziele in aufgabe.ps1
- TODO 1:
New-SecureCredentials
Erzeuge ein sicheres[PSCredential]-Objekt aus Benutzername und Passwort mitConvertTo-SecureString. - TODO 2:
Protect-SensitiveString&Unprotect-SensitiveString
Verschlüssele sensible Strings mitConvertFrom-SecureStringund entschlüssele sie über[System.Net.NetworkCredential]. - TODO 3:
Get-SecurityAuditReport
Prüfe LanguageMode, ExecutionPolicy und Admin-Rechte und berechne einen Security-Score. - TODO 4:
Invoke-SecretVaultSimulation
Implementiere einen modularen Secret-Store mit AktionenSet,Get,RemoveundList.
🧪 Tests ausführen
Invoke-Pester ./test_aufgabe.ps1