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 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.

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 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.