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 Azure Key Vault.
Referencie o Key Vault e o segredo no arquivo de parâmetro.
O valor nunca é exposto porque você apenas fazer referência à sua ID do Key Vault.
O Key Vault pode existir em uma assinatura diferente da assinatura do grupo de recursos da implantação.
Implantar um Key Vault e um segredo
Para criar um Key Vault e um segredo, use a CLI do Azure ou o PowerShell.
Para acessar os segredos dentro deste Key Vault de uma implantação do Resource Manager, a propriedade Key Vault enabledForTemplateDeployment precisa ser true.
Usando a CLI do Azure
O snippet de código a seguir é um exemplo de como você pode implantar um Key Vault 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 Key Vault enabledForTemplateDeployment como true, o usuário que está implantando o modelo precisa a permissão Microsoft.KeyVault/vaults/deploy/action
para o escopo do Key Vault.
Também incluindo o grupo de recursos e o Key Vault. Ambas as funções Proprietário e Colaborador concedem esse acesso.
Ao criar o Key Vault, você será o proprietário e portanto terá a permissão naturalmente.
No entanto, se o Key Vault estiver em uma assinatura diferente, o proprietário do Key Vault precisará permitir o acesso.
Fazer referência a um segredo com ID estática
O Key Vault é referenciado no arquivo de parâmetro e não no modelo.
A imagem a seguir mostra como o arquivo de parâmetro faz referência ao segredo e passa o valor para o modelo.
O modelo a seguir implanta um banco de dados SQL que inclui uma senha de administrador.
O parâmetro de senha é 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, referencie o segredo do Key Vault. Você faz referência ao segredo passando o identificador de recurso do Key Vault e o nome do segredo.
O segredo do Key Vault já precisa existir no arquivo de parâmetro a seguir e você fornece um valor estático para a ID do recurso.
Copie esse arquivo localmente e defina a ID da assinatura, o nome do cofre e o nome do SQL Server:
{
"$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, confira Usar o Azure Key Vault para passar valores de parâmetros seguros durante a implantação.
Também há detalhes nessa página da Web para fazer referência a um segredo com uma ID dinâmica.