Azure Key Vault mit Powershell erstellen
Erstellen eines Key Vaults für sichere Passworte
Einige Azure-Trainingslabs weisen die Teilnehmer an, einen bestimmten Benutzernamen und ein bestimmtes Passwort zu verwenden, z.B. ‘Student’ und ‘Pa55w.rd1234’. Betrüger scannen ständig virtuelle Maschinen und versuchen, sich mit diesen Anmeldeinformationen anzumelden. Sobald sie sich angemeldet haben, können die VMs für Krypto-Mining oder andere Aktivitäten verwendet werden, die nichts mit dem Training zu tun haben. Teilnehmer sollten deshalb kein Passwort mehr aus den Übungsanleitungen und den bereitgestellten Parameter Dateien verwenden, sondern sich selbst ein Passwort wählen und die Parameter Datei, die für das Erstellen der VM verwendet wird, anpassen.
Zugleich verweisen die Autoren in den Anleitungen auf den Key Vault: “Als bewährte Methode sollten Geheimnisse wie Kennwörter sicherer im Key Vault gespeichert werden.”
Was fehlt ist aber eine Anleitung zum Erstellen und verwenden des Key Vaults. Los geht’s!
1. Erstellen einer Ressourcengruppe
Als erstes erstellt man eine Ressourcengruppe in der gewünschten Region. Hierzu den Platzhalter <Azure_region> ersetzen
$location = '<Azure_region>'
$rgName = 'Secrets-RG'
New-AzResourceGroup -Name $rgName -Location $location
2. Passwort wählen
Jetzt überlegt man sich ein Passwort und ersetzt den <yourownindividualPassword> Platzhalter im folgenden Kommando.
Dass Passwort sollte mindestens 12 Zeichen umfassen und
- Kleinbuchstaben
- Großbuchstaben
- Eine Ziffer
- Ein Sonderzeichen
beinhalten.
Einige Passworte können nicht verwendet werden, wie man hier nachlesen kann
$yourPassword = '<yourownindividualPassword>'
3. Key Vault erstellen
Der neue Key Vault benötigt einen global eindeutigen Namen. Der Azure AD-Mandantenname ist bereits eindeutig und kann daher für den Key Vault benutzt werden:
Connect-AzureAD
$Tenant = (Get-AzureADTenantDetail).verifiedDomains.name[0]
$VaultName = $Tenant.TrimEnd('.onmicrosoft.com')
Zum Erstellen eines neuen Azure Key Vault führt man Folgendes aus:
New-AzKeyVault -Name $Vaultname `
-ResourceGroupName $rgName `
-Location $location `
-EnabledForDeployment `
-EnabledForTemplateDeployment `
-EnabledForDiskEncryption
Jetzt setzt man eine Zugriffsrichtlinie (Access policy) für den Key Vault, z.B. für den Benutzer, mit dem man den Mandanten erstellt hat:
- im Azure Portal zu Azure Active Directory -> Benutzer gehen
- auf den Benutzernamen klicken und die Object ID kopieren
- den Platzhalter
<Object ID>durch den kopierten Wert ersetzen
$UserObjectID = '<Object ID>'
Set-AzKeyVaultAccessPolicy -VaultName $VaultName -ResourceGroupName $rgName -ObjectId $UserObjectId `
-PermissionsToKeys decrypt,encrypt,unwrapKey,wrapKey,verify,sign,get,list,update,create,import,delete,backup,restore,recover,purge `
-PermissionsToSecrets get,list,set,delete,backup,restore,recover,purge `
-PermissionsToCertificates get,list,delete,create,import,update,managecontacts,getissuers,listissuers,setissuers,deleteissuers,manageissuers,recover,purge,backup,restore
4. Passwort konvertieren und im Key Vault speichern
Das Passwort muss vor dem speicher in eine sichere Zeichenkette konvertiert werden
$secretvalue = ConvertTo-SecureString $yourPassword -AsPlainText -Force
Jetzt kann man den Wert als Secret unter einem Namen im Key Vault speichern
Set-AzKeyVaultSecret -VaultName $VaultName -Name 'VMPassword' -SecretValue $secretvalue
5. ARM Parameter Datei zum Zugriff auf das Passwort
Die folgende Parameter Datei kann nun für Templates benutzt werden, mit denen VMs erstellt werden.
Vorher ersetzt man die <yourSubscriptionID> und <yourKeyVaultName> Platzhalter mit den entsprechenden Werten.
Beides bekommt man über diese Kommandos:
(Get-AzSubscription).id
(Get-AzKeyVault).VaultName
Die Datei enthält kein lesbares Klartext Passwort mehr, sondern einen Verweis auf den Key Vault und das VMPassword Secret.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vmSize": {
"value": "Standard_D2s_v3"
},
"adminUsername": {
"value": "Student"
},
"adminPassword": {
"reference": {
"keyVault": {
"id": "/subscriptions/<yourSubscriptionID>/resourceGroups/Secrets-RG/providers/Microsoft.KeyVault/vaults/<yourKeyVaultName>"
},
"secretName": "VMPassword"
}
}
}
}