Zarządzanie sekretami w szablonach
Podczas przekazywania bezpiecznej wartości (takiej jak hasło) jako parametru podczas wdrażania można pobrać wartość z usługi Azure Key Vault.
Odwołaj się do usługi Key Vault i tajemnicy w pliku parametrów.
Wartość nigdy nie jest ujawniana, ponieważ odwołujesz się tylko do jej identyfikatora Key Vault.
Usługa Key Vault może istnieć w innej subskrypcji niż grupa zasobów, do której jest wdrażana.
Wdrażaj Key Vault i tajemnicę
Aby utworzyć usługę Key Vault i wpis tajny, użyj interfejsu wiersza polecenia platformy Azure lub programu PowerShell.
Aby uzyskać dostęp do tajnych informacji w tej usłudze Key Vault z wdrożenia usługi Resource Manager, właściwość usługi Key Vault enabledForTemplateDeployment musi być true.
Korzystanie z interfejsu wiersza polecenia platformy Azure
Poniższy fragment kodu to przykład, jak wdrożyć Key Vault i sekret przy użyciu Azure CLI.
keyVaultName='{your-unique-vault-name}'
resourceGroupName='{your-resource-group-name}'
location='centralus'
userPrincipalName='{your-email-address-associated-with-your-subscription}'
# Create a resource group
az group create --name $resourceGroupName --location $location
# Create a Key Vault
az keyvault create \
--name $keyVaultName \
--resource-group $resourceGroupName \
--location $location \
--enabled-for-template-deployment true
az keyvault set-policy --upn $userPrincipalName --name $keyVaultName --secret-permissions set delete get list
# Create a secret with the name, vmAdminPassword
password=$(openssl rand -base64 32)
echo $password
az keyvault secret set --vault-name $keyVaultName --name 'vmAdminPassword' --value $password
Umożliwienie dostępu do tajemnicy
Oprócz ustawienia właściwości Key Vault enabledForTemplateDeployment na true, użytkownik wdrażający szablon musi mieć Microsoft.KeyVault/vaults/deploy/action
uprawnienia do zakresu Key Vault.
Obejmuje również grupę zasobów i usługę Key Vault. Role Właściciela i Współautora umożliwiają ten dostęp.
Jeśli tworzysz usługę Key Vault, jesteś właścicielem, więc z założenia masz uprawnienia.
Jeśli jednak usługa Key Vault znajduje się w innej subskrypcji, właściciel usługi Key Vault musi udzielić dostępu.
Odwołuje się do wpisu tajnego ze statycznym identyfikatorem
Magazyn kluczy jest przywołyyny w pliku parametrów, a nie w szablonie.
Na poniższej ilustracji pokazano, jak plik parametrów odwołuje się do tajemnicy i przekazuje tę wartość do szablonu.
Poniższy szablon wdraża bazę danych SQL zawierającą hasło administratora.
Parametr hasła jest ustawiony na bezpieczny ciąg. Jednak szablon nie określa miejsca, z którego pochodzi ta wartość:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"adminLogin": {
"type": "string"
},
"adminPassword": {
"type": "securestring"
},
"sqlServerName": {
"type": "string"
}
},
"resources": [
{
"name": "[parameters('sqlServerName')]",
"type": "Microsoft.Sql/servers",
"apiVersion": "2015-05-01-preview",
"location": "[resourceGroup().location]",
"tags": {},
"properties": {
"administratorLogin": "[parameters('adminLogin')]",
"administratorLoginPassword": "[parameters('adminPassword')]",
"version": "12.0"
}
}
],
"outputs": {
}
}
Teraz możesz utworzyć plik parametrów dla poprzedniego szablonu. W pliku parametrów określ parametr zgodny z nazwą parametru w szablonie.
W przypadku wartości parametru należy odwołać się do sekretu przechowywanego w Key Vault. Odwołujesz się do sekretu, przekazując identyfikator zasobu Key Vault i nazwę sekretu.
Tajny wpis usługi Key Vault musi już istnieć w następującym pliku parametrów, a Ty podajesz wartość statyczną dla identyfikatora zasobu tego wpisu.
Skopiuj ten plik lokalnie i ustaw identyfikator subskrypcji, nazwę skrytki i nazwę serwera SQL.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"adminLogin": {
"value": "exampleadmin"
},
"adminPassword": {
"reference": {
"keyVault": {
"id": "/subscriptions/<subscription-id>/resourceGroups/examplegroup/providers/Microsoft.KeyVault/vaults/<vault-name>"
},
"secretName": "examplesecret"
}
},
"sqlServerName": {
"value": "<your-server-name>"
}
}
}
Należy wdrożyć szablon i przekazać plik parametrów do szablonu.
Aby uzyskać więcej informacji, użyj usługi Azure Key Vault, aby przekazać bezpieczne wartości parametrów podczas wdrażania, aby uzyskać więcej informacji.
Na tej stronie internetowej znajdują się również szczegóły dotyczące odwołania do tajemnicy z dynamicznym identyfikatorem.