Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A extensão de VM de Key Vault fornece a atualização automática dos certificados armazenados no cofre de chaves do Azure. Especificamente, a extensão monitora uma lista de certificados observados armazenados em cofres de chaves. A extensão recupera e instala os certificados correspondentes após detectar uma alteração. Este documento detalha as plataformas com opções de plataformas, configurações e implantação com suporte para a extensão da VM de Key Vault para Linux.
Observação
Experimente a assistência de VM para diagnósticos mais rápidos. Recomendamos que você execute VM assist for Windows ou VM assist for Linux. Essas ferramentas de diagnóstico baseadas em script ajudam você a identificar problemas comuns que afetam o Agente Convidado da VM do Azure e a integridade geral da VM.
Se você estiver enfrentando problemas de desempenho com máquinas virtuais, antes de entrar em contato com o suporte, execute essas ferramentas.
Sistema operacional
A extensão de VM do Key Vault dá suporte a:
- Ubuntu 22.04 e posterior
- Azure Linux
Tipos suportados de conteúdo de certificado
- PKCS #12
- PEM
Features
A extensão de VM do Key Vault para Linux versão 3.0+ dá suporte a:
- Adicionar permissões de ACL para certificados baixados para fornecer acesso de leitura para usuários e grupos
- Configuração do local de instalação do certificado
- Suporte a nomes simbólicos personalizados
- Suporte à integração de log de extensão de VM por meio do Fluentd
Pré-requisitos
Instância Key Vault com certificado. Ver Criar um Key Vault
Identidade gerenciada atribuída em máquinas virtuais/conjuntos de dimensionamento de máquinas virtuais.
A função de Usuário de Segredos do Key Vault no nível de escopo do Key Vault para VMs e a identidade gerenciada dos Conjuntos de Dimensionamento de Máquinas Virtuais do Azure. Essa função recupera uma parte secreta de um certificado. Para obter mais informações, consulte os seguintes artigos:
Os conjuntos de dimensionamento de máquinas virtuais devem ter a seguinte configuração de identidade:
"identity": { "type": "UserAssigned", "userAssignedIdentities": { "[parameters('userAssignedIdentityResourceId')]": {} } }A extensão AKV deve ter essa configuração:
"authenticationSettings": { "msiEndpoint": "[parameters('userAssignedIdentityEndpoint')]", "msiClientId": "[reference(parameters('userAssignedIdentityResourceId'), variables('msiApiVersion')).clientId]" }
Atualizando a extensão de VM do Key Vault
- Se você precisar atualizar de uma versão mais antiga para a versão 3.0+, precisará excluir a versão anterior primeiro e instalar a versão 3.0.
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 3.0
- Se a VM tiver certificados baixados pela versão anterior, a exclusão da extensão da VM não exclui os certificados baixados. Depois de instalar a versão mais recente, os certificados existentes não serão modificados. Você precisará excluir os arquivos de certificado ou fazer o registro do certificado para obter o arquivo PEM com cadeia total na VM.
Esquema de extensão
O JSON a seguir fornece o esquema para a extensão de VM do Key Vault. Todas as configurações são especificadas como configurações simples (desprotegidas), pois nenhuma é considerada confidencial. Para configurar a extensão, você deve especificar uma lista de certificados a serem monitorados, com que frequência pesquisar atualizações e o caminho de destino para armazenar certificados. Especificamente:
{
"type": "Microsoft.Compute/virtualMachines/extensions",
"name": "KVVMExtensionForLinux",
"apiVersion": "2022-11-01",
"location": "<location>",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', <vmName>)]"
],
"properties": {
"publisher": "Microsoft.Azure.KeyVault",
"type": "KeyVaultForLinux",
"typeHandlerVersion": "3.0",
"autoUpgradeMinorVersion": true,
"enableAutomaticUpgrade": true,
"settings": {
"loggingSettings": <Optional logging settings, e.g.:
{
"logger": <Logger engine name. e.g.: "fluentd">,
"endpoint": <Logger listening endpoint "tcp://localhost:24224">,
"format": <Logging format. e.g.: "forward">,
"servicename": <Service name used in logs. e.g.: "akvvm_service">
}>,
"secretsManagementSettings": {
"pollingIntervalInS": <polling interval in seconds, e.g. "3600">,
"linkOnRenewal": <Not available on Linux e.g.: false>,
"requireInitialSync": <initial synchronization of certificates e..g: true>,
"aclEnabled": <Enables ACLs for downloaded certificates, e.g.: true>,
"observedCertificates": <An array of KeyVault URIs that represent monitored certificates, including certificate store location, ACL permission to certificate private key, and custom symbolic name. e.g.:
[
{
"url": <A Key Vault URI to the secret portion of the certificate. e.g.: "https://myvault.vault.azure.net/secrets/mycertificate1">,
"certificateStoreLocation": <disk path where certificate is stored, e.g.: "/var/lib/waagent/Microsoft.Azure.KeyVault/app1">,
"customSymbolicLinkName": <symbolic name for the certificate. e.g.: "app1Cert1">,
"acls": [
{
"user": "app1",
"group": "appGroup1"
},
{
"user": "service1"
}
]
},
{
"url": <Example: "https://myvault.vault.azure.net/secrets/mycertificate2">,
"certificateStoreLocation": <disk path where the certificate is stored, e.g.: "/var/lib/waagent/Microsoft.Azure.KeyVault/app2">,
"acls": [
{
"user": "app2",
}
]
}
]>
},
"authenticationSettings": <Optional msi settings, e.g.:
{
"msiEndpoint": <Required when msiClientId is provided. MSI endpoint e.g. for most Azure VMs: "http://169.254.169.254/metadata/identity">,
"msiClientId": <Required when VM has any user assigned identities. MSI identity e.g.: "00001111-aaaa-2222-bbbb-3333cccc4444".>
}>
}
}
}
Observação
Suas URLs de certificado observadas devem estar no formato https://myVaultName.vault.azure.net/secrets/myCertName.
Isso porque o caminho /secrets retorna o certificado completo, incluindo a chave privada, enquanto o caminho /certificates não faz isso. Mais informações sobre certificados podem ser encontradas aqui: Certificados do Key Vault
Importante
A propriedade ' authenticationSettings ' é necessária somente para VMs com identidades atribuídas pelo usuário. Mesmo que você queira usar uma identidade atribuída pelo sistema, isso ainda será necessário. Caso contrário, a extensão da VM não saberá qual identidade usar. Sem esta seção, uma VM com identidades atribuídas pelo usuário resultará na falha da extensão do Key Vault e não poderá baixar os certificados. Defina msiClientId como a identidade que será autenticada para o Key Vault.
Também necessário para VMs habilitadas para o Azure Arc.
Defina msiEndpoint como http://localhost:40342/metadata/identity .
Valores de propriedade
| Nome | Valor/Exemplo | Tipo de Dados |
|---|---|---|
apiVersion |
2022-07-01 | date |
publisher |
Microsoft.Azure.KeyVault | cadeia |
type |
KeyVaultForLinux | cadeia |
typeHandlerVersion |
3.0 | INT |
pollingIntervalInS |
3600 | cadeia |
certificateStoreName |
É ignorado no Linux | cadeia |
linkOnRenewal |
falso | booleano |
requireInitialSync |
verdadeiro | booleano |
aclEnabled |
verdadeiro | booleano |
certificateStoreLocation |
/var/lib/waagent/Microsoft.Azure.KeyVault.Store | cadeia |
observedCertificates |
[{...}, {...}] | Matriz de cadeia de caracteres |
observedCertificates/url |
"https://myvault.vault.azure.net/secrets/mycertificate1" | cadeia |
observedCertificates/certificateStoreLocation |
"/var/lib/waagent/Microsoft.Azure.KeyVault/app1" | cadeia |
observedCertificates/customSymbolicLinkName (opcional) |
"app1Cert1" | cadeia |
observedCertificates/acls (opcional) |
"{...}, {...}" | Matriz de cadeia de caracteres |
authenticationSettings (opcional) |
{...} | objeto |
authenticationSettings/msiEndpoint |
http://169.254.169.254/metadata/identity | cadeia |
authenticationSettings/msiClientId |
00001111-aaaa-2222-bbbb-3333cccc4444 | cadeia |
loggingSettings (opcional) |
{...} | objeto |
loggingSettings/logger |
"fluentd" | cadeia |
loggingSettings/endpoint |
"tcp://localhost:24224" | cadeia |
loggingSettings/format |
"forward" | cadeia |
loggingSettings/servicename |
"akvvm_service" | cadeia |
Implantação de modelo
Extensões de VM do Azure podem ser implantadas com modelos do Azure Resource Manager. Modelos são ideais ao implantar uma ou mais máquinas virtuais que exigem renovação de certificados pós-implantação. A extensão pode ser implantada em VMs individuais ou conjunto de dimensionamento de máquinas virtuais. O esquema e a configuração são comuns a ambos os tipos de modelo.
Observação
A extensão de VM exigiria que fosse atribuída a identidade gerenciada do sistema ou do usuário para autenticar no Key Vault. Consulte Como autenticar no Key Vault e atribuir uma política de acesso ao Key Vault.
{
"type": "Microsoft.Compute/virtualMachines/extensions",
"name": "KeyVaultForLinux",
"apiVersion": "2022-11-01",
"location": "<location>",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', <vmName>)]"
],
"properties": {
"publisher": "Microsoft.Azure.KeyVault",
"type": "KeyVaultForLinux",
"typeHandlerVersion": "3.0",
"autoUpgradeMinorVersion": true,
"enableAutomaticUpgrade": true,
"settings": {
"secretsManagementSettings": {
"pollingIntervalInS": <polling interval in seconds, e.g. "3600">,
"requireInitialSync": <initial synchronization of certificates e..g: false>,
"aclEnabled": <enables/disables acls on defined certificates e.g.: 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">,
"certificateStoreLocation": <The certificate store location, which currently works locally only. Example: "/var/lib/waagent/Microsoft.Azure.KeyVault.Store">,
"acls": <Optional. An array of preferred acls with read access to certificate private keys. Example:
[
{
"user": "app1",
"group": "appGroup1"
},
{
"user": "service1"
}
]>
},
{
"url": <Example: "https://myvault.vault.azure.net/secrets/mycertificate2">,
"certificateStoreName": <ignored on linux>,
"certificateStoreLocation": <The certificate store location, which currently works locally only. Example: "/var/lib/waagent/Microsoft.Azure.KeyVault.Store">,
"acls": <Optional. An array of preferred acls with read access to certificate private keys. Example:
[
{
"user": "app2"
}
]>
}
]>
},
"authenticationSettings": {
"msiEndpoint": <Required when msiClientId is provided. MSI endpoint e.g. for most Azure VMs: "http://169.254.169.254/metadata/identity">,
"msiClientId": <Required when VM has any user assigned identities. MSI identity e.g.: "00001111-aaaa-2222-bbbb-3333cccc4444">
}
}
}
}
Pedido de Dependência de Extensão
A extensão de VM do Key Vault é compatível com o pedido de extensão, se configurado. Por padrão, os relatórios de extensão são iniciados com êxito assim que a sondagem é iniciada. No entanto, você pode configurá-lo para aguardar até que ele baixe com êxito a lista completa de certificados antes de relatar um início bem-sucedido. Se outras extensões dependerem dos certificados instalados antes de serem iniciadas, a habilitação dessa configuração permitirá que essas extensões declarem uma dependência na extensão do Key Vault. Isso impedirá que essas extensões sejam iniciadas até que todos os certificados dos quais dependem tenham sido instalados.
A extensão tentará novamente executar download inicial até 25 vezes, com intervalos de espera crescentes, durante os quais permanecerá em um estado Transitioning. Se as novas tentativas estiverem esgotadas, a extensão relatará o estado Error.
Para ativar a dependência de extensão, configure o seguinte:
"secretsManagementSettings": {
"requireInitialSync": true,
...
}
Observação
O uso desse recurso não é compatível com um modelo ARM que cria uma identidade atribuída pelo sistema e atualiza uma política de acesso ao Key Vault com essa identidade. Isso resultará em um deadlock, uma vez que a política de acesso do cofre não pode ser atualizada até que todas as extensões sejam iniciadas. Em vez disso, você deve usar uma identidade de MSI atribuída por um único usuário e pré-listar o controle de acesso de seus cofres com essa identidade antes da implantação.
Implantação do Azure PowerShell
Aviso
Os clientes do PowerShell geralmente adicionam \ ao"settings.js, o que fará com que o caakvvm_service apresente falha com o erro: [CertificateManagementConfiguration] Failed to parse the configuration settings with:not an object.
O Azure PowerShell pode ser usado para implantar a extensão da VM do Diagnóstico de Key Vault em uma máquina virtual existente ou em um conjunto de dimensionamento de máquina virtual.
- Para implantar a extensão em uma VM:
A extensão da VM do Azure Key Vault pode ser implantada com o Azure PowerShell. Salve as configurações de extensão da VM do Key Vault em um arquivo JSON (settings.json).
Os trechos JSON a seguir fornecem configurações de exemplo para implantar a extensão da VM do Key Vault com o PowerShell.
{
"secretsManagementSettings": {
"pollingIntervalInS": "3600",
"linkOnRenewal": true,
"aclEnabled": true,
"observedCertificates":
[
{
"url": "https://<examplekv>.vault.azure.net/secrets/mycertificate1",
"certificateStoreLocation": "/var/lib/waagent/Microsoft.Azure.KeyVault.Store",
"acls":
[
{
"user": "app1",
"group": "appGroup1"
},
{
"user": "service1"
}
]
},
{
"url": "https://<examplekv>.vault.azure.net/secrets/mycertificate2",
"certificateStoreLocation": "/var/lib/waagent/Microsoft.Azure.KeyVault.Store",
"acls":
[
{
"user": "app2"
}
]
}
]},
"authenticationSettings": {
"msiEndpoint": "http://169.254.169.254/metadata/identity/oauth2/token",
"msiClientId": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxx"
}
}
- Para implantar a extensão em uma máquina virtual:
# Build settings
$settings = (get-content -raw ".\settings.json")
$extName = "KeyVaultForLinux"
$extPublisher = "Microsoft.Azure.KeyVault"
$extType = "KeyVaultForLinux"
# Start the deployment
Set-AzVmExtension -TypeHandlerVersion "3.0" -ResourceGroupName <ResourceGroupName> -Location <Location> -VMName <VMName> -Name $extName -Publisher $extPublisher -Type $extType -SettingString $settings
- Para implantar a extensão em um conjunto de dimensionamento de máquinas virtuais:
# Build settings
$settings = (get-content -raw ".\settings.json")
$extName = "KeyVaultForLinux"
$extPublisher = "Microsoft.Azure.KeyVault"
$extType = "KeyVaultForLinux"
# 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
Implantação da CLI do Azure
A CLI do Azure pode ser usada para implantar a extensão da VM do Key Vault em uma máquina virtual existente ou em um conjunto de dimensionamento de máquinas virtuais.
- Para implantar a extensão em uma VM:
A extensão da VM do Azure Key Vault pode ser implantada usando a CLI do Azure. Salve as configurações de extensão da VM do Key Vault em um arquivo JSON (settings.json).
Os trechos JSON a seguir fornecem configurações de exemplo para implantar a extensão da VM do Key Vault com a CLI do Azure.
{
"secretsManagementSettings": {
"pollingIntervalInS": "3600",
"linkOnRenewal": true,
"aclEnabled": true,
"observedCertificates":
[
{
"url": "https://<examplekv>.vault.azure.net/secrets/mycertificate1",
"certificateStoreLocation": "/var/lib/waagent/Microsoft.Azure.KeyVault.Store",
"acls":
[
{
"user": "app1",
"group": "appGroup1"
},
{
"user": "service1"
}
]
},
{
"url": "https://<examplekv>.vault.azure.net/secrets/mycertificate2",
"certificateStoreLocation": "/var/lib/waagent/Microsoft.Azure.KeyVault.Store",
"acls":
[
{
"user": "app2"
}
]
}
]},
"authenticationSettings": {
"msiEndpoint": "http://169.254.169.254/metadata/identity/oauth2/token",
"msiClientId": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxx"
}
}
- Para implantar a extensão em uma máquina virtual
# Start the deployment
az vm extension set -n "KeyVaultForLinux" `
--publisher Microsoft.Azure.KeyVault `
-g "<resourcegroup>" `
--vm-name "<vmName>" `
--version 3.0 `
--enable-auto-upgrade true `
--settings "@settings.json"
- Para implantar a extensão em um conjunto de dimensionamento de máquinas virtuais:
# Start the deployment
az vmss extension set -n "KeyVaultForLinux" `
--publisher Microsoft.Azure.KeyVault `
-g "<resourcegroup>" `
--vmss-name "<vmssName>" `
--version 3.0 `
--enable-auto-upgrade true `
--settings "@settings.json"
Por favor esteja ciente das seguintes restrições/exigências:
- Restrições de Key Vault:
- Ele deve existir no momento da implantação
- A função de Usuário de Segredos do Key Vault deve ser atribuída ao Key Vault para a identidade da VM
Solução de problemas e suporte
Os dados sobre o estado das implantações de extensão podem ser recuperados no Portal do Azure usando o Azure PowerShell. Para ver o estado da implantação das extensões de uma determinada VM, execute o comando a seguir usando o Azure PowerShell.
PowerShell do Azure
Get-AzVMExtension -VMName <vmName> -ResourceGroupname <resource group name>
CLI do Azure
az vm get-instance-view --resource-group <resource group name> --name <vmName> --query "instanceView.extensions"
A CLI do Azure pode ser executada em vários ambientes de shell, mas com pequenas variações de formato. Se você tiver resultados inesperados com comandos da CLI do Azure, confira Como usar a CLI do Azure com êxito.
Logs e configuração
Os logs de extensão de VM do Key Vault existem localmente na VM e são mais informativos quando se trata de solucionar problemas. Você pode usar a seção de registro em log opcional para se integrar ao provedor de log por meio de fluentd
| Location | Descrição |
|---|---|
| /var/log/waagent.log | Mostra quando acontece uma atualização da extensão. |
| /var/log/azure/Microsoft.Azure.KeyVault.KeyVaultForLinux/* | Examina os logs do serviço de extensão de VM do Key Vault para determinar o status do serviço de akvvm_service e o download do certificado. Você pode encontrar o local de download de arquivos PEM em arquivos com uma entrada chamada nome de arquivo de certificado. Se certificateStoreLocation não for especificado, será usado como padrão /var/lib/waagent/Microsoft.Azure.KeyVault.Store/ |
| /var/lib/waagent/Microsoft.Azure.KeyVault.KeyVaultForLinux-<versão mais recente>/config/* | A configuração e os binários do serviço da Extensão de VM do Key Vault. |
Usando symlink
Links simbólicos ou symlinks são basicamente atalhos avançados. Para evitar o monitoramento da pasta e obter o certificado mais recente automaticamente, você pode usar esse symlink ([VaultName].[CertificateName]) para obter a versão mais recente do certificado no Linux.
Instalação de certificado no Linux
A extensão de VM do Key Vault para Linux instala certificados como arquivos PEM com a cadeia de certificados completa incluída. Quando um certificado é baixado do Key Vault, a extensão:
- Cria uma pasta de armazenamento com base na configuração
certificateStoreLocation(o padrão é/var/lib/waagent/Microsoft.Azure.KeyVault.Store/se não especificado) - Instala a cadeia de certificados completa e a chave privada em um arquivo PEM seguindo a seção RFC 5246 7.4.2 nesta ordem específica:
- O certificado de folha (certificado de entidade final) vem primeiro
- Os certificados intermediários seguem em ordem, em que cada certificado certifica diretamente aquele antes dele
- Certificado raiz, se presente (embora não seja necessário para validação se já for confiável pelo sistema)
- A chave privada, correspondente ao certificado final, é colocada no final do arquivo.
- Cria automaticamente um link simbólico chamado
[VaultName].[CertificateName]que aponta para a versão mais recente do certificado
Essa abordagem garante que:
- Os aplicativos sempre têm acesso à cadeia de certificados completa necessária para validação
- A cadeia de certificados é ordenada corretamente para handshakes TLS de acordo com os padrões RFC
- A chave privada está disponível para uso pelo serviço
- Os aplicativos podem referenciar um caminho de link simbólico estável que é atualizado automaticamente quando os certificados são renovados
- Nenhuma reconfiguração de aplicativo é necessária quando os certificados são girados ou renovados
Exemplo de estrutura de caminho de certificado
Para um certificado exampleVault.vault.azure.net com o nome myCertificate, a estrutura do diretório teria a seguinte aparência:
/var/lib/waagent/Microsoft.Azure.KeyVault.Store/
├── exampleVault.myCertificate -> exampleVault.myCertificate.1234567890abcdef
├── exampleVault.myCertificate.1234567890abcdef # Full chain PEM file (current version)
└── exampleVault.myCertificate.0987654321fedcba # Previous version (if exists)
Os aplicativos devem ser configurados para usar o caminho de link simbólico (/var/lib/waagent/Microsoft.Azure.KeyVault.Store/exampleVault.myCertificate) para garantir que eles sempre acessem a versão de certificado mais atual.
Quando você usa locais personalizados do repositório de certificados e a configuração customSymbolicLinkName, a estrutura segue este padrão:
/path/to/custom/store/
├── customLinkName -> exampleVault.myCertificate.1234567890abcdef
└── exampleVault.myCertificate.1234567890abcdef # Full chain PEM file
Perguntas frequentes
- Há um limite no número de observedCertificates que você pode configurar? Não, a extensão de VM do Key Vault não tem limite no número de observedCertificates.
Suporte
Caso precise de mais ajuda em qualquer ponto deste artigo, entre em contato com os especialistas do Azure nos fóruns do Azure MSDN e do Stack Overflow. Como alternativa, você pode registrar um incidente de suporte do Azure. Vá para o site de Suporte do Azure e selecione Obter suporte. Para saber mais sobre como usar o Suporte do Azure, leia as Perguntas frequentes sobre o suporte do Microsoft Azure.