Geheimen in uw ARM-sjabloon beheren door lezen uit Azure Key Vault

Voltooid

Infrastructuur als code (IaC) beschrijft u de vereisten voor de infrastructuur als tekstbestanden die door mensen kunnen worden gelezen. Azure Resource Manager-sjablonen (ARM) zijn een vorm van IaC.

Net als bij toepassingscode kunt u uw infrastructuurcode beheren in een versiebeheersysteem zoals Git. Dit stelt u in staat om samen te werken met anderen en wijzigingen in uw infrastructuur bij te houden als deze wordt uitgebreid.

Net zoals bij uw toepassingscode mag u geen gevoelige informatie, zoals wachtwoorden en API-sleutels, coderen in uw ARM-sjablonen. Anders heeft iedereen met leestoegang tot uw opslagplaats toegang tot deze geheime gegevens.

Gevoelige gegevens mogen weliswaar alleen toegankelijk zijn voor geautoriseerde personen in uw organisatie, maar ze zijn ook nodig voor uw ARM-sjablonen. Azure Key Vault is een oplossing die helpt om gevoelige informatie te beschermen.

Azure Key Vault helpt bij het beschermen van gevoelige informatie

Azure Key Vault is een cloudservice die werkt als een beveiligde opslagplaats voor geheimen. Met Key Vault kunt u meerdere beveiligde containers maken, die kluizen worden genoemd. Deze kluizen worden ondersteund door hardware security modules (HSM's). Kluizen verminderen de kans op onbedoeld verlies van beveiligingsinformatie door de opslag van toepassingsgeheimen te centraliseren. Kluizen regelen en registreren ook de toegang tot alles wat erin is opgeslagen.

In Key Vault kunnen zowel sleutels als geheimen worden opgeslagen. De talrijke functies maken het niet alleen een goede keuze voor het beheer van uw geheimen, maar ook voor uw implementatieproces.

  • Op rollen gebaseerd toegangsbeheer. U kunt uw sleutelkluis beheren met behulp van verschillende rollen, zodat u kunt controleren of het geschikt is voor apps en beheerders op verschillende niveaus.

  • Gebruikers en apps toestaan. U kunt uw sleutelkluis zodanig configureren dat zowel bepaalde gebruikers als apps toegang tot de sleutelkluis kunnen hebben. Voor apps maakt u een serviceprincipal. U kunt uw sleutelkluis zelfs zo configureren dat alleen service-principals er toegang toe hebben.

    Notitie

    Een service-principal is een identiteit die is gemaakt voor gebruik met toepassingen, gehoste services en geautomatiseerde hulpprogramma's voor toegang tot Azure-resources. U beperkt de toegang tot resources door aan de principal alleen een rol of een subset rollen met beperkte toegangsrechten toe te wijzen. Met deze aanpak hebt u tot in details de controle over de toegang tot uw resources.

  • Kan communiceren met een ARM-sjabloon. Tijdens de implementatie van een ARM-sjabloon kunt u lezen uit een sleutelkluis. Er is een maar weinig configuratie nodig om ermee te kunnen werken. In de volgende sectie vindt u meer informatie.

Machtigingen configureren

U hebt Key Vault gekozen als service waarin u uw referenties opslaat. Van daaruit wilt u geheimen lezen tijdens de implementatie, zodat u bijvoorbeeld het wachtwoord van een virtuele machine kunt instellen.

Er zijn verschillende configuratiestappen die u moet uitvoeren om Key Vault zo in te stellen dat deze kan worden gelezen tijdens de implementatie. Dit zijn de stappen:

  1. Key Vault inschakelen voor implementatie. Key Vault moet kunnen worden gelezen tijdens de implementatie. U kunt deze instelling doorgeven bij het maken of later wijzigen.

  2. De gebruiker moet beschikken over een implementatiemachtiging voor de resourcegroep. Dit is niet anders dan bij andere implementaties. Als u de resourcegroep niet hebt gemaakt, kunt u echter een rol toewijzen waarmee implementeren mogelijk is.

  3. De gebruiker moet de juiste toegang hebben tot de sleutelkluis. U moet ervoor zorgen dat u de juiste toegang hebt tot de sleutelkluis wanneer u deze tijdens de implementatie leest. Wanneer u een sleutelkluis maakt, wordt er een toegangsbeleid gemaakt waarbij de gebruiker rechten krijgt voor het beheren van alle geheimen, sleutels en certificaten.

Key Vault configureren voor implementatie

Configureer uw Key Vault-exemplaar zodat er referenties uit kunnen worden gelezen tijdens de implementatie van een ARM-sjabloon.

Als u Key Vault voor implementatie wilt inschakelen, kunt u een instelling doorgeven bij het maken van het Key Vault-exemplaar. U kunt dit ook op een later tijdstip wijzigen. In PowerShell is dit een schakeloptie met de naam -EnabledForTemplateDeployment. In de Azure CLI is het een argument met de naam --enabled-for-template-deployment waarvoor ook de waarde true moet worden doorgegeven.

Notitie

In de Azure CLI moet u ook de Booleaanse waarde true doorgeven.

De gebruiker moet beschikken over een implementatiemachtiging voor Key Vault en de resourcegroep

Voordat u probeert om geheimen te implementeren en te lezen vanuit de sleutelkluis, moet u beschikken over een zogeheten implementatiemachtiging. Er zijn twee rollen die deze machtiging bieden:

  • Owner: Als u de sleutelkluis hebt gemaakt, hebt u deze rol automatisch.
  • Contributor: Met deze rol verleent u toegang tot het beheren van alle geheimen. Als u de sleutelkluis niet hebt gemaakt, is de manier waarbij u de rol Contributor aan uzelf toewijst het eenvoudigst.

Een andere mogelijkheid is het maken en toewijzen van een aangepaste rol, waarbij de rol de machtiging Microsoft.KeyVault/vaults/deploy/action moet bevatten.

Het bestand met implementatieparameters configureren

In plaats van elke parameter en de bijbehorende waarden als sleutel-waardeparen op te geven tijdens de implementatie, kunt u een parameterbestand gebruiken.

In dit parameterbestand geeft u op in welke sleutelkluis en welk geheim in die sleutelkluis u geïnteresseerd bent. U kunt hiervoor een parameter wijzigen en vervolgens de implementatiesjabloon bijwerken om deze parameter te gebruiken.

Notitie

Sleutelkluizen of de geheimen in die sleutelkluizen worden niet gedetecteerd door de sjabloon. De configuratie die u maakt, vindt plaats in het parameterbestand.

Een sleutelkluis en geheim voor een parameter configureren

Verwijs in het parameterbestand, en voor een specifieke parameter, naar een sleutelkluis waarvoor u een implementatiemachtiging hebt. Geef vervolgens op in welk geheim u geïnteresseerd bent. U verwijst naar het geheim op naam. Tijdens de implementatie wordt deze configuratie omgezet in de waarde van het geheim. Hier wordt een parameter met de naam myPassword geconfigureerd voor het gebruik van een specifieke sleutelkluis en het geheim databaseSecret.

"myPassword" : {
  "reference": {
    "keyVault": {
      "id": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.KeyVault/vaults/<vault-name>",
      "secretName": "databaseSecret"
    }
  }
}

In de vorige JSON geeft u de volledige id van de sleutelkluis op en vraagt u het geheim databaseSecret op. De waarde van dit geheim wordt vervolgens geëxtraheerd en toegewezen aan de parameter myPassword.

Parameter toewijzen aan het wachtwoord van de resource

Deze stap heeft geen betrekking op de sleutelkluis. Deze stap zorgt ervoor dat de beoogde resource gebruikmaakt van de parameter die is geconfigureerd om de waarde van het geheim uit de sleutelkluis te lezen. Hieronder ziet u een ingekort fragment van een virtuele machine, in het sjabloonbestand, waarmee het element adminPassword uit de parameter myPassword wordt gelezen. De waarde van het geheim wordt gelezen uit de sleutelkluis tijdens de implementatie en toegewezen aan het element adminPassword.

{
  "osProfile": {
    "adminPassword": "[parameters('myPassword')]"
  }
}