Implantar uma VM com um certificado armazenado com segurança no Hub Azure StackDeploy a VM with a securely stored certificate on Azure Stack Hub

Este artigo descreve como implantar uma VM (máquina virtual) de Hub de Azure Stack com um certificado de Key Vault instalado.This article describes how to deploy an Azure Stack Hub virtual machine (VM) with a Key Vault certificate installed.

Visão geralOverview

Os certificados são usados em muitos cenários, como autenticar para Active Directory ou criptografar o tráfego da Web.Certificates are used in many scenarios, such as authenticating to Active Directory, or encrypting web traffic. Você pode armazenar certificados com segurança como segredos em um cofre de chaves de Hub Azure Stack.You can securely store certificates as secrets in an Azure Stack Hub key vault. Os benefícios de usar o Azure Stack Hub Key Vault são:The benefits of using Azure Stack Hub Key Vault are:

  • Os certificados não são expostos em um script, histórico de linha de comando ou modelo.Certificates are not exposed in a script, command-line history, or template.
  • O processo de gerenciamento de certificados é simplificado.The certificate management process is streamlined.
  • Você tem controle das chaves que acessam certificados.You have control of the keys that access certificates.

Descrição do processoProcess description

As etapas a seguir descrevem o processo necessário para enviar por push um certificado para a VM:The following steps describe the process required to push a certificate to the VM:

  1. Crie um segredo do cofre de chaves.Create a key vault secret.
  2. Atualize o azuredeploy.parameters.jsno arquivo.Update the azuredeploy.parameters.json file.
  3. Implante o modelo.Deploy the template.

Observação

Você pode usar essas etapas do Kit de Desenvolvimento do Azure Stack (ASDK) ou de um cliente externo se estiver conectado por meio de VPN.You can use these steps from the Azure Stack Development Kit (ASDK), or from an external client if you're connected through VPN.

Pré-requisitosPrerequisites

Criar um segredo do cofre de chavesCreate a key vault secret

O script a seguir cria um certificado no formato. pfx, cria um cofre de chaves e armazena o certificado no cofre de chaves como um segredo.The following script creates a certificate in the .pfx format, creates a key vault, and stores the certificate in the key vault as a secret. O contentType do segredo deve ser definido como pfx .The contentType of the secret must be set to pfx.

Importante

Você deve usar o -EnabledForDeployment parâmetro ao criar o cofre de chaves.You must use the -EnabledForDeployment parameter when creating the key vault. Esse parâmetro garante que o cofre de chaves possa ser referenciado de modelos de Azure Resource Manager.This parameter ensures that the key vault can be referenced from Azure Resource Manager templates.

# Create a certificate in the .pfx format
New-SelfSignedCertificate `
  -certstorelocation cert:\LocalMachine\My `
  -dnsname contoso.microsoft.com

$pwd = ConvertTo-SecureString `
  -String "<Password used to export the certificate>" `
  -Force `
  -AsPlainText

Export-PfxCertificate `
  -cert "cert:\localMachine\my\<certificate thumbprint that was created in the previous step>" `
  -FilePath "<Fully qualified path to where the exported certificate can be stored>" `
  -Password $pwd

# Create a key vault and upload the certificate into the key vault as a secret
$vaultName = "contosovault"
$resourceGroup = "contosovaultrg"
$location = "local"
$secretName = "servicecert"
$fileName = "<Fully qualified path to where the exported certificate can be stored>"
$certPassword = "<Password used to export the certificate>"

$fileContentBytes = get-content $fileName `
  -Encoding Byte

$fileContentEncoded = [System.Convert]::ToBase64String($fileContentBytes)
$jsonObject = @"
{
"data": "$filecontentencoded",
"dataType" :"pfx",
"password": "$certPassword"
}
"@
$jsonObjectBytes = [System.Text.Encoding]::UTF8.GetBytes($jsonObject)
$jsonEncoded = [System.Convert]::ToBase64String($jsonObjectBytes)

New-AzResourceGroup `
  -Name $resourceGroup `
  -Location $location

New-AzKeyVault `
  -VaultName $vaultName `
  -ResourceGroupName $resourceGroup `
  -Location $location `
  -sku standard `
  -EnabledForDeployment

$secret = ConvertTo-SecureString `
  -String $jsonEncoded `
  -AsPlainText -Force

