Hantera hemligheter i dina ARM-mallar genom att läsa från Azure Key Vault
Infrastruktur som kod (IaC) beskriver kraven på din infrastruktur som läsbara textfiler. Azure Resource Manager-mallar är en form av IaC.
Precis som programkod kan du hantera infrastrukturkoden i ett system för versionskontroll som Git. På så sätt kan du samarbeta med andra och spåra ändringar i infrastrukturkraven i takt med att de utvecklas.
Precis som när det gäller programkod bör du inte hårdkoda känslig information som lösenord eller API-nycklar i ARM-mallarna. Då kan alla med läsbehörighet till lagringsplatsen komma åt den här hemliga informationen.
Även om bara auktoriserade personer i organisationen ska ha åtkomst till känslig information så behövs den även i dina ARM-mallar. Azure Key Vault är ett sätt att skydda känslig information.
Azure Key Vault skyddar känslig information
Azure Key Vault är en molntjänst som fungerar som ett säkert lager för hemligheter. Du kan skapa flera säkra containrar, kallade valv, i Key Vault. De här valven stöds av säkerhetsmoduler på maskinvarunivå (HSM:er). Med valv så minskar risken för att säkerhetsinformation förloras av misstag eftersom lagringen av hemligheter centraliseras. Valv kontrollerar och loggar dessutom åtkomsten till allt som lagras i dem.
Du kan lagra både nycklar och hemligheter i Key Vault. De många funktionerna gör det ett bra val för hantering av hemligheter, men även att använda i distributionsprocesser.
Rollbaserad åtkomstkontroll. Du kan hantera Key Vault-instansen med hjälp av olika roller, så att både appar och olika nivåer av administratörer kan använda den.
Tillåta användare och appar. Du kan konfigurera Key Vault så att både enskilda användare och appar får åtkomst. För appar skapar du ett huvudnamn för tjänsten. I själva verket kan du konfigurera Key Vault så att bara huvudnamn för tjänster har åtkomst.
Kommentar
Ett huvudnamn för en tjänst är en identitet som skapas för att appar, värdbaserade tjänster och automatiserade verktyg ska få åtkomst till Azure-resurser. Du begränsar åtkomsten till resurser genom att huvudnamnet endast tilldelas en roll eller uppsättning roller som har begränsad åtkomstbehörighet. På så sätt får du större kontroll över vad och hur mycket något kan komma åt dina resurser.
Kan interagera med ARM-mallar. Under distributionen av en ARM-mall kan du läsa från ett nyckelvalv. Det krävs lite konfiguration för att det ska fungera. Nästa avsnitt innehåller mer information.
Konfigurera behörigheter
Du har valt att lagra dina autentiseringsuppgifter i tjänsten Key Vault. Därifrån vill du kunna läsa hemligheter under distributionen så att du till exempel kan ställa in lösenordet för en virtuell dator.
Du måste utföra ett antal konfigurationssteg för att ställa in Key Vault så att tjänsten kan användas i distributionen. Stegen är:
Aktivera Key Vault för distribution. Det måste gå att läsa från Key Vault-instansen under distributionen. Du kan skicka den här inställningen vid skapandet eller lägga till den senare.
Användaren behöver distributionsbehörighet för resursgruppen. Det här är precis som för andra distributioner. Om du inte har skapat resursgruppen kan du dock tilldela en roll för att se till att du kan distribuera till den.
Användaren behöver åtkomst till Key Vault. Du måste se till att du har den åtkomst som krävs för Key Vault när du läser därifrån under distributionen. När du skapar en Key Vault-instans skapas en åtkomstprincip som ger användaren behörighet att hantera alla hemligheter, nycklar och certifikat.
Konfigurera Key Vault för distribution
Konfigurera din Key Vault-instans så att autentiseringsuppgifterna kan läsas därifrån när en ARM-mall distribueras.
Om du vill aktivera Key Vault för distribution finns det en inställning du kan skicka, antingen när du skapar Key Vault-instansen eller som du kan lägga till senare. I PowerShell är det en växel som heter -EnabledForTemplateDeployment
. I Azure CLI är det ett argument som heter --enabled-for-template-deployment
där du även måste skicka värdet true
.
Kommentar
I Azure CLI måste du också skicka en booleskt variabel med värdet true
.
Användaren behöver distributionsbehörighet för Key Vault och resursgruppen
Innan du försöker distribuera och läsa hemligheter från Key Vault måste du se till att du har distributionsbehörighet. Det finns två roller som ger dig den här behörigheten:
-
Owner
: Om du har skapat nyckelvalvet har du automatiskt den här rollen. -
Contributor
: Den här rollen ger dig åtkomst till att hantera alla hemligheter. Om du inte skapade Key Vault-instansen är det enklaste sättet att ge dig rollenContributor
.
Ett annat alternativ är att skapa och tilldela en anpassad roll och se till att rollen innehåller behörigheten Microsoft.KeyVault/vaults/deploy/action.
Konfigurera filen med distributionsparametrar
I stället för att ange varje parameter och motsvarande värden som nyckel/värde-par under distributionen kan du använda en parameterfil.
I parameterfilen anger du vilket nyckelvalv och vilka hemligheter i det nyckelvalvet som du är intresserad av. Det gör du genom att ändra en parameter och sedan uppdatera distributionsmallen för att använda den här parametern.
Kommentar
Mallen känner inte till någon Key Vault-instans eller hemlighet. Konfigurationen du gör sker i parameterfilen.
Konfigurera en Key Vault-instans och hemlighet för en parameter
Peka på en Key Vault-instans du har distributionsbehörighet till för en specifik parameter i parameterfilen. Ange sedan vilken hemlighet du är intresserad av. Du anger hemligheten med dess namn. Konfigurationen matchar hemlighetens värde under distributionen. Här konfigureras en parameter med namnet myPassword
att använda en viss Key Vault och en hemlighet med namnet databaseSecret
.
"myPassword" : {
"reference": {
"keyVault": {
"id": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.KeyVault/vaults/<vault-name>",
"secretName": "databaseSecret"
}
}
}
I föregående JSON-kod anger du det fullständiga ID:t för Key Vault-instansen och frågar sedan efter hemligheten databaseSecret
. Värdet för den här hemligheten extraheras och tilldelas till parametern myPassword
.
Tilldela parametern till lösenordet för en resurs
Det här steget är inte relaterat till nyckelvalvet. Det handlar om att se till att den avsedda resursen använder den konfigurerade parametern till att läsa hemlighetens värde från Key Vault-instansen. Nedan visas ett kort kodfragment från en virtuell dator i mallfilen där elementet adminPassword
läser från parametern myPassword
. Sedan läses hemlighetens värde från Key Vault-instansen under distributionen och tilldelas till elementet adminPassword
.
{
"osProfile": {
"adminPassword": "[parameters('myPassword')]"
}
}