it-praxisportal/courses/powershell/12_sicherheit_und_credentials_management/README.md

3.4 KiB
Raw Blame History

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

  1. TODO 1: New-SecureCredentials
    Erzeuge ein sicheres [PSCredential]-Objekt aus Benutzername und Passwort mit ConvertTo-SecureString.
  2. TODO 2: Protect-SensitiveString & Unprotect-SensitiveString
    Verschlüssele sensible Strings mit ConvertFrom-SecureString und entschlüssele sie über [System.Net.NetworkCredential].
  3. TODO 3: Get-SecurityAuditReport
    Prüfe LanguageMode, ExecutionPolicy und Admin-Rechte und berechne einen Security-Score.
  4. TODO 4: Invoke-SecretVaultSimulation
    Implementiere einen modularen Secret-Store mit Aktionen Set, Get, Remove und List.

🧪 Tests ausführen

Invoke-Pester ./test_aufgabe.ps1