Was ist Azure Key Vault?
Azure Key Vault ist ein Cloud-Dienst von Microsoft zum sicheren Speichern und Zugreifen auf Geheimnisse (Secrets). Geheimnisse sind alles, worauf du den Zugriff streng kontrollieren willst - API-Schlüssel, Passwörter, Verbindungsstrings, Zertifikate oder kryptografische Schlüssel.
Secrets Management
Sichere Speicherung und Zugriffskontrolle für Tokens, Passwörter, API-Keys, Verbindungsstrings und andere Geheimnisse.
Key Management
Erstelle und kontrolliere Verschlüsselungsschlüssel, die deine Daten schützen. Unterstützt HSM-geschützte Keys.
Zertifikats-Verwaltung
Verwalte TLS/SSL-Zertifikate mit automatischer Erneuerung und einfachem Deployment.
Service-Tiers
| Feature | Standard Basis | Premium HSM |
|---|---|---|
| Software-geschützte Keys | ✓ | ✓ |
| HSM-geschützte Keys | ✗ | ✓ FIPS 140-3 Level 3 |
| Secrets | ✓ | ✓ |
| Zertifikate | ✓ | ✓ |
| Verschlüsselung | FIPS 140 Level 1 | FIPS 140-3 Level 3 |
Zero Trust: Azure Key Vault folgt dem Zero-Trust-Prinzip - "Verify explicitly", "Use least privilege access" und "Assume breach".
Wie funktioniert Azure Key Vault?
Key Vault hat zwei Ebenen: die Management Plane (Verwaltung des Vault selbst) und die Data Plane (Zugriff auf Secrets, Keys, Zertifikate).
Anfrage-Fluss: App → Key Vault
Tipp: Hover über die Boxen im Diagramm, um mehr Details zu erfahren!
Management Plane
Verwaltung des Key Vault selbst:
- Key Vault erstellen / löschen
- Zugriffsrichtlinien konfigurieren
- Firewall-Regeln setzen
- Netzwerkzugriff steuern
Data Plane
Arbeit mit den Inhalten:
- Secrets lesen / schreiben
- Keys für Verschlüsselung nutzen
- Zertifikate verwalten
- Backup / Restore
Rollen im Key Vault
| Rolle | Aufgabe |
|---|---|
| Vault Owner | Erstellt Key Vaults, hat vollen Zugriff, richtet Auditing ein |
| Vault Consumer | Nutzt Secrets/Keys gemäß zugewiesener Berechtigungen |
| Security Admin | Überwacht Nutzung, kontrolliert Compliance |
| Developer | Integriert Key Vault über SDK in Anwendungen |
Was kann im Key Vault gespeichert werden?
Key Vault speichert drei Arten von Objekten. Klicke auf die Werte unten, um sie ein-/auszublenden:
Typische Secrets in einem .NET 8 Backend
Namenskonvention: Key Vault erlaubt keine Doppelpunkte (:) in Secret-Namen. Verwende stattdessen -- (zwei Striche) als Trennzeichen. Der ASP.NET Core Configuration Provider ersetzt diese automatisch durch :.
Secrets
Beliebige Zeichenketten bis 25KB. Ideal für Passwörter, Connection Strings, API-Keys.
Am häufigsten
Keys
Kryptografische Schlüssel (RSA, EC). Für Verschlüsselung, Signierung, Wrap/Unwrap.
Kryptografie
Certificates
X.509-Zertifikate mit Auto-Renewal. Für TLS/SSL und Code-Signing.
Infrastruktur
Authentifizierung am Key Vault
Um auf Key Vault zuzugreifen, muss sich deine App über Microsoft Entra ID (Azure AD) authentifizieren. Es gibt drei Methoden - wähle eine:
🛡 Managed Identity Empfohlen
Azure verwaltet die Identität automatisch. Keine Credentials im Code nötig. Azure rotiert das Token selbstständig.
📄 Service Principal + Zertifikat
App registriert sich in Entra ID und authentifiziert sich per X.509-Zertifikat. Für Apps außerhalb von Azure.
🔓 Service Principal + Secret
Authentifizierung per Client-ID und Client-Secret. Einfach, aber nicht empfohlen.
DefaultAzureCredential - Der universelle Ansatz
Das Azure SDK bietet DefaultAzureCredential, das automatisch die richtige Auth-Methode wählt:
Integration in .NET 8 Backend
Schritt-für-Schritt Anleitung zur Einrichtung von Azure Key Vault als Configuration Provider.
Installiere die benötigten NuGet-Pakete in deinem Projekt:
# Key Vault Configuration Provider
dotnet add package Azure.Extensions.AspNetCore.Configuration.Secrets
# Azure Identity (für DefaultAzureCredential)
dotnet add package Azure.Identity
# Optional: Direkte Secret-Client-Nutzung
dotnet add package Azure.Security.KeyVault.Secrets
{
"KeyVaultName": "mein-keyvault-name",
"Logging": {
"LogLevel": {
"Default": "Information"
}
}
}
Den tatsächlichen Vault-Namen aus dem Azure Portal verwenden (z.B. contoso-vault-prod).
using Azure.Identity;
var builder = WebApplication.CreateBuilder(args);
// Key Vault als Configuration Provider hinzufügen
if (builder.Environment.IsProduction())
{
builder.Configuration.AddAzureKeyVault(
new Uri($"https://{builder.Configuration["KeyVaultName"]}.vault.azure.net/"),
new DefaultAzureCredential());
}
// Services registrieren
builder.Services.AddControllers();
var app = builder.Build();
app.MapControllers();
app.Run();
In der Produktion werden Secrets aus Key Vault geladen. Lokal kannst du weiterhin appsettings.Development.json oder User Secrets nutzen.
Secrets werden automatisch in die IConfiguration geladen und können wie gewohnt genutzt werden:
public class MyService
{
private readonly string _connectionString;
public MyService(IConfiguration configuration)
{
// Secret-Name im Vault: "ConnectionStrings--DefaultDb"
// Wird automatisch zu: "ConnectionStrings:DefaultDb"
_connectionString = configuration
.GetConnectionString("DefaultDb")!;
}
}
// Options-Klasse definieren
public class JwtSettings
{
public string SecretKey { get; set; } = "";
public string Issuer { get; set; } = "";
public int ExpiryMinutes { get; set; }
}
// In Program.cs registrieren
builder.Services.Configure<JwtSettings>(
builder.Configuration.GetSection("Jwt"));
// Im Service per DI nutzen
public class AuthService(IOptions<JwtSettings> jwtSettings)
{
private readonly JwtSettings _jwt = jwtSettings.Value;
}
Per Azure CLI oder Azure Portal:
# Key Vault erstellen
az keyvault create \
--name mein-keyvault-name \
--resource-group MeineRG \
--location westeurope
# Secrets hinzufügen
az keyvault secret set \
--vault-name mein-keyvault-name \
--name "ConnectionStrings--DefaultDb" \
--value "Server=tcp:myserver.database.windows.net;..."
az keyvault secret set \
--vault-name mein-keyvault-name \
--name "Jwt--SecretKey" \
--value "mein-super-geheimer-jwt-key"
# App Service Managed Identity Zugriff geben
az keyvault set-policy \
--name mein-keyvault-name \
--object-id {APP_OBJECT_ID} \
--secret-permissions get list
Lokal authentifiziert sich DefaultAzureCredential über Azure CLI oder Visual Studio:
# Einmalig: Bei Azure anmelden
az login
# Optional: Key Vault auch in Development laden
# (dann if-Bedingung in Program.cs entfernen)
var builder = WebApplication.CreateBuilder(args);
// Key Vault in ALLEN Umgebungen laden
var keyVaultName = builder.Configuration["KeyVaultName"];
if (!string.IsNullOrEmpty(keyVaultName))
{
builder.Configuration.AddAzureKeyVault(
new Uri($"https://{keyVaultName}.vault.azure.net/"),
new DefaultAzureCredential());
}
using Azure.Extensions.AspNetCore.Configuration.Secrets;
using Azure.Identity;
builder.Configuration.AddAzureKeyVault(
new Uri($"https://{builder.Configuration["KeyVaultName"]}.vault.azure.net/"),
new DefaultAzureCredential(),
new AzureKeyVaultConfigurationOptions
{
// Secrets alle 5 Minuten neu laden
ReloadInterval = TimeSpan.FromMinutes(5),
// Optional: Nur bestimmte Secrets laden
Manager = new KeyVaultSecretManager()
});
// Für User-Assigned Managed Identity:
builder.Configuration.AddAzureKeyVault(
new Uri($"https://{builder.Configuration["KeyVaultName"]}.vault.azure.net/"),
new DefaultAzureCredential(new DefaultAzureCredentialOptions
{
ManagedIdentityClientId = builder.Configuration["AzureADManagedIdentityClientId"]
}));
Best Practices
✓ Do's
- Ein Key Vault pro App + Umgebung - Trennung von Dev, Staging, Prod
- Managed Identity verwenden - Keine Credentials im Code
- Azure RBAC nutzen - Statt Legacy Access Policies
- Least Privilege Principle - Nur
Get+Listfür Apps - Auditing aktivieren - Alle Zugriffe protokollieren
- Soft-Delete aktivieren - Schutz vor versehentlichem Löschen
- Netzwerkzugriff einschränken - Private Endpoints oder Service Endpoints
✗ Don'ts
- Secrets im Code oder appsettings.json speichern
- Key Vault als allgemeinen Config-Store nutzen - Dafür Azure App Configuration verwenden
- Service Principal + Secret verwenden - Henne-Ei-Problem
- Einen Key Vault für alle Apps teilen - Blast Radius!
- Legacy Access Policies - Sicherheitslücken, kein PIM-Support
- Zertifikate als Secrets speichern - Dafür Certificate-Typ verwenden
- Kunden-Konfiguration im Key Vault - Azure Storage nutzen
Environments-Strategie für .NET 8
| Umgebung | Secret-Quelle | Auth-Methode |
|---|---|---|
| Development | User Secrets (dotnet user-secrets) |
Azure CLI / Visual Studio |
| Staging | Azure Key Vault (Staging-Vault) | Managed Identity |
| Production | Azure Key Vault (Prod-Vault) | Managed Identity |
Vollständiges Beispiel: Program.cs
using Azure.Identity;
var builder = WebApplication.CreateBuilder(args);
// ============================================
// Key Vault Configuration Provider
// ============================================
var keyVaultName = builder.Configuration["KeyVaultName"];
if (!string.IsNullOrEmpty(keyVaultName))
{
builder.Configuration.AddAzureKeyVault(
new Uri($"https://{keyVaultName}.vault.azure.net/"),
new DefaultAzureCredential());
}
// ============================================
// Services
// ============================================
builder.Services.AddControllers();
// Secrets über Options Pattern nutzen
builder.Services.Configure<JwtSettings>(
builder.Configuration.GetSection("Jwt"));
// Connection String aus Key Vault
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(
builder.Configuration.GetConnectionString("DefaultDb")));
var app = builder.Build();
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Wissenstest: Azure Key Vault
Teste dein Wissen mit diesen Fragen!