Key Vault için sanal makine uzantısını genişletme

Sanal Key Vault uzantısı, Azure anahtar kasasında depolanan sertifikaların otomatik olarak yenilenmesine yardımcı olur. Özellikle uzantı, anahtar kasalarında depolanan gözlemlenen sertifikaların listesini izler. Bir değişikliği algılayan uzantı ilgili sertifikaları alabilir ve yükleyebilir. Sanal Key Vault uzantısı, Şu anda Linux VM'lerde olan Microsoft tarafından yayımlanır ve desteklemektedir. Bu belgede Linux için sanal makine uzantısı için desteklenen platformlar, yapılandırmalar ve Key Vault seçenekleri ayrıntılı olarak açıklanır.

İşletim sistemi

Sanal Key Vault uzantısı şu Linux dağıtımlarını destekler:

Not

Genişletilmiş güvenlik özelliklerini almak için Ubuntu-1604 ve Debian-9 sistemlerini yükseltmeye hazır olun. Bu sürümler belirlenen destek döneminin sonuna ulaştı.

Not

Sanal Key Vault Uzantısı, sertifikaları varsayılan konumdan veya VM Uzantısı ayarlarında "certStoreLocation" özelliği tarafından sağlanan konuma indirir. KeyValut VM Uzantısı, klasör iznini 700 (drwx------) olarak sınar ve yalnızca klasör sahibine okuma, yazma ve yürütme izni sağlar

Desteklenen sertifika içerik türleri

  • PKCS #12
  • PEM

Önkquisities

  • Key Vault olan bir örnek. Bkz. Key Vault

  • VM/VMSS'ye yönetilen kimlik atanmış olması gerekir

  • Key Vault Erişim İlkesi, gizli dizilerin sertifika kısmını almak için VM/VMSS yönetilen kimliği için gizli get list diziler ve izinlerle ayarlanamaz. Bkz. Key Vault için kimlik doğrulaması yapma ve Key Vault ilkesi atama.

  • VMSS aşağıdaki kimlik ayarına sahip olmalı: "identity": { "type": "UserAssigned", "userAssignedIdentities": { "[parameters('userAssignedIdentityResourceId')]": {} } }

  • AKV uzantısı şu ayara sahip olmalı: "authenticationSettings": { "msiEndpoint": "[parameters('userAssignedIdentityEndpoint')]", "msiClientId": "[reference(parameters('userAssignedIdentityResourceId'), variables('msiApiVersion')).clientId]" }

Key Vault VM uzantısı sürümü

  • Ubuntu-18.04 ve SUSE-15 kullanıcıları, tam sertifika zinciri indirme özelliğine sahip olmak için anahtar kasası vm uzantısı sürümünü V2.0 sürümüne yükseltmeyi tercih ediyor. Sertifikayı alan sertifikalar (ara ve kök) PEM dosyasındaki yaprak sertifikaya eklenir.

  • sürümüne yükseltmeyi tercih v2.0 ederseniz önce silmeniz ve v1.0 ardından yüklemeniz v2.0 gerekir.

  az vm extension delete --name KeyVaultForLinux --resource-group ${resourceGroup} --vm-name ${vmName}
  az vm extension set -n "KeyVaultForLinux" --publisher Microsoft.Azure.KeyVault --resource-group "${resourceGroup}" --vm-name "${vmName}" –settings .\akvvm.json –version 2.0

--version 2.0 bayrağı isteğe bağlıdır çünkü en son sürüm varsayılan olarak yüklenir.

  • VM'de v1.0 tarafından indirilen sertifikalar varsa, v1.0 AKVVM uzantısı silindikten sonra indirilen sertifikalar SİSIL OLMAZ. v2.0'ın yüklendikten sonra, mevcut sertifikalar DEĞIŞTIRILMEZ. VM'de tam zincire sahip PEM dosyasını almak için sertifika dosyalarını silmeniz veya sertifikayı geri sarmanız gerekir.

Uzantı şeması

