Azure Stack Hub'da güvenli bir şekilde depolanan sertifikaya sahip bir VM dağıtma

Bu makalede, Key Vault sertifikası yüklü bir Azure Stack Hub sanal makinesinin (VM) nasıl dağıtılacağı açıklanır.

Genel Bakış

Sertifikalar, Active Directory'de kimlik doğrulaması yapma veya web trafiğini şifreleme gibi birçok senaryoda kullanılır. Sertifikaları bir Azure Stack Hub anahtar kasasında gizli dizi olarak güvenle depolayabilirsiniz. Azure Stack Hub Key Vault kullanmanın avantajları şunlardır:

  • Sertifikalar bir betikte, komut satırı geçmişinde veya şablonda gösterilmez.
  • Sertifika yönetimi işlemi kolaylaştırılmıştır.
  • Sertifikalara erişen anahtarların denetimine sahipsiniz.

İşlem açıklaması

Aşağıdaki adımlarda, VM'ye sertifika göndermek için gereken işlem açıklanmaktadır:

  1. Anahtar kasası gizli dizisi oluşturma.
  2. azuredeploy.parameters.json dosyasını güncelleştirin.
  3. Şablonu dağıtma.

Not

Azure Stack Geliştirme Seti'nden (ASDK) veya VPN üzerinden bağlıysanız bir dış istemciden bu adımları kullanabilirsiniz.

Önkoşullar

Anahtar kasası gizli dizisi oluşturma

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. contentType Gizli dizi olarak ayarlanmalıdırpfx.

Önemli

Anahtar kasasını -EnabledForDeployment oluştururken parametresini kullanmanız gerekir. Bu parametre, anahtar kasasına Azure Resource Manager şablonlarından başvurulabilmesini sağlar.

# 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, çıkış gizli dizi URI'sini içerir. Sertifikayı Windows'a gönder Resource Manager şablonunda başvurmanız gerektiğinden, bu URI'yi not edin. vm-push-certificate-windows şablon klasörünü geliştirme bilgisayarınıza indirin. Bu klasör, aşağıdaki adımlarda ihtiyacınız olan azuredeploy.json ve azuredeploy.parameters.json dosyalarını içerir.

azuredeploy.parameters.json dosyasını ortam değerlerinize göre değiştirin. Önemli parametreler kasa adı, kasa kaynak grubu ve gizli dizi URI'leridir (önceki betik tarafından oluşturulduğu gibi). Aşağıdaki bölümde bir parametre dosyası örneği gösterilmektedir.

azuredeploy.parameters.json dosyasını güncelleştirme

azuredeploy.parameters.json dosyasını ortamınıza göre , gizli dizi URI'siyle VmNameve diğer parametrelerle vaultNamegüncelleştirin. Aşağıdaki JSON dosyasında şablon parametreleri dosyasının bir örneği gösterilmektedir:

{
  "$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ğıtma

Aşağıdaki PowerShell betiğini kullanarak şablonu dağıtın:

# 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 çıkışı görüntüler:

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

Azure Stack Hub, dağıtım sırasında sertifikayı VM'ye iletir. Sertifika konumu VM'nin işletim sistemine bağlıdır:

  • Windows'da sertifika, kullanıcının sağladığı sertifika deposuyla Birlikte LocalMachine sertifika konumuna eklenir.
  • Linux'ta sertifika, X509 sertifika dosyası için UppercaseThumbprint.crt ve özel anahtar için UppercaseThumbprint.prv dosya adıyla /var/lib/waagent dizini altına yerleştirilir.

Sertifikaları devre dışı bırakma

Sertifikaların kullanılması, sertifika yönetimi işleminin bir parçasıdır. Sertifikanın eski sürümünü silemezsiniz, ancak cmdlet'ini kullanarak sertifikayı Set-AzureKeyVaultSecretAttribute devre dışı bırakabilirsiniz.

Aşağıdaki örnekte bir sertifikanın nasıl devre dışı bırakılası gösterilmektedir. , Nameve Version parametreleri için VaultNamekendi değerlerinizi kullanın.

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

Sonraki adımlar