Rozšíření virtuálního počítače služby Azure Key Vault pro Windows

Rozšíření virtuálního počítače azure Key Vault poskytuje automatickou aktualizaci certifikátů uložených ve službě Azure Key Vault. Rozšíření monitoruje seznam pozorovaných certifikátů uložených v trezorech klíčů. Když zjistí změnu, rozšíření načte a nainstaluje odpovídající certifikáty. Tento článek popisuje podporované platformy, konfigurace a možnosti nasazení pro rozšíření virtuálního počítače služby Key Vault pro Windows.

Operační systémy

Rozšíření virtuálního počítače služby Key Vault podporuje následující verze Windows:

  • Windows Server 2022
  • Windows Server 2019
  • Windows Server 2016
  • Windows Server 2012

Rozšíření virtuálního počítače služby Key Vault je také podporováno na vlastním místním virtuálním počítači. Virtuální počítač by se měl nahrát a převést na specializovanou image pro použití v Azure pomocí instalace jádra Windows Serveru 2019.

Podporované certifikáty

Rozšíření virtuálního počítače služby Key Vault podporuje následující typy obsahu certifikátu:

  • PKCS č. 12
  • PEM

Poznámka:

Rozšíření virtuálního počítače služby Key Vault stáhne všechny certifikáty do úložiště certifikátů Windows nebo do umístění zadaného ve certificateStoreLocation vlastnosti v nastavení rozšíření virtuálního počítače.

Aktualizace ve verzi 3.0 nebo novější

Verze 3.0 rozšíření virtuálního počítače služby Key Vault pro Windows přidává podporu pro následující funkce:

  • Přidání oprávnění seznamu ACL ke staženým certifikátům
  • Povolení konfigurace úložiště certifikátů na certifikát
  • Export privátních klíčů
  • Podpora opětovné vazby certifikátu služby IIS

Požadavky

Projděte si následující požadavky pro použití rozšíření virtuálního počítače služby Key Vault pro Windows:

Poznámka:

Starý model oprávnění zásad přístupu se dá použít také k poskytování přístupu k virtuálním počítačům a škálovacím sadám virtuálních počítačů. Tato metoda vyžaduje zásadu s oprávněními k získání a výpisu tajných kódů. Další informace najdete v tématu Přiřazení zásad přístupu ke službě Key Vault.

Schéma rozšíření

Následující KÓD JSON ukazuje schéma pro rozšíření virtuálního počítače služby Key Vault. Než začnete uvažovat o možnostech implementace schématu, projděte si následující důležité poznámky.

  • Rozšíření nevyžaduje chráněná nastavení. Všechna nastavení se považují za veřejné informace.

  • Pozorované adresy URLcertifikátůch https://myVaultName.vault.azure.net/secrets/myCertName

    Tento formulář je upřednostňovaný, protože /secrets cesta vrací úplný certifikát, včetně privátního klíče, ale /certificates cesta ne. Další informace ocertifikátch

  • Vlastnost je vyžadovánaauthenticationSettings pro virtuální počítače s libovolnými identitami přiřazenými uživatelem.

    Tato vlastnost určuje identitu, která se má použít pro ověřování ve službě Key Vault. Definujte tuto vlastnost pomocí identity přiřazené systémem, abyste se vyhnuli problémům s rozšířením virtuálního počítače s více identitami.

{
   "type": "Microsoft.Compute/virtualMachines/extensions",
   "name": "KVVMExtensionForWindows",
   "apiVersion": "2022-08-01",
   "location": "<location>",
   "dependsOn": [
      "[concat('Microsoft.Compute/virtualMachines/', <vmName>)]"
   ],
   "properties": {
      "publisher": "Microsoft.Azure.KeyVault",
      "type": "KeyVaultForWindows",
      "typeHandlerVersion": "3.0",
      "autoUpgradeMinorVersion": true,
      "settings": {
         "secretsManagementSettings": {
             "pollingIntervalInS": <A string that specifies the polling interval in seconds. Example: "3600">,
             "linkOnRenewal": <Windows only. Ensures s-channel binding when the certificate renews without necessitating redeployment. Example: true>,
             "requireInitialSync": <Initial synchronization of certificates. Example: true>,
             "observedCertificates": <An array of KeyVault URIs that represent monitored certificates, including certificate store location and ACL permission to certificate private key. Example: 
             [
                {
                    "url": <A Key Vault URI to the secret portion of the certificate. Example: "https://myvault.vault.azure.net/secrets/mycertificate1">,
                    "certificateStoreName": <The certificate store name. Example: "MY">,
                    "certificateStoreLocation": <The certificate store location, which currently works locally only. Example: "LocalMachine">,
                    "accounts": <Optional. An array of preferred accounts with read access to certificate private keys. Administrators and SYSTEM get Full Control by default. Example: ["Network Service", "Local Service"]>
                },
                {
                    "url": <Example: "https://myvault.vault.azure.net/secrets/mycertificate2">,
                    "certificateStoreName": <Example: "MY">,
                    "certificateStoreLocation": <Example: "CurrentUser">,
                    "keyExportable": <Optional. Lets the private key be exportable. Example: "false">,
                    "accounts": <Example: ["Local Service"]>
                }
             ]>
         },
         "authenticationSettings": {
             "msiEndpoint":  <Required when the msiClientId property is used. Specifies the MSI endpoint. Example for most Azure VMs: "http://169.254.169.254/metadata/identity/oauth2/token">,
             "msiClientId":  <Required when the VM has any user assigned identities. Specifies the MSI identity. Example:  "c7373ae5-91c2-4165-8ab6-7381d6e75619">
         }
      }
   }
}

Hodnoty vlastností

Schéma JSON obsahuje následující vlastnosti.

Název Hodnota/příklad Datový typ
apiVersion 2022-08-01 datum
publisher Microsoft.Azure.KeyVault string
type KeyVaultForWindows string
typeHandlerVersion "3.0" string
pollingIntervalInS "3600" string
linkOnRenewal (volitelné) true boolean
requireInitialSync (volitelné) false (nepravda) boolean
observedCertificates [{...}, {...}] Řetězcové pole
observedCertificates/url "https://myvault.vault.azure.net/secrets/mycertificate" string
observedCertificates/certificateStoreName MY string
observedCertificates/certificateStoreLocation LocalMachine nebo CurrentUser (rozlišují se malá a velká písmena) string
observedCertificates/keyExportable (volitelné) false (nepravda) boolean
observedCertificates/accounts (volitelné) ["Síťová služba", "Místní služba"] Řetězcové pole
msiEndpoint "http://169.254.169.254/metadata/identity/oauth2/token" string
msiClientId c7373ae5-91c2-4165-8ab6-7381d6e75619 string

Nasazení šablon

Rozšíření virtuálních počítačů Azure je možné nasadit pomocí šablon Azure Resource Manageru (ARM). Šablony jsou ideální pro nasazení jednoho nebo více virtuálních počítačů, které vyžadují aktualizaci certifikátů po nasazení. Rozšíření je možné nasadit na jednotlivé virtuální počítače nebo instance škálovací sady virtuálních počítačů. Schéma a konfigurace jsou společné pro oba typy šablon.

Konfigurace JSON pro rozšíření trezoru klíčů je vnořená do šablony škálovací sady virtuálních počítačů nebo virtuálních počítačů. V případě rozšíření prostředků virtuálního počítače je konfigurace vnořená pod "resources": [] objektem virtuálního počítače. V případě rozšíření instance Škálovací sady virtuálních počítačů je konfigurace vnořená pod objektem "virtualMachineProfile":"extensionProfile":{"extensions" :[] .

Následující fragmenty kódu JSON poskytují ukázková nastavení pro nasazení šablony ARM rozšíření virtuálního počítače služby Key Vault.

{
   "type": "Microsoft.Compute/virtualMachines/extensions",
   "name": "KeyVaultForWindows",
   "apiVersion": "2022-08-01",
   "location": "<location>",
   "dependsOn": [
      "[concat('Microsoft.Compute/virtualMachines/', <vmName>)]"
   ],
   "properties": {
      "publisher": "Microsoft.Azure.KeyVault",
      "type": "KeyVaultForWindows",
      "typeHandlerVersion": "3.0",
      "autoUpgradeMinorVersion": true,
      "settings": {
         "secretsManagementSettings": {
             "pollingIntervalInS": <A string that specifies the polling interval in seconds. Example: "3600">,
             "linkOnRenewal": <Windows only. Ensures s-channel binding when the certificate renews without necessitating redeployment. Example: true>,
             "observedCertificates": <An array of KeyVault URIs that represent monitored certificates, including certificate store location and ACL permission to certificate private key. Example:
             [
                {
                    "url": <A Key Vault URI to the secret portion of the certificate. Example: "https://myvault.vault.azure.net/secrets/mycertificate1">,
                    "certificateStoreName": <The certificate store name. Example: "MY">,
                    "certificateStoreLocation": <The certificate store location, which currently works locally only. Example: "LocalMachine">,
                    "accounts": <Optional. An array of preferred accounts with read access to certificate private keys. Administrators and SYSTEM get Full Control by default. Example: ["Network Service", "Local Service"]>
                },
                {
                    "url": <Example: "https://myvault.vault.azure.net/secrets/mycertificate2">,
                    "certificateStoreName": <Example: "MY">,
                    "certificateStoreLocation": <Example: "CurrentUser">,
                    "keyExportable": <Optional. Lets the private key be exportable. Example: "false">,
                    "accounts": <Example: ["Local Service"]>
                },
                {
                    "url": <Example: "https://myvault.vault.azure.net/secrets/mycertificate3">,
                    "certificateStoreName": <Example: "TrustedPeople">,
                    "certificateStoreLocation": <Example: "LocalMachine">
                }
             ]>           
         },
         "authenticationSettings": {
            "msiEndpoint":  <Required when the msiClientId property is used. Specifies the MSI endpoint. Example for most Azure VMs: "http://169.254.169.254/metadata/identity/oauth2/token">,
            "msiClientId":  <Required when the VM has any user assigned identities. Specifies the MSI identity. Example: "c7373ae5-91c2-4165-8ab6-7381d6e75619">
         }
      }
   }
}

Řazení závislostí rozšíření

Rozšíření virtuálního počítače služby Key Vault můžete povolit pro podporu řazení závislostí rozšíření. Rozšíření virtuálního počítače služby Key Vault ve výchozím nastavení hlásí úspěšné spuštění, jakmile začne dotazování. Rozšíření ale můžete nakonfigurovat tak, aby ohlásilo úspěšné spuštění až po stažení rozšíření a instalaci všech certifikátů.

Pokud před spuštěním použijete další rozšíření, která vyžadují instalaci všech certifikátů, můžete v rozšíření virtuálního počítače služby Key Vault povolit řazení závislostí rozšíření. Tato funkce umožňuje ostatním rozšířením deklarovat závislost na rozšíření virtuálního počítače služby Key Vault.

Pomocí této funkce můžete zabránit spuštění dalších rozšíření, dokud nebudou nainstalovány všechny závislé certifikáty. Pokud je tato funkce povolená, rozšíření virtuálního počítače služby Key Vault opakovaně stahuje a instaluje certifikáty po neomezenou dobu a zůstává v přechodném stavu, dokud se všechny certifikáty úspěšně nenainstalují. Jakmile jsou všechny certifikáty k dispozici, rozšíření virtuálního počítače služby Key Vault hlásí úspěšné spuštění.

Pokud chcete povolit funkci řazení závislostí rozšíření v rozšíření virtuálního počítače služby Key Vault, nastavte secretsManagementSettings vlastnost:

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

Další informace o nastavení závislostí mezi rozšířeními najdete v tématu Zřizování rozšíření sekvence ve škálovacích sadách virtuálních počítačů.

Důležité

Funkce řazení závislostí rozšíření není kompatibilní se šablonou ARM, která vytvoří identitu přiřazenou systémem a aktualizuje zásadu přístupu ke službě Key Vault s danou identitou. Pokud se pokusíte tuto funkci použít v tomto scénáři, dojde k zablokování, protože zásady přístupu ke službě Key Vault se nedají aktualizovat, dokud se nespustí všechna rozšíření. Místo toho před nasazením použijte identitu MSI přiřazenou jedním uživatelem a předsoučte seznam ACL trezorů klíčů s danou identitou.

Nasazení Azure PowerShellu

Rozšíření virtuálního počítače azure Key Vault je možné nasadit pomocí Azure PowerShellu. Uložte nastavení rozšíření virtuálního počítače služby Key Vault do souboru JSON (settings.json).

Následující fragmenty kódu JSON poskytují ukázková nastavení pro nasazení rozšíření virtuálního počítače služby Key Vault pomocí PowerShellu.

{   
   "secretsManagementSettings": {
   "pollingIntervalInS": "3600",
   "linkOnRenewal": true,
   "observedCertificates":
   [
      {
          "url": "https://<examplekv>.vault.azure.net/secrets/certificate1",
          "certificateStoreName": "MY",
          "certificateStoreLocation": "LocalMachine",
          "accounts": [
             "Network Service"
          ]
      },
      {
          "url": "https://<examplekv>.vault.azure.net/secrets/certificate2",
          "certificateStoreName": "MY",
          "certificateStoreLocation": "LocalMachine",
          "keyExportable": true,
          "accounts": [
             "Network Service",
             "Local Service"
          ]
      }
   ]},
   "authenticationSettings": {
      "msiEndpoint":  "http://169.254.169.254/metadata/identity/oauth2/token",
      "msiClientId":  "c7373ae5-91c2-4165-8ab6-7381d6e75619"
   }      
}

Nasazení na virtuální počítač

# Build settings
$settings = (get-content -raw ".\settings.json")
$extName =  "KeyVaultForWindows"
$extPublisher = "Microsoft.Azure.KeyVault"
$extType = "KeyVaultForWindows"
 
# Start the deployment
Set-AzVmExtension -TypeHandlerVersion "3.0" -ResourceGroupName <ResourceGroupName> -Location <Location> -VMName <VMName> -Name $extName -Publisher $extPublisher -Type $extType -SettingString $settings

Nasazení v instanci škálovací sady virtuálních počítačů

# Build settings
$settings = ".\settings.json"
$extName = "KeyVaultForWindows"
$extPublisher = "Microsoft.Azure.KeyVault"
$extType = "KeyVaultForWindows"
  
# Add extension to Virtual Machine Scale Sets
$vmss = Get-AzVmss -ResourceGroupName <ResourceGroupName> -VMScaleSetName <VmssName>
Add-AzVmssExtension -VirtualMachineScaleSet $vmss  -Name $extName -Publisher $extPublisher -Type $extType -TypeHandlerVersion "3.0" -Setting $settings

# Start the deployment
Update-AzVmss -ResourceGroupName <ResourceGroupName> -VMScaleSetName <VmssName> -VirtualMachineScaleSet $vmss 

Nasazení v Azure CLI

Rozšíření virtuálního počítače azure Key Vault je možné nasadit pomocí Azure CLI. Uložte nastavení rozšíření virtuálního počítače služby Key Vault do souboru JSON (settings.json).

Následující fragmenty kódu JSON poskytují ukázková nastavení pro nasazení rozšíření virtuálního počítače služby Key Vault pomocí Azure CLI.

   {   
        "secretsManagementSettings": {
          "pollingIntervalInS": "3600",
          "linkOnRenewal": true,
          "observedCertificates": [
            {
                "url": "https://<examplekv>.vault.azure.net/secrets/certificate1",
                "certificateStoreName": "MY",
                "certificateStoreLocation": "LocalMachine",
                "accounts": [
                    "Network Service"
                ]
            },
            {
                "url": "https://<examplekv>.vault.azure.net/secrets/certificate2",
                "certificateStoreName": "MY",
                "certificateStoreLocation": "LocalMachine",                
                "keyExportable": true,
                "accounts": [
                    "Network Service",
                    "Local Service"
                ]
            }
        ]
        },
          "authenticationSettings": {
          "msiEndpoint":  "http://169.254.169.254/metadata/identity/oauth2/token",
          "msiClientId":  "c7373ae5-91c2-4165-8ab6-7381d6e75619"
        }      
     }

Nasazení na virtuální počítač

# Start the deployment
az vm extension set --name "KeyVaultForWindows" `
 --publisher Microsoft.Azure.KeyVault `
 --resource-group "<resourcegroup>" `
 --vm-name "<vmName>" `
 --settings "@settings.json"

Nasazení v instanci škálovací sady virtuálních počítačů

# Start the deployment
az vmss extension set --name "KeyVaultForWindows" `
 --publisher Microsoft.Azure.KeyVault `
 --resource-group "<resourcegroup>" `
 --vmss-name "<vmssName>" `
 --settings "@settings.json"

Řešení potíží

Tady je několik návrhů, jak řešit problémy s nasazením.

Podívejte se na nejčastější dotazy

Je omezený počet pozorovaných certifikátů?

Ne. Rozšíření virtuálního počítače služby Key Vault neomezuje počet pozorovaných certifikátů (observedCertificates).

Jaké je výchozí oprávnění, když není zadaný žádný účet?

Ve výchozím nastavení Správa istrátory a SYSTEM přijímají úplné řízení.

Jak zjistíte, jestli je klíč certifikátu CAPI1 nebo CNG?

Rozšíření spoléhá na výchozí chování rozhraní PFXImportCertStore API. Pokud má certifikát ve výchozím nastavení atribut Název zprostředkovatele, který odpovídá CAPI1, importuje se certifikát pomocí rozhraní API CAPI1. V opačném případě se certifikát naimportuje pomocí rozhraní CNG API.

Podporuje rozšíření automatické vazby certifikátu?

Ano, rozšíření virtuálního počítače služby Azure Key Vault podporuje automatické vazby certifikátů. Rozšíření virtuálního počítače služby Key Vault podporuje vazbu kanálu S při obnovení certifikátu, pokud linkOnRenewal je vlastnost nastavená na true.

Pro službu IIS můžete nakonfigurovat automatickou vazbu povolením automatického obnovení vazby certifikátů ve službě IIS. Rozšíření virtuálního počítače azure Key Vault generuje oznámení o životním cyklu certifikátů při instalaci certifikátu s odpovídající sítí SAN. Služba IIS tuto událost používá k automatickému obnovení vazby certifikátu. Další informace naleznete v tématu Certifcate Rebind in IIS

Zobrazení stavu rozšíření

Zkontrolujte stav nasazení rozšíření na webu Azure Portal nebo pomocí PowerShellu nebo Azure CLI.

Pokud chcete zobrazit stav nasazení rozšíření pro daný virtuální počítač, spusťte následující příkazy.

  • Azure PowerShell:

    Get-AzVMExtension -ResourceGroupName <myResourceGroup> -VMName <myVM> -Name <myExtensionName>
    
  • The Azure CLI:

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

Kontrola protokolů a konfigurace

Protokoly rozšíření virtuálního počítače služby Key Vault existují jenom místně na virtuálním počítači. Projděte si podrobnosti protokolu, které vám pomůžou s řešením potíží.

Soubor protokolu Popis
C:\WindowsAzure\Logs\WaAppAgent.log' Zobrazuje, kdy dojde k aktualizacím rozšíření.
C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.KeyVault.KeyVaultForWindows<nejnovější verze>\ Zobrazuje stav stahování certifikátu. Umístění pro stahování je vždy úložiště MY v počítači s Windows (certlm.msc).
C:\Packages\Plugins\Microsoft.Azure.KeyVault.KeyVaultForWindows<nejnovější verze>\Runtime Nastavení\ Protokoly rozšíření virtuálního počítače služby Key Vault zobrazují stav služby akvvm_service.
C:\Packages\Plugins\Microsoft.Azure.KeyVault.KeyVaultForWindows<nejnovější verze>\Status\ Konfigurace a binární soubory pro službu rozšíření virtuálního počítače služby Key Vault.

Technická podpora

Tady jsou některé další možnosti, které vám pomůžou vyřešit problémy s nasazením: