Como parar de usar a máquina virtual gerenciados a extensão de identidades e começar a usar o serviço de metadados de instância do AzureHow to stop using the virtual machine managed identities extension and start using the Azure Instance Metadata Service

Extensão da máquina virtual para identidades gerenciadasVirtual machine extension for managed identities

A extensão de máquina virtual para identidades gerenciadas é usada para solicitar tokens para uma identidade gerenciada dentro da máquina virtual.The virtual machine extension for managed identities is used to request tokens for a managed identity within the virtual machine. O fluxo de trabalho consiste as seguintes etapas:The workflow consists of the following steps:

  1. Em primeiro lugar, a carga de trabalho no recurso chama o ponto de extremidade local http://localhost/oauth2/token para solicitar um token de acesso.First, the workload within the resource calls the local endpoint http://localhost/oauth2/token to request an access token.
  2. A extensão de máquina virtual, em seguida, usa as credenciais para a identidade gerenciada, para solicitar um token de acesso do AD do Azure...The virtual machine extension then uses the credentials for the managed identity, to request an access token from Azure AD..
  3. O token de acesso é retornado ao chamador e pode ser usado para autenticar os serviços que dão suporte à autenticação do AD do Azure, como o Azure Key Vault ou armazenamento do Azure.The access token is returned to the caller, and can be used to authenticate to services that support Azure AD authentication, like Azure Key Vault or Azure Storage.

Devido a várias limitações descritas na próxima seção, a extensão de VM de identidade gerenciada foi preterida em favor do uso do ponto de extremidade equivalente no serviço de metadados de instância para Azure (IMDS)Due to several limitations outlined in the next section, the managed identity VM extension has been deprecated in favor of using the equivalent endpoint in the Azure Instance Metadata Service (IMDS)

Provisionar a extensãoProvision the extension

Quando você configura uma máquina virtual ou definida para ter uma identidade gerenciada de dimensionamento de máquinas virtuais, você pode optar por provisionar as identidades de gerenciado para a extensão VM de recursos do Azure usando o -Type parâmetro sobre o Conjunto AzVMExtension cmdlet.When you configure a virtual machine or virtual machine scale set to have a managed identity, you may optionally choose to provision the managed identities for Azure resources VM extension using the -Type parameter on the Set-AzVMExtension cmdlet. Você pode transmitir ManagedIdentityExtensionForWindows ou ManagedIdentityExtensionForLinux, dependendo do tipo de máquina virtual e nomeie-o usando o -Name parâmetro.You can pass either ManagedIdentityExtensionForWindows or ManagedIdentityExtensionForLinux, depending on the type of virtual machine, and name it using the -Name parameter. O parâmetro -Settings especifica a porta usada pelo ponto de extremidade do token OAuth para aquisição de token:The -Settings parameter specifies the port used by the OAuth token endpoint for token acquisition:

   $settings = @{ "port" = 50342 }
   Set-AzVMExtension -ResourceGroupName myResourceGroup -Location WestUS -VMName myVM -Name "ManagedIdentityExtensionForWindows" -Type "ManagedIdentityExtensionForWindows" -Publisher "Microsoft.ManagedIdentity" -TypeHandlerVersion "1.0" -Settings $settings 

Você também pode usar o modelo de implantação do Azure Resource Manager para provisionar a extensão de VM, adicionando o seguinte JSON para o resources seção para o modelo (usar ManagedIdentityExtensionForLinux para os elementos nome e tipo de versão do Linux).You can also use the Azure Resource Manager deployment template to provision the VM extension, by adding the following JSON to the resources section to the template (use ManagedIdentityExtensionForLinux for the name and type elements for the Linux version).

```json
{
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "name": "[concat(variables('vmName'),'/ManagedIdentityExtensionForWindows')]",
    "apiVersion": "2018-06-01",
    "location": "[resourceGroup().location]",
    "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
    ],
    "properties": {
        "publisher": "Microsoft.ManagedIdentity",
        "type": "ManagedIdentityExtensionForWindows",
        "typeHandlerVersion": "1.0",
        "autoUpgradeMinorVersion": true,
        "settings": {
            "port": 50342
        }
    }
}
```