Aşağıdaki JSON, sanal makine uzantısının Key Vault gösterir. Uzantı korumalı ayarlar gerektirmez; tüm ayarları güvenlik etkisi olmadan bilgi olarak kabul edilir. Uzantı, izlenen gizli dizilerin, yoklama sıklığının ve hedef sertifika deposun bir listesini gerektirir. Özellikle:

    {
      "type": "Microsoft.Compute/virtualMachines/extensions",
      "name": "KVVMExtensionForLinux",
      "apiVersion": "2019-07-01",
      "location": "<location>",
      "dependsOn": [
          "[concat('Microsoft.Compute/virtualMachines/', <vmName>)]"
      ],
      "properties": {
      "publisher": "Microsoft.Azure.KeyVault",
      "type": "KeyVaultForLinux",
      "typeHandlerVersion": "2.0",
      "autoUpgradeMinorVersion": true,
      "settings": {
        "secretsManagementSettings": {
          "pollingIntervalInS": <polling interval in seconds, e.g. "3600">,
          "certificateStoreName": <It is ignored on Linux>,
          "linkOnRenewal": <Not available on Linux e.g.: false>,
          "certificateStoreLocation": <disk path where certificate is stored, default: "/var/lib/waagent/Microsoft.Azure.KeyVault">,
          "requireInitialSync": <initial synchronization of certificates e..g: true>,
          "observedCertificates": <list of KeyVault URIs representing monitored certificates, e.g.: ["https://myvault.vault.azure.net/secrets/mycertificate", "https://myvault.vault.azure.net/secrets/mycertificate2"]>
        },
        "authenticationSettings": {
                "msiEndpoint":  <Optional MSI endpoint e.g.: "http://169.254.169.254/metadata/identity">,
                "msiClientId":  <Optional MSI identity e.g.: "c7373ae5-91c2-4165-8ab6-7381d6e75619">
        }
       }
      }
    }

Not

Gözlemlenen sertifika URL'leri şeklinde olması https://myVaultName.vault.azure.net/secrets/myCertName gerekir.

Bunun nedeni, /secrets yolun özel anahtar dahil olmak üzere tam sertifikayı döndüren yol /certificates değildir. Sertifikalar hakkında daha fazla bilgi için buraya Key Vault edinebilirsiniz

Önemli

Kullanıcı tarafından atanan kimliklere sahip VM'ler için 'authenticationSettings' özelliği gereklidir. msiClientId'i, kimlik doğrulaması için kimlik doğrulaması Key Vault.

Vm'leri Azure Arc için de gereklidir. msiEndpoint'i olarak http://localhost:40342/metadata/identity ayarlayın.

Özellik değerleri

Name Değer / Örnek Veri Türü
apiVersion 2019-07-01 date
yayımcı Microsoft.Azure.KeyVault string
tür KeyVaultForLinux string
typeHandlerVersion 2.0 int
pollingIntervalIns 3600 string
certificateStoreName Linux üzerinde yoksayılır string
linkOnRenewal yanlış boolean
certificateStoreLocation /var/lib/waagent/Microsoft.Azure.KeyVault string
requireInitialSync true boolean
observedCertificates ["https://myvault.vault.azure.net/secrets/mycertificate", "https://myvault.vault.azure.net/secrets/mycertificate2"] dize dizisi
msiEndpoint http://169.254.169.254/metadata/identity string
msiClientId c7373ae5-91c2-4165-8ab6-7381d6e75619 string

Şablon dağıtımı

Azure VM uzantıları, sanal makine Azure Resource Manager dağıtılabilir. Şablonlar, sertifikaların dağıtım sonrası yenilenmesi gereken bir veya daha fazla sanal makineyi dağıtırken idealdir. Uzantı tek tek VM'lere veya sanal makine ölçek kümelere dağıtılabilir. Şema ve yapılandırma her iki şablon türü için de ortaktır.

