Gerenciar segredos em modelos

Concluído

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.

Diagram showing the illustration of the flow of a secret during template deployment. The parameter file references the secret from the template and passes that value to the template.

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.