Se você estiver trabalhando com conjuntos de dimensionamento de máquina virtual, você também pode provisionar as identidades de gerenciado para conjunto de dimensionamento de máquina virtual de recursos do Azure extensão usando o AzVmssExtension adicionar cmdlet.If you're working with virtual machine scale sets, you can also provision the managed identities for Azure resources virtual machine scale set extension using the Add-AzVmssExtension cmdlet. Você pode transmitir ManagedIdentityExtensionForWindows ou ManagedIdentityExtensionForLinux, dependendo do tipo de dimensionamento de máquinas virtuais definido e nomeie-o usando o -Name parâmetro.You can pass either ManagedIdentityExtensionForWindows or ManagedIdentityExtensionForLinux, depending on the type of virtual machine scale set, and name it using the -Name parameter. O parâmetro -Settings especifica a porta usada pelo ponto de extremidade do token OAuth para aquisição de token:The -Settings parameter specifies the port used by the OAuth token endpoint for token acquisition:

$setting = @{ "port" = 50342 }
$vmss = Get-AzVmss
Add-AzVmssExtension -VirtualMachineScaleSet $vmss -Name "ManagedIdentityExtensionForWindows" -Type "ManagedIdentityExtensionForWindows" -Publisher "Microsoft.ManagedIdentity" -TypeHandlerVersion "1.0" -Setting $settings 

Para provisionar o dimensionamento de máquinas virtuais definir a extensão com o modelo de implantação do Azure Resource Manager, adicione o seguinte JSON para o extensionpProfile seção para o modelo (usar ManagedIdentityExtensionForLinux para os elementos nome e tipo de versão do Linux).To provision the virtual machine scale set extension with the Azure Resource Manager deployment template, add the following JSON to the extensionpProfile section to the template (use ManagedIdentityExtensionForLinux for the name and type elements for the Linux version).

```json
"extensionProfile": {
    "extensions": [
        {
            "name": "ManagedIdentityWindowsExtension",
            "properties": {
                "publisher": "Microsoft.ManagedIdentity",
                "type": "ManagedIdentityExtensionForWindows",
                "typeHandlerVersion": "1.0",
                "autoUpgradeMinorVersion": true,
                "settings": {
                    "port": 50342
                },
                "protectedSettings": {}
            }
        }
```

Provisionamento de extensão da máquina virtual pode falhar devido a falhas de pesquisa de DNS.Provisioning of the virtual machine extension might fail due to DNS lookup failures. Se isso ocorrer, reinicie a máquina virtual e tente novamente.If this happens, restart the virtual machine, and try again.

Remover a extensãoRemove the extension

Para remover a extensão, use -n ManagedIdentityExtensionForWindows ou -n ManagedIdentityExtensionForLinux alterne (dependendo do tipo de máquina virtual) com exclusão de extensão de vm az, ou exclusão de extensão az vmss para dimensionamento de máquinas virtuais define usando a CLI do Azure, ou Remove-AzVMExtension do Powershell:To remove the extension, use -n ManagedIdentityExtensionForWindows or -n ManagedIdentityExtensionForLinux switch (depending on the type of virtual machine) with az vm extension delete, or az vmss extension delete for virtual machine scale sets using Azure CLI, or Remove-AzVMExtension for Powershell:

az vm identity --resource-group myResourceGroup --vm-name myVm -n ManagedIdentityExtensionForWindows
az vmss extension delete -n ManagedIdentityExtensionForWindows -g myResourceGroup -vmss-name myVMSS
Remove-AzVMExtension -ResourceGroupName myResourceGroup -Name "ManagedIdentityExtensionForWindows" -VMName myVM

Adquirir um token usando a extensão de máquina virtualAcquire a token using the virtual machine extension

