Key Vault Secrets Expiration

💼 Management Samenvatting

Deze beveiligingsmaatregel waarborgt de correcte configuratie van secret expiration in Azure Key Vault en beschermt organisaties tegen aanzienlijke beveiligingsrisico's door automatische veroudering van gevoelige credentials af te dwingen.

Aanbeveling
IMPLEMENTEER SECRET EXPIRATION
Risico zonder
Medium
Risk Score
6/10
Implementatie
5u (tech: 3u)
Van toepassing op:
Azure Key Vault

Deze instelling is essentieel voor het handhaven van een veilige cloudomgeving en voorkomt bekende aanvalsvectoren door het afdwingen van security best practices. Secrets zonder vervaldatum vormen een kritiek beveiligingsrisico omdat gestolen credentials jarenlang bruikbaar blijven, zelfs na datalekken of onbevoegde toegang. Door expiration dates te verplichten, worden organisaties gedwongen tot regelmatige rotatie van credentials, waardoor de impact van credential theft aanzienlijk wordt beperkt.

PowerShell Modules Vereist
Primary API: Azure API
Connection: Connect-AzAccount
Required Modules: Az.Accounts, Az.KeyVault

Implementatie

Configureer vervaldatums voor alle secrets in Azure Key Vault met een maximale geldigheidsduur tussen 90 en 365 dagen, afhankelijk van de gevoeligheid en het gebruik van de betreffende secret. Deze aanpak dwingt organisaties tot het implementeren van geautomatiseerde rotatieprocessen en vermindert het risico van lange-termijn credential exposure.

Vereisten

Om secret expiration te implementeren in Azure Key Vault, moeten organisaties beschikken over een actieve Azure Key Vault instantie met beheerrechten. Deze beveiligingsmaatregel vereist toegang tot de Key Vault waarin de secrets zijn opgeslagen, en minimaal contributor-rechten op het Azure-abonnement of resource group niveau. Daarnaast is het essentieel dat de organisatie beschikt over een duidelijk secret management beleid dat de maximale geldigheidsduur per secret type definieert. Voor hoogwaardige secrets zoals database wachtwoorden of API-sleutels wordt een kortere geldigheidsduur van 90 tot 180 dagen aanbevolen, terwijl minder kritieke secrets zoals algemene configuratiewaarden een maximale duur van 365 dagen kunnen hebben. Organisaties moeten ook beschikken over geautomatiseerde rotatieprocessen om ervoor te zorgen dat secrets automatisch worden ververst voordat ze verlopen. Dit kan worden bereikt door middel van Azure Automation runbooks, Logic Apps workflows, of door gebruik te maken van Key Vault-integraties met applicaties en services die automatische secret refresh ondersteunen.

Monitoring

Gebruik PowerShell-script key-vault-secrets-expiration-set.ps1 (functie Invoke-Monitoring) – Controleren.

Het monitoren van secret expiration in Azure Key Vault is essentieel voor het handhaven van een veilige omgeving en het waarborgen van compliance met security best practices. Organisaties moeten regelmatig controleren welke secrets geen vervaldatum hebben ingesteld, omdat deze secrets een aanzienlijk beveiligingsrisico vormen. Secrets zonder vervaldatum kunnen jarenlang onbeperkt gebruikt worden, zelfs nadat ze mogelijk zijn gecompromitteerd of blootgesteld aan onbevoegde personen. Door gebruik te maken van het monitoring script kunnen beheerders een overzicht krijgen van alle secrets binnen een Key Vault en identificeren welke secrets nog geen expiration date hebben geconfigureerd. Het script genereert een rapport dat alle secrets zonder vervaldatum weergeeft, inclusief de naam van het secret, de Key Vault waarin het is opgeslagen, en de datum waarop het secret is aangemaakt. Deze informatie is cruciaal voor het prioriteren van remediation activiteiten en het waarborgen dat alle secrets binnen de organisatie voldoen aan het secret management beleid. Regelmatige monitoring, bijvoorbeeld maandelijks of kwartaallijks, zorgt ervoor dat nieuwe secrets die zonder expiration date zijn aangemaakt snel worden geïdentificeerd en gecorrigeerd voordat ze een beveiligingsrisico vormen.

Compliance en Auditing

