Gerenciar segredos em modelos
Ao passar um valor seguro (como uma senha) como um parâmetro durante a implantação, você pode recuperar o valor de um Cofre de Chaves do Azure.
Faça referência ao Cofre da Chave e ao segredo em seu arquivo de parâmetros.
O valor nunca está exposto porque só faz referência ao respetivo ID do Cofre de Chaves.
O Cofre da Chave pode existir em uma assinatura diferente do grupo de recursos no qual você está implantando.
Implantar um Cofre de Chaves e um segredo
Para criar um Cofre da Chave e um segredo, use a CLI do Azure ou o PowerShell.
Para acessar os segredos dentro desse Cofre de Chaves a partir de uma implantação do Gerenciador de Recursos, a propriedade do Cofre de Chaves enabledForTemplateDeployment deve ser true.
Utilizar a CLI do Azure
O trecho de código a seguir é um exemplo de como você pode implantar um Cofre de Chaves e um segredo usando a CLI do Azure:
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
Habilitar o acesso ao segredo
Além de definir a propriedade do Cofre da Chave enabledForTemplateDeployment como true, o usuário que implanta o modelo deve ter Microsoft.KeyVault/vaults/deploy/action
permissão para o escopo do Cofre da Chave.
Incluindo também o grupo de recursos e o Cofre de Chaves. As funções Proprietário e Colaborador concedem esse acesso.
Se você criar o Cofre da Chave, você será o proprietário, portanto, você inerentemente tem permissão.
No entanto, se o Cofre da Chave estiver sob uma assinatura diferente, o proprietário do Cofre da Chave deverá conceder acesso.
Referenciar um segredo com ID estático
O Cofre da Chave é referenciado no arquivo de parâmetros e não no modelo.
A imagem a seguir mostra como o arquivo de parâmetro faz referência ao segredo e passa esse valor para o modelo.
O modelo a seguir implanta um banco de dados SQL que inclui uma senha de administrador.
O parâmetro password é definido como uma cadeia de caracteres segura. No entanto, o modelo não especifica de onde vem esse valor:
{
"$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": {
}
}
Agora você pode criar um arquivo de parâmetro para o modelo anterior. No arquivo de parâmetro, especifique um parâmetro que corresponda ao nome do parâmetro no modelo.
Para o valor do parâmetro, faça referência ao segredo do Cofre da Chave. Você faz referência ao segredo passando o identificador de recurso do Cofre da Chave e o nome do segredo.
O segredo do Cofre da Chave já deve existir no seguinte arquivo de parâmetro e você fornece um valor estático para sua ID de recurso.
Copie este arquivo localmente e defina a ID da assinatura, o nome do cofre e o nome do servidor 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>"
}
}
}
Você precisaria implantar o modelo e passar o arquivo de parâmetro para o modelo.
Para obter mais informações, use o Azure Key Vault para passar valores de parâmetros seguros durante a implantação para obter mais detalhes.
Há também detalhes nesta página web para referência a um segredo com um ID dinâmico.