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:
- Anahtar kasası gizli dizisi oluşturma.
- azuredeploy.parameters.json dosyasını güncelleştirin.
- Ş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
- Key Vault hizmetini içeren bir teklife abone olmanız gerekir.
- Azure Stack Hub için PowerShell'i yükleyin.
- Azure Stack Hub kullanıcısının PowerShell ortamını yapılandırın.
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 VmName
ve diğer parametrelerle vaultName
gü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:
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. , Name
ve Version
parametreleri için VaultName
kendi değerlerinizi kullanın.
Set-AzureKeyVaultSecretAttribute -VaultName contosovault -Name servicecert -Version e3391a126b65414f93f6f9806743a1f7 -Enable 0