Het implementeren van secret expiration in Azure Key Vault is een essentiële vereiste voor verschillende compliance frameworks en security standaarden die binnen de Nederlandse publieke sector van toepassing zijn. De CIS Azure Foundations Benchmark versie 5.3.3 vereist expliciet dat alle secrets in Key Vault een vervaldatum hebben geconfigureerd om ervoor te zorgen dat credentials niet onbeperkt geldig blijven. Deze controle is onderdeel van een bredere aanpak voor credential lifecycle management en vormt een fundamentele beveiligingsmaatregel tegen credential theft en misuse. Binnen het BIO (Baseline Informatiebeveiliging Overheid) framework komt secret expiration overeen met controle 09.04, die eist dat organisaties een gecontroleerd beheer voeren over de gehele levenscyclus van authenticatiegegevens, van aanmaak tot vernietiging. Dit omvat niet alleen het instellen van vervaldatums, maar ook het implementeren van geautomatiseerde rotatieprocessen en het waarborgen dat verlopen secrets daadwerkelijk worden vervangen of verwijderd. ISO 27001:2022 controle A.5.17 (Authentication information) stelt vergelijkbare eisen en benadrukt het belang van het beveiligen van authenticatiegegevens gedurende hun gehele levenscyclus. Deze standaard vereist dat organisaties maatregelen implementeren om ervoor te zorgen dat authenticatiegegevens veilig worden opgeslagen, regelmatig worden gewijzigd, en automatisch worden vernietigd wanneer ze niet langer nodig zijn. Voor Nederlandse overheidsorganisaties is het belangrijk om te beseffen dat het niet implementeren van secret expiration kan leiden tot non-compliance tijdens audits en kan resulteren in aanbevelingen of zelfs bevindingen in security assessments. Daarom is het essentieel dat organisaties niet alleen expiration dates configureren, maar ook documenteren hoe deze worden gehandhaafd en monitoren of alle secrets daadwerkelijk voldoen aan deze vereiste.

Remediatie

Gebruik PowerShell-script key-vault-secrets-expiration-set.ps1 (functie Invoke-Remediation) – Herstellen.

Het remediëren van secrets zonder expiration date is een kritieke beveiligingsmaatregel die moet worden uitgevoerd zodra secrets zonder vervaldatum worden geïdentificeerd. Het remediation script biedt een geautomatiseerde oplossing om expiration dates te configureren voor alle secrets binnen een Key Vault die nog geen vervaldatum hebben. Wanneer het script wordt uitgevoerd, worden alle secrets gescand en voor elke secret zonder expiration date wordt automatisch een vervaldatum ingesteld op basis van het secret management beleid van de organisatie. De standaard geldigheidsduur is doorgaans 180 dagen voor algemene secrets, maar kan worden aangepast aan de specifieke behoeften van de organisatie. Voor hoogwaardige secrets zoals database wachtwoorden of API-sleutels wordt aanbevolen een kortere geldigheidsduur van 90 tot 120 dagen te gebruiken, terwijl minder kritieke secrets een maximale duur van 365 dagen kunnen hebben. Het is belangrijk om te beseffen dat het instellen van expiration dates alleen het eerste deel van de remediatie vormt. Organisaties moeten ook geautomatiseerde rotatieprocessen implementeren om ervoor te zorgen dat secrets automatisch worden ververst voordat ze verlopen. Dit voorkomt serviceonderbrekingen en waarborgt dat applicaties en services continue toegang hebben tot geldige credentials. Azure Automation runbooks, Logic Apps workflows, of Key Vault-integraties met applicaties kunnen worden gebruikt om automatische secret refresh te implementeren. Daarnaast is het essentieel dat organisaties een monitoring proces opzetten om ervoor te zorgen dat nieuwe secrets die zonder expiration date worden aangemaakt onmiddellijk worden geïdentificeerd en gecorrigeerd, zodat het probleem niet opnieuw ontstaat.

Compliance & Frameworks

Automation

Gebruik het onderstaande PowerShell script om deze security control te monitoren en te implementeren. Het script bevat functies voor zowel monitoring (-Monitoring) als remediation (-Remediation).

PowerShell
<# ================================================================================ AZURE POWERSHELL SCRIPT - Nederlandse Baseline voor Veilige Cloud ================================================================================ .SYNOPSIS Key Vault Secrets Expiration Set .DESCRIPTION CIS Azure Foundations Benchmark - Control 8.10 Controleert of expiration is ingesteld voor secrets. .NOTES Filename: key-vault-secrets-expiration-set.ps1 Author: Nederlandse Baseline voor Veilige Cloud Version: 1.0 CIS Control: 8.10 #> #Requires -Version 5.1 #Requires -Modules Az.Accounts, Az.KeyVault [CmdletBinding()] param([Parameter()][switch]$Monitoring) $ErrorActionPreference = 'Stop' $PolicyName = "Key Vault Secrets Expiration Set" function Connect-RequiredServices { if (-not (Get-AzContext)) { Connect-AzAccount | Out-Null } } function Test-Compliance { $vaults = Get-AzKeyVault -ErrorAction SilentlyContinue $result = @{ TotalSecrets = 0; WithExpiration = 0 } foreach ($vault in $vaults) { $secrets = Get-AzKeyVaultSecret -VaultName $vault.VaultName -ErrorAction SilentlyContinue foreach ($secret in $secrets) { $result.TotalSecrets++ if ($secret.Expires) { $result.WithExpiration++ } } } return $result } try { Connect-RequiredServices if ($Monitoring) { $r = Test-Compliance Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "$PolicyName" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host "Total Secrets: $($r.TotalSecrets)" -ForegroundColor White Write-Host "With Expiration: $($r.WithExpiration)" -ForegroundColor $(if ($r.WithExpiration -eq $r.TotalSecrets) { 'Green' } else { 'Yellow' }) } else { $r = Test-Compliance Write-Host "`nSecret Expiration: $($r.WithExpiration)/$($r.TotalSecrets)" } } catch { Write-Error $_; exit 1 } # ================================================================================ # Standaard Invoke-* Functions (Auto-generated) # ================================================================================ function Invoke-Implementation { <# .SYNOPSIS Implementeert de configuratie #> [CmdletBinding()] param() Invoke-Remediation } function Invoke-Monitoring { <# .SYNOPSIS Controleert de huidige configuratie status #> [CmdletBinding()] param() $Monitoring = $true try { Connect-RequiredServices if ($Monitoring) { $r = Test-Compliance Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "$PolicyName" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host "Total Secrets: $($r.TotalSecrets)" -ForegroundColor White Write-Host "With Expiration: $($r.WithExpiration)" -ForegroundColor $(if ($r.WithExpiration -eq $r.TotalSecrets) { 'Green' } else { 'Yellow' }) } else { $r = Test-Compliance Write-Host "`nSecret Expiration: $($r.WithExpiration)/$($r.TotalSecrets)" } } catch { Write-Error $_; exit 1 } } function Invoke-Remediation { <# .SYNOPSIS Herstelt de configuratie naar de gewenste staat .DESCRIPTION Dit is een monitoring-only control, remediation delegeert naar monitoring #> [CmdletBinding()] param() Write-Host "[INFO] Dit is een monitoring-only control" -ForegroundColor Yellow Write-Host "[INFO] Running monitoring check..." -ForegroundColor Cyan Invoke-Monitoring }

Risico zonder implementatie

Risico zonder implementatie
Medium: Secrets met een lange geldigheidsduur zonder vervaldatum creëren een uitgebreide compromitteringsperiode. Een gestolen secret blijft jarenlang geldig en bruikbaar. Deze configuratie is verplicht volgens CIS 5.3.3. Het risico is gemiddeld door de blootstelling van credentials.

Management Samenvatting

Secret Expiration: Configureer vervaldatums voor alle secrets in Azure Key Vault met een aanbevolen geldigheidsduur tussen 90 en 365 dagen, afhankelijk van de gevoeligheid. Deze maatregel dwingt regelmatige rotatie af. Vereist: Geautomatiseerde rotatie (Azure Automation of Logic Apps). Configuratie: Key Vault → Secrets → Vervaldatum instellen. Geen extra kosten. Verplicht volgens CIS 5.3.3. Implementatietijd: 3-5 uur (inclusief expiration configuratie en rotation automatisering). Beperkt de compromitteringsperiode van credentials aanzienlijk.