Set-AzureKeyVaultSecret `
  -VaultName $vaultName `
  -Name $secretName `
   -SecretValue $secret

Quando você executa esse script, a saída inclui o URI secreto.When you run this script, the output includes the secret URI. Anote esse URI, pois você deve referenciá-lo no modelo de push de certificado para o Windows Resource Manager.Make a note of this URI, as you must reference it in the Push certificate to Windows Resource Manager template. Baixe a pasta de modelo VM-Push-Certificate-Windows no computador de desenvolvimento.Download the vm-push-certificate-windows template folder to your development computer. Essa pasta contém o azuredeploy.js e azuredeploy.parameters.jsem arquivos, os quais você precisa nas etapas a seguir.This folder contains the azuredeploy.json and azuredeploy.parameters.json files, which you need in the following steps.

Modifique o azuredeploy.parameters.jsno arquivo de acordo com os valores do seu ambiente.Modify the azuredeploy.parameters.json file according to your environment values. Os parâmetros importantes são o nome do cofre, o grupo de recursos do cofre e o URI do segredo (conforme gerado pelo script anterior).The important parameters are the vault name, the vault resource group, and the secret URI (as generated by the previous script). A seção a seguir mostra um exemplo de um arquivo de parâmetro.The following section shows an example of a parameter file.

Atualizar o azuredeploy.parameters.jsno arquivoUpdate the azuredeploy.parameters.json file

Atualize o azuredeploy.parameters.jsno arquivo com o vaultName , o URI do segredo, VmName e outros parâmetros de acordo com o seu ambiente.Update the azuredeploy.parameters.json file with the vaultName, secret URI, VmName, and other parameters as per your environment. O arquivo JSON a seguir mostra um exemplo do arquivo de parâmetros de modelo:The following JSON file shows an example of the template parameters file:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "newStorageAccountName": {
      "value": "kvstorage01"
    },
    "vmName": {
      "value": "VM1"
    },
    "vmSize": {
      "value": "Standard_D1_v2"
    },
    "adminUserName": {
      "value": "demouser"
    },
    "adminPassword": {
      "value": "demouser@123"
    },
    "vaultName": {
      "value": "contosovault"
    },
    "vaultResourceGroup": {
      "value": "contosovaultrg"
    },
    "secretUrlWithVersion": {
      "value": "https://testkv001.vault.local.azurestack.external/secrets/testcert002/82afeeb84f4442329ce06593502e7840"
    }
  }
}

Implantar o modeloDeploy the template

Implante o modelo usando o seguinte script do PowerShell:Deploy the template by using the following PowerShell script:

# Deploy a Resource Manager template to create a VM and push the secret to it
New-AzResourceGroupDeployment `
  -Name KVDeployment `
  -ResourceGroupName $resourceGroup `
  -TemplateFile "<Fully qualified path to the azuredeploy.json file>" `
  -TemplateParameterFile "<Fully qualified path to the azuredeploy.parameters.json file>"

Quando o modelo é implantado com êxito, ele exibe a seguinte saída:When the template is deployed successfully, it displays the following output:

Resultados de Implantação de modelo

Azure Stack Hub envia o certificado para a VM durante a implantação.Azure Stack Hub pushes the certificate to the VM during deployment. O local do certificado depende do sistema operacional da VM:The certificate location depends on the operating system of the VM:

  • No Windows, o certificado é adicionado ao local do certificado LocalMachine , com o repositório de certificados fornecido pelo usuário.In Windows, the certificate is added to the LocalMachine certificate location, with the certificate store that the user provided.
  • No Linux, o certificado é colocado no diretório /var/lib/waagent , com o nome de arquivo UppercaseThumbprint. CRT para o arquivo de certificado X509 e UppercaseThumbprint. prv para a chave privada.In Linux, the certificate is placed under the /var/lib/waagent directory, with the file name UppercaseThumbprint.crt for the X509 certificate file and UppercaseThumbprint.prv for the private key.

Desativar certificadosRetire certificates

Desativar certificados faz parte do processo de gerenciamento de certificados.Retiring certificates is part of the certificate management process. Não é possível excluir a versão mais antiga de um certificado, mas você pode desabilitá-la usando o Set-AzureKeyVaultSecretAttribute cmdlet.You can't delete the older version of a certificate, but you can disable it by using the Set-AzureKeyVaultSecretAttribute cmdlet.

O exemplo a seguir mostra como desabilitar um certificado.The following example shows how to disable a certificate. Use seus próprios valores para os VaultName Name parâmetros, e Version .Use your own values for the VaultName, Name, and Version parameters.

Set-AzureKeyVaultSecretAttribute -VaultName contosovault -Name servicecert -Version e3391a126b65414f93f6f9806743a1f7 -Enable 0

Próximas etapasNext steps