Azure Stack hub 'da güvenli şekilde depolanan sertifikayla VM dağıtmaDeploy a VM with a securely stored certificate on Azure Stack Hub

Bu makalede, bir Key Vault sertifikası yüklü Azure Stack hub sanal makinesinin (VM) nasıl dağıtılacağı açıklanır.This article describes how to deploy an Azure Stack Hub virtual machine (VM) with a Key Vault certificate installed.

Genel BakışOverview

Sertifikalar, Active Directory kimlik doğrulaması veya Web trafiğini şifreleme gibi birçok senaryoda kullanılır.Certificates are used in many scenarios, such as authenticating to Active Directory, or encrypting web traffic. Sertifikaları, bir Azure Stack hub anahtar kasasında gizli dizi olarak güvenli bir şekilde depolayabilirsiniz.You can securely store certificates as secrets in an Azure Stack Hub key vault. Azure Stack hub Key Vault kullanmanın avantajları şunlardır:The benefits of using Azure Stack Hub Key Vault are:

  • Sertifikalar bir betikte, komut satırı geçmişinde veya şablonda gösterilmez.Certificates are not exposed in a script, command-line history, or template.
  • Sertifika Yönetimi işlemi basitleştirilmiştir.The certificate management process is streamlined.
  • Sertifikalara erişim sağlayan anahtarların denetimine sahipsiniz.You have control of the keys that access certificates.

İşlem açıklamasıProcess description

Aşağıdaki adımlarda, VM 'ye bir sertifika göndermek için gereken işlem açıklanır:The following steps describe the process required to push a certificate to the VM:

  1. Anahtar Kasası gizli dizisi oluşturun.Create a key vault secret.
  2. Dosyadaki azuredeploy.parameters.js güncelleştirin.Update the azuredeploy.parameters.json file.
  3. Şablonu dağıtma.Deploy the template.

Not

Bu adımları Azure Stack Geliştirme Seti (ASDK) veya VPN üzerinden bağlıysanız bir dış istemciden kullanabilirsiniz.You can use these steps from the Azure Stack Development Kit (ASDK), or from an external client if you're connected through VPN.

Ön koşullarPrerequisites

Anahtar Kasası gizli dizisi oluşturmaCreate a key vault secret

Aşağıdaki betik. pfx biçiminde bir sertifika oluşturur, bir Anahtar Kasası oluşturur ve sertifikayı anahtar kasasında gizli dizi olarak depolar.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. contentTypeGizli dizi olarak ayarlanmalıdır pfx .The contentType of the secret must be set to pfx.

Önemli

-EnabledForDeploymentAnahtar kasasını oluştururken parametresini kullanmanız gerekir.You must use the -EnabledForDeployment parameter when creating the key vault. Bu parametre, anahtar kasasının Azure Resource Manager şablonlarından başvurulabilmesini sağlar.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

Bu betiği çalıştırdığınızda, çıktı gizli URI 'yi içerir.When you run this script, the output includes the secret URI. Bu URI 'yi, gönderme sertifikası Windows Kaynak Yöneticisi şablonunabaşvurmanız gerektiği için bir yere unutmayın.Make a note of this URI, as you must reference it in the Push certificate to Windows Resource Manager template. VM-Push-Certificate-Windows şablon klasörünü geliştirme bilgisayarınıza indirin.Download the vm-push-certificate-windows template folder to your development computer. Bu klasör, aşağıdaki adımlarda gereksinim duyduğunuz azuredeploy.js ve azuredeploy.parameters.js dosyalarını içerir.This folder contains the azuredeploy.json and azuredeploy.parameters.json files, which you need in the following steps.

Dosyadaki azuredeploy.parameters.js ortam değerlerinize göre değiştirin.Modify the azuredeploy.parameters.json file according to your environment values. Önemli parametreler, kasa adı, kasa kaynak grubu ve gizli URI (önceki komut dosyası tarafından oluşturulan).The important parameters are the vault name, the vault resource group, and the secret URI (as generated by the previous script). Aşağıdaki bölümde bir parametre dosyası örneği gösterilmektedir.The following section shows an example of a parameter file.

Dosyadaki azuredeploy.parameters.jsgüncelleştirmeUpdate the azuredeploy.parameters.json file

Dosyadaki azuredeploy.parameters.js vaultName , gizli URI VmName ve diğer parametrelerle ortamınıza göre güncelleştirin.Update the azuredeploy.parameters.json file with the vaultName, secret URI, VmName, and other parameters as per your environment. Aşağıdaki JSON dosyası, şablon parametreleri dosyasına bir örnek gösterir: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"
    }
  }
}

Şablonu dağıtmaDeploy the template

Aşağıdaki PowerShell betiğini kullanarak şablonu dağıtın: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>"

Şablon başarıyla dağıtıldığında, aşağıdaki çıktıyı görüntüler:When the template is deployed successfully, it displays the following output:

Şablon dağıtımı sonuçları

Azure Stack hub, dağıtım sırasında sertifikayı VM 'ye iter.Azure Stack Hub pushes the certificate to the VM during deployment. Sertifika konumu, sanal makinenin işletim sistemine bağlıdır:The certificate location depends on the operating system of the VM:

  • Windows 'da, sertifika, kullanıcının sağladığımız sertifika deposuyla, LocalMachine sertifika konumuna eklenir.In Windows, the certificate is added to the LocalMachine certificate location, with the certificate store that the user provided.
  • Linux 'ta, sertifika /var/lib/waagent dizinine yerleştirilir ve bu, x509 sertifika dosyası için en üst öğe adı ve özel anahtar Için üst öğe parmak izi. prv .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.

Sertifikaları devre dışı bırakRetire certificates

Sertifikaları devre dışı bırakma, sertifika yönetimi sürecinin bir parçasıdır.Retiring certificates is part of the certificate management process. Bir sertifikanın eski sürümünü silemezsiniz, ancak cmdlet 'ini kullanarak devre dışı bırakabilirsiniz Set-AzureKeyVaultSecretAttribute .You can't delete the older version of a certificate, but you can disable it by using the Set-AzureKeyVaultSecretAttribute cmdlet.

Aşağıdaki örnek, bir sertifikanın nasıl devre dışı bırakılacağını gösterir.The following example shows how to disable a certificate. VaultName, Ve parametreleri için kendi değerlerinizi kullanın Name Version .Use your own values for the VaultName, Name, and Version parameters.

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

Sonraki adımlarNext steps