Sanal makine uzantısı için JSON yapılandırması, şablonun sanal makine kaynak parçası içinde, özellikle de sanal makine şablonu için nesne ve nesne altında sanal makine ölçek kümesi olması durumunda iç içe "resources": [] geçmiş "virtualMachineProfile":"extensionProfile":{"extensions" :[] olması gerekir.

Not

VM uzantısı, Key Vault'ta kimlik doğrulaması yapmak için sistem veya kullanıcı tarafından yönetilen kimliğin atanmalarını gerektirir. Bkz. Key Vault için kimlik doğrulaması yapma ve Key Vault ilkesi atama.

    {
      "type": "Microsoft.Compute/virtualMachines/extensions",
      "name": "KeyVaultForLinux",
      "apiVersion": "2019-07-01",
      "location": "<location>",
      "dependsOn": [
          "[concat('Microsoft.Compute/virtualMachines/', <vmName>)]"
      ],
      "properties": {
      "publisher": "Microsoft.Azure.KeyVault",
      "type": "KeyVaultForLinux",
      "typeHandlerVersion": "2.0",
      "autoUpgradeMinorVersion": true,
      "settings": {
          "secretsManagementSettings": {
          "pollingIntervalInS": <polling interval in seconds, e.g. "3600">,
          "certificateStoreName": <ingnored on linux>,
          "certificateStoreLocation": <disk path where certificate is stored, default: "/var/lib/waagent/Microsoft.Azure.KeyVault">,
          "observedCertificates": <list of KeyVault URIs representing monitored certificates, e.g.: "https://myvault.vault.azure.net/secrets/mycertificate"
        }      
      }
      }
    }

Uzantı Bağımlılığı Sıralama

Sanal Key Vault uzantısı yapılandırılmışsa uzantı sıralamayı destekler. Varsayılan olarak uzantı, yoklama başlatıldı hemen başarıyla başlat olduğunu raporlar. Ancak, başarılı bir başlangıç bildirmeden önce sertifikaların tam listesini başarıyla indirene kadar beklemek üzere yalıtabilirsiniz. Diğer uzantılar başlamadan önce tam sertifika kümesi yüklemesine bağımlı olursa, bu ayarın etkinleştirilmesi bu uzantıların sertifika uzantısına bağımlılık Key Vault sağlar. Bu, bağımlı olduğu tüm sertifikalar yüklenmiş olana kadar bu uzantıların başlamasını önler. Uzantı, ilk indirme işlemini süresiz olarak yeniden denenecek ve bir durumda Transitioning kalacaktır.

Bunu açmak için aşağıdakileri ayarlayın:

"secretsManagementSettings": {
    "requireInitialSync": true,
    ...
}

Notun Bu özelliğin kullanılması, sistem tarafından atanan bir kimlik oluşturan ve bu kimlikle Key Vault erişim ilkesini güncelleştiren bir ARM şablonuyla uyumlu değildir. Bunun yapılması, tüm uzantılar başlatılana kadar kasa erişimi ilkesi güncelleştirilene kadar kilitlenmeyle sonuçlanır. Bunun yerine, dağıtımını yapmadan önce tek bir kullanıcı tarafından atanmış BIR MSI kimliği ve bu kimlikle kasalar IÇIN bir ACL ön eki kullanmanız gerekir.

Azure PowerShell dağıtımı

Uyarı

PowerShell istemcileri, genellikle \ " Settings. JSON öğesine ekler ve bu da akvvm_service hata vererek başarısız olur: [CertificateManagementConfiguration] Failed to parse the configuration settings with:not an object.

Azure PowerShell, Key Vault VM uzantısını var olan bir sanal makineye veya sanal makine ölçek kümesine dağıtmak için kullanılabilir.

  • Uzantıyı bir sanal makineye dağıtmak için:

        # Build settings
        $settings = '{"secretsManagementSettings": 
        { "pollingIntervalInS": "' + <pollingInterval> + 
        '", "certificateStoreName": "' + <certStoreName> + 
        '", "certificateStoreLocation": "' + <certStoreLoc> + 
        '", "observedCertificates": ["' + <observedCert1> + '","' + <observedCert2> + '"] } }'
        $extName =  "KeyVaultForLinux"
        $extPublisher = "Microsoft.Azure.KeyVault"
        $extType = "KeyVaultForLinux"
    
    
        # Start the deployment
        Set-AzVmExtension -TypeHandlerVersion "2.0" -ResourceGroupName <ResourceGroupName> -Location <Location> -VMName <VMName> -Name $extName -Publisher $extPublisher -Type $extType -SettingString $settings
    
    
  • Uzantıyı bir sanal makine ölçek kümesine dağıtmak için:

    
        # Build settings
        $settings = '{"secretsManagementSettings": 
        { "pollingIntervalInS": "' + <pollingInterval> + 
        '", "certificateStoreName": "' + <certStoreName> + 
        '", "certificateStoreLocation": "' + <certStoreLoc> + 
        '", "observedCertificates": ["' + <observedCert1> + '","' + <observedCert2> + '"] } }'
        $extName = "KeyVaultForLinux"
        $extPublisher = "Microsoft.Azure.KeyVault"
        $extType = "KeyVaultForLinux"
    
        # Add Extension to VMSS
        $vmss = Get-AzVmss -ResourceGroupName <ResourceGroupName> -VMScaleSetName <VmssName>
        Add-AzVmssExtension -VirtualMachineScaleSet $vmss  -Name $extName -Publisher $extPublisher -Type $extType -TypeHandlerVersion "2.0" -Setting $settings
    
        # Start the deployment
        Update-AzVmss -ResourceGroupName <ResourceGroupName> -VMScaleSetName <VmssName> -VirtualMachineScaleSet $vmss 
    
    

Azure CLı dağıtımı

Azure CLı, Key Vault VM uzantısını var olan bir sanal makineye veya sanal makine ölçek kümesine dağıtmak için kullanılabilir.

  • Uzantıyı bir sanal makineye dağıtmak için:

       # Start the deployment
         az vm extension set -n "KeyVaultForLinux" `
         --publisher Microsoft.Azure.KeyVault `
         -g "<resourcegroup>" `
         --vm-name "<vmName>" `
         --version 2.0 `
         --settings '{\"secretsManagementSettings\": { \"pollingIntervalInS\": \"<pollingInterval>\", \"certificateStoreName\": \"<certStoreName>\", \"certificateStoreLocation\": \"<certStoreLoc>\", \"observedCertificates\": [\" <observedCert1> \", \" <observedCert2> \"] }}'
    
  • Uzantıyı bir sanal makine ölçek kümesine dağıtmak için:

          # Start the deployment
          az vmss extension set -n "KeyVaultForLinux" `
          --publisher Microsoft.Azure.KeyVault `
          -g "<resourcegroup>" `
          --vmss-name "<vmssName>" `
          --version 2.0 `
          --settings '{\"secretsManagementSettings\": { \"pollingIntervalInS\": \"<pollingInterval>\", \"certificateStoreName\": \"<certStoreName>\", \"certificateStoreLocation\": \"<certStoreLoc>\", \"observedCertificates\": [\" <observedCert1> \", \" <observedCert2> \"] }}'
    

Lütfen aşağıdaki kısıtlamalara/gereksinimlere dikkat edin:

Sorun giderme ve destek

Uzantı dağıtımlarının durumuyla ilgili veriler, Azure portal alabilir ve Azure PowerShell kullanılarak elde edilebilir. Belirli bir VM için uzantıların dağıtım durumunu görmek için, Azure PowerShell kullanarak aşağıdaki komutu çalıştırın.

Azure PowerShell

Get-AzVMExtension -VMName <vmName> -ResourceGroupname <resource group name>

Azure CLI

 az vm get-instance-view --resource-group <resource group name> --name  <vmName> --query "instanceView.extensions"

Günlükler ve yapılandırma

Key Vault VM Uzantısı günlükleri yalnızca sanal makinede yerel olarak bulunur ve sorun giderme için olduğunda bu bilgi bilgilendirme amaçlıdır.

Konum Açıklama
/var/log/waagent.log Uzantıya yönelik bir güncelleştirmenin ne zaman oluştuğunu gösterir.
/var/log/azure/Microsoft.Azure.KeyVault.KeyVaultForLinux/* Akvvm_service hizmetinin ve sertifika indirmenin durumunu öğrenmek için Key Vault VM Uzantısı hizmet günlüklerini inceleyin. PED dosyalarının karşıdan yükleme konumu, bu dosyalarda sertifika dosyası adı adlı bir girdiyle de bulunur. CertificateStoreLocation belirtilmemişse, varsayılan olarak/var/lib/waagent/Microsoft.Azure.KeyVault.Store/
/var/lib/waagent/Microsoft.Azure.KeyVault.KeyVaultForLinux- <most recent version> /config/* Key Vault VM Uzantısı hizmeti için yapılandırma ve ikili dosyalar.

Sembolik bağlantılar veya Symbağlantılar temelde gelişmiş kısayollardır. Klasörü izlemeyi önlemek ve en son sertifikayı otomatik olarak almak için bu oluşturmaksızın 'i kullanarak ([VaultName].[CertificateName]) Linux üzerinde sertifikanın en son sürümünü edinebilirsiniz.

Sık Sorulan Sorular

  • Ayarlayabilmeniz için observedCertificates sayısında bir sınır var mı? Hayır, Key Vault VM uzantısının observedCertificates sayısı üzerinde sınırı yok.

Destek

Bu makalenin herhangi bir noktasında daha fazla yardıma ihtiyacınız varsa, MSDN Azure ve Stack Overflow forumlarındaAzure uzmanlarıyla iletişim kurun. Alternatif olarak, bir Azure destek olayı da oluşturabilirsiniz. Azure destek sitesine gidin ve Destek Al ' ı seçin. Azure desteğini kullanma hakkında daha fazla bilgi için, Microsoft Azure Support sssmakalesini okuyun.