A seguir está um exemplo de solicitação usando as identidades de gerenciado para recursos do Azure ponto de extremidade de extensão de VM:The following is a sample request using the managed identities for Azure resources VM Extension Endpoint:

GET http://localhost:50342/oauth2/token?resource=https%3A%2F%2Fmanagement.azure.com%2F HTTP/1.1
Metadata: true
ElementoElement DESCRIÇÃODescription
GET O verbo HTTP, indicando que você deseja recuperar os dados do ponto de extremidade.The HTTP verb, indicating you want to retrieve data from the endpoint. Neste caso, um token de acesso OAuth.In this case, an OAuth access token.
http://localhost:50342/oauth2/token As identidades gerenciadas do ponto de extremidade de recursos do Azure, em que 50342 é a porta padrão e é configurável.The managed identities for Azure resources endpoint, where 50342 is the default port and is configurable.
resource Um parâmetro de cadeia de caracteres de consulta que indica o URI da ID do aplicativo do recurso de destino.A query string parameter, indicating the App ID URI of the target resource. Ele também aparece na declaração aud (público) do token emitido.It also appears in the aud (audience) claim of the issued token. Este exemplo solicita um token para acessar o Azure Resource Manager, que tem um URI de ID do aplicativo de https://management.azure.com/.This example requests a token to access Azure Resource Manager, which has an App ID URI of https://management.azure.com/.
Metadata Um campo de cabeçalho de solicitação HTTP, exigido por identidades gerenciadas para recursos do Azure como uma atenuação contra ataque SSRF (Server Side Request Forgery).An HTTP request header field, required by managed identities for Azure resources as a mitigation against Server Side Request Forgery (SSRF) attack. Esse valor deve ser definido como "true", com todas as letras minúsculas.This value must be set to "true", in all lower case.
object_id (Opcional) Um parâmetro de string de consulta, indicando o object_id da identidade gerenciada para a qual você deseja o token.(Optional) A query string parameter, indicating the object_id of the managed identity you would like the token for. Obrigatório, se a VM tiver várias identidades gerenciadas atribuídas ao usuário.Required, if your VM has multiple user-assigned managed identities.
client_id (Opcional) Um parâmetro de cadeia de consulta, indicando o client_id da identidade gerenciada para a qual você deseja o token.(Optional) A query string parameter, indicating the client_id of the managed identity you would like the token for. Obrigatório, se a VM tiver várias identidades gerenciadas atribuídas ao usuário.Required, if your VM has multiple user-assigned managed identities.

Exemplo de resposta:Sample response:

HTTP/1.1 200 OK
Content-Type: application/json
{
  "access_token": "eyJ0eXAi...",
  "refresh_token": "",
  "expires_in": "3599",
  "expires_on": "1506484173",
  "not_before": "1506480273",
  "resource": "https://management.azure.com/",
  "token_type": "Bearer"
}
ElementoElement DESCRIÇÃODescription
access_token O token de acesso solicitado.The requested access token. Ao chamar uma API REST protegida, o token é inserido no campo de cabeçalho de solicitação Authorization como um token "portador", permitindo que a API autentique o chamador.When calling a secured REST API, the token is embedded in the Authorization request header field as a "bearer" token, allowing the API to authenticate the caller.
refresh_token Não usado por identidades gerenciadas para recursos do Azure.Not used by managed identities for Azure resources.
expires_in O número de segundos que o token de acesso continua sendo válido antes da expiração desde o momento da emissão.The number of seconds the access token continues to be valid, before expiring, from time of issuance. A hora da emissão pode ser encontrada na declaração iat do token.Time of issuance can be found in the token's iat claim.
expires_on O período de expiração do token de acesso.The timespan when the access token expires. A data é representada como o número de segundos de “1970-01-01T0:0:0Z UTC” (corresponde à declaração exp do token).The date is represented as the number of seconds from "1970-01-01T0:0:0Z UTC" (corresponds to the token's exp claim).
not_before O período para o token de acesso entrar em vigor e poder ser aceito.The timespan when the access token takes effect, and can be accepted. A data é representada como o número de segundos de “1970-01-01T0:0:0Z UTC” (corresponde à declaração nbf do token).The date is represented as the number of seconds from "1970-01-01T0:0:0Z UTC" (corresponds to the token's nbf claim).
resource O recurso para o qual o token de acesso foi solicitado, que corresponde ao parâmetro de cadeia de consulta resource da solicitação.The resource the access token was requested for, which matches the resource query string parameter of the request.
token_type O tipo de token, que é um token de acesso "Portador", o que significa que o recurso pode conceder acesso ao portador desse token.The type of token, which is a "Bearer" access token, which means the resource can give access to the bearer of this token.

Solucionar problemas da extensão de máquina virtualTroubleshoot the virtual machine extension

Reinicie a extensão de máquina virtual após uma falhaRestart the virtual machine extension after a failure

No Windows e em determinadas versões do Linux, se a extensão for interrompida, o cmdlet a seguir poderá ser usado para reiniciá-lo:On Windows and certain versions of Linux, if the extension stops, the following cmdlet may be used to manually restart it:

Set-AzVMExtension -Name <extension name>  -Type <extension Type>  -Location <location> -Publisher Microsoft.ManagedIdentity -VMName <vm name> -ResourceGroupName <resource group name> -ForceRerun <Any string different from any last value used>

Em que:Where:

  • Nome da extensão e o tipo para o Windows é: ManagedIdentityExtensionForWindowsExtension name and type for Windows is: ManagedIdentityExtensionForWindows
  • Nome da extensão e o tipo para o Linux é: ManagedIdentityExtensionForLinuxExtension name and type for Linux is: ManagedIdentityExtensionForLinux

"Script de automação" falha ao tentar exportar esquemas para identidades gerenciadas para a extensão de recursos do Azure"Automation script" fails when attempting schema export for managed identities for Azure resources extension

Quando as identidades gerenciadas para recursos do Azure está habilitada em uma máquina virtual, o erro a seguir é mostrado ao tentar usar o recurso "Script de automação" para a máquina virtual ou seu grupo de recursos:When managed identities for Azure resources is enabled on a virtual machine, the following error is shown when attempting to use the “Automation script” feature for the virtual machine, or its resource group:

Identidades gerenciadas para erro de exportação de script de automação de recursos do Azure

As identidades de gerenciado para a extensão de máquina virtual de recursos do Azure atualmente não oferece suporte para a capacidade de exportar seu esquema para um modelo de grupo de recursos.The managed identities for Azure resources virtual machine extension does not currently support the ability to export its schema to a resource group template. Como resultado, o modelo gerado não mostra parâmetros de configuração para habilitar identidades gerenciadas para recursos do Azure no recurso.As a result, the generated template does not show configuration parameters to enable managed identities for Azure resources on the resource. Essas seções podem ser adicionadas manualmente seguindo os exemplos configurar gerenciadas identidades para recursos do Azure em uma máquina virtual do Azure usando modelos de.These sections can be added manually by following the examples in Configure managed identities for Azure resources on an Azure virtual machine using a templates.

Quando a funcionalidade de exportação de esquema está disponível para as identidades de gerenciado para a extensão de máquina virtual de recursos do Azure (planejada para substituição em janeiro de 2019), ele será listado no exportar grupos de recursos que contêm extensões de VM .When the schema export functionality becomes available for the managed identities for Azure resources virtual machine extension (planned for deprecation in January 2019), it will be listed in Exporting Resource Groups that contain VM extensions.

Limitações da extensão de máquina virtualLimitations of the virtual machine extension

Existem várias limitações importantes ao usar a extensão de máquina virtual.There are several major limitations to using the virtual machine extension.

  • A limitação mais séria é o fato de que as credenciais usadas para solicitar tokens são armazenadas na máquina virtual.The most serious limitation is the fact that the credentials used to request tokens are stored on the virtual machine. Um invasor que a máquina virtual de violações com êxito pode remover as credenciais.An attacker who successfully breaches the virtual machine can exfiltrate the credentials.
  • Além disso, a extensão da máquina virtual ainda sem suporte por várias distribuições do Linux, com um enorme custo para modificar, compilar e testar a extensão em cada um dessas distribuições de desenvolvimento.Furthermore, the virtual machine extension is still unsupported by several Linux distributions, with a huge development cost to modify, build and test the extension on each of those distributions. Atualmente, há suporte para as seguintes distribuições Linux:Currently, only the following Linux distributions are supported:
    • CoreOS EstávelCoreOS Stable
    • CentOS 7.1CentOS 7.1
    • Red Hat 7.2Red Hat 7.2
    • Ubuntu 15.04Ubuntu 15.04
    • Ubuntu 16.04Ubuntu 16.04
  • Há um impacto no desempenho à implantação de máquinas virtuais com identidades gerenciadas, como a extensão da máquina virtual também deve ser provisionado.There is a performance impact to deploying virtual machines with managed identities, as the virtual machine extension also has to be provisioned.
  • Por fim, a extensão da máquina virtual suporta apenas ter 32 gerenciadas identidades atribuídas por máquina virtual.Finally, the virtual machine extension can only support having 32 user-assigned managed identities per virtual machine.

Serviço de metadados de instância do AzureAzure Instance Metadata Service

O serviço de metadados de instância (IMDS) do Azure é um ponto de extremidade REST que fornece informações sobre instâncias de máquina virtual que podem ser usadas para gerenciar e configurar suas máquinas virtuais em execução.The Azure Instance Metadata Service (IMDS) is a REST endpoint that provides information about running virtual machine instances that can be used to manage and configure your virtual machines. O ponto de extremidade está disponível em um endereço IP não roteável conhecido (169.254.169.254) que podem ser acessados somente de dentro da máquina virtual.The endpoint is available at a well-known non-routable IP address (169.254.169.254) that can be accessed only from within the virtual machine.

Há diversas vantagens em usar o Azure IMDS para solicitar tokens.There are several advantages to using Azure IMDS to request tokens.

  1. O serviço é externo à máquina virtual, portanto as credenciais usadas pelo identidades gerenciadas não estão mais presentes na máquina virtual.The service is external to the virtual machine, therefore the credentials used by managed identities are no longer present on the virtual machine. Em vez disso, eles são hospedados e protegidos no computador host de máquina virtual do Azure.Instead, they are hosted and secured on the host machine of the Azure virtual machine.
  2. Todos os sistemas operacionais Windows e Linux com suporte no Azure IaaS pode usar identidades gerenciadas.All Windows and Linux operating systems supported on Azure IaaS can use managed identities.
  3. Implantação é mais rápido e fácil, já que a extensão de VM não precisa ser provisionado.Deployment is faster and easier, since the VM extension no longer needs to be provisioned.
  4. Com o IMDS ponto de extremidade, até 1000 identidades gerenciados atribuída pelo usuário pode ser atribuído a uma única máquina virtual.With the IMDS endpoint, up to 1000 user-assigned managed identities can be assigned to a single virtual machine.
  5. Não há nenhuma alteração significativa para as solicitações usando IMDS em vez de aqueles que usam a extensão de máquina virtual, portanto é bem simple para a porta em relação às implantações existentes que atualmente usam a extensão de máquina virtual.There is no significant change to the requests using IMDS as opposed to those using the virtual machine extension, therefore it is fairly simple to port over existing deployments that currently use the virtual machine extension.

Por esses motivos, o serviço de Azure IMDS será a maneira na escola ideal para solicitar tokens, depois que a extensão da máquina virtual foi preterido.For these reasons, the Azure IMDS service will be the defacto way to request tokens, once the virtual machine extension is deprecated.

Próximas etapasNext Steps