Compartilhar via


Entre no Azure PowerShell não interativamente para cenários de automação

Uma identidade gerenciada em Azure fornece uma maneira segura e perfeita para aplicativos, serviços e ferramentas de automação acessarem Azure recursos sem armazenar credenciais em código ou configuração. Ao contrário das entidades de serviço, que exigem gerenciamento manual de credenciais, Azure manipula automaticamente identidades gerenciadas e não expõe segredos confidenciais. Usar uma identidade gerenciada é a melhor prática para escrever scripts de automação seguros porque simplifica a autenticação e minimiza o risco de vazamentos de credenciais. As identidades gerenciadas também ajudam a automatizar tarefas de gerenciamento com segurança sem depender das identidades do usuário. As permissões para identidades gerenciadas são gerenciadas por meio de Microsoft Entra, garantindo que elas tenham apenas o acesso necessário aos recursos, melhorando a segurança e a manutenção.

Importante

A partir de setembro de 2025, Azure PowerShell exigirá autenticação multifator (MFA) ao entrar com uma identidade de usuário Microsoft Entra ID. Essa alteração aprimora a segurança, mas pode afetar fluxos de trabalho de automação que dependem da autenticação de nome de usuário e senha. Para obter mais informações, consulte O impacto da autenticação multifator em Azure PowerShell em cenários de automação.

Pré-requisitos

Fazer logon com uma identidade gerenciada

As identidades gerenciadas são um tipo especial de entidade de serviço que fornece serviços Azure com uma identidade gerenciada automaticamente. Usar esse tipo de identidade não requer o armazenamento de credenciais na configuração ou no código para autenticar em qualquer serviço de Azure que dê suporte a identidades gerenciadas.

Há dois tipos de identidades gerenciadas:

  • Identidade gerenciada atribuída pelo sistema
  • Identidade gerenciada atribuída pelo usuário

As identidades gerenciadas fornecem uma maneira segura de se comunicar com outros serviços Azure sem que os desenvolvedores precisem gerenciar credenciais. Eles também ajudam a atenuar o risco de vazamentos de credenciais.

Veja como as identidades gerenciadas funcionam em cenários reais:

  • Azure gerencia automaticamente a criação e a exclusão das credenciais usadas pela identidade gerenciada.
  • Um serviço de Azure habilitado com uma identidade gerenciada pode acessar com segurança outros serviços, como Azure Key Vault, Banco de Dados SQL do Azure, Armazenamento de Blobs do Azure etc., usando tokens Microsoft Entra.
  • Essa identidade é gerenciada diretamente em Azure sem a necessidade de provisionamento adicional.

As identidades gerenciadas simplificam o modelo de segurança evitando a necessidade de armazenar e gerenciar credenciais e desempenham um papel crucial em operações de nuvem seguras, reduzindo o risco associado ao tratamento de segredos.

Identidade gerenciada atribuída pelo sistema

Azure cria automaticamente uma identidade gerenciada atribuída pelo sistema para uma instância de serviço Azure (como uma VM Azure, Serviço de Aplicativo ou Azure Functions). Quando a instância de serviço é excluída, Azure limpa automaticamente as credenciais e a identidade associada ao serviço.

O exemplo a seguir se conecta usando uma identidade gerenciada atribuída pelo sistema do ambiente do host. Se executado em uma máquina virtual com uma identidade gerenciada atribuída, ele permite que o código entre usando a identidade atribuída.

 Connect-AzAccount -Identity

Identidade gerenciada atribuída pelo usuário

Uma identidade gerenciada atribuída pelo usuário é uma identidade que você cria e gerencia em Microsoft Entra. Ele pode ser atribuído a uma ou mais instâncias de serviço Azure. O ciclo de vida de uma identidade gerenciada atribuída pelo usuário é gerenciado separadamente das instâncias de serviço às quais ela é atribuída.

Ao usar uma identidade gerenciada atribuída pelo usuário, você deve especificar os parâmetros AccountId e Identity , conforme mostrado no exemplo a seguir.

 Connect-AzAccount -Identity -AccountId <user-assigned-identity-clientId-or-resourceId>

Os comandos a seguir se conectam usando a identidade gerenciada de myUserAssignedIdentity. Ele adiciona a identidade atribuída pelo usuário à máquina virtual e, em seguida, conecta-se usando a ClientId da identidade atribuída pelo usuário.

$identity = Get-AzUserAssignedIdentity -ResourceGroupName myResourceGroup -Name myUserAssignedIdentity
Get-AzVM -ResourceGroupName contoso -Name testvm | Update-AzVM -IdentityType UserAssigned -IdentityId $identity.Id
Connect-AzAccount -Identity -AccountId $identity.ClientId # Run on the virtual machine
Account                              SubscriptionName TenantId                             Environment
-------                              ---------------- --------                             -----------
00000000-0000-0000-0000-000000000000 My Subscription  00000000-0000-0000-0000-000000000000 AzureCloud

Para obter mais informações, consulte Configurar identidades gerenciadas para recursos Azure em uma VM Azure.

Fazer login com uma entidade de serviço

Para entrar com um principal de serviço, use o parâmetro ServicePrincipal do Connect-AzAccount cmdlet. Você também precisará das seguintes informações para a entidade de serviço:

  • AppId
  • Credenciais de entrada ou acesso ao certificado usado para criar o principal de serviço
  • ID do locatário

Como você faz login com um principal de serviço depende se ele está configurado para autenticação baseada em certificado ou senha.

Autenticação baseada em certificado

Para saber como criar uma entidade de serviço para Azure PowerShell, consulte Criar uma entidade de serviço Azure com Azure PowerShell.

A autenticação baseada em certificado requer Azure PowerShell para recuperar informações de um repositório de certificados local com base em uma impressão digital de certificado.

Connect-AzAccount -ApplicationId $appId -Tenant $tenantId -CertificateThumbprint <thumbprint>

Ao usar uma entidade de serviço em vez de um aplicativo registrado, especifique o parâmetro ServicePrincipal e forneça o AppId da entidade de serviço como o valor para o parâmetro ApplicationId .

Connect-AzAccount -ServicePrincipal -ApplicationId $servicePrincipalId -Tenant $tenantId -CertificateThumbprint <thumbprint>

No Windows PowerShell 5.1, o repositório de certificados pode ser gerenciado e inspecionado com o módulo PKI. Para o PowerShell 7.x e posterior, o processo é diferente. Os scripts a seguir demonstram como importar um certificado existente para o repositório de certificados acessível pelo PowerShell.

Importar um certificado no PowerShell 7.x e posterior

# Import a PFX
$storeName = [System.Security.Cryptography.X509Certificates.StoreName]::My
$storeLocation = [System.Security.Cryptography.X509Certificates.StoreLocation]::CurrentUser
$store = [System.Security.Cryptography.X509Certificates.X509Store]::new($storeName, $storeLocation)
$certPath = <path to certificate>
$credentials = Get-Credential -Message "Provide PFX private key password"
$flag = [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable
$certificate = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($certPath, $credentials.Password, $flag)
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
$store.Add($Certificate)
$store.Close()

Importar um certificado no Windows PowerShell 5.1

# Import a PFX
$credentials = Get-Credential -Message 'Provide PFX private key password'
Import-PfxCertificate -FilePath <path to certificate> -Password $credentials.Password -CertStoreLocation cert:\CurrentUser\My

Autenticação baseada em senha

Crie um principal de serviço para usar com os exemplos nesta seção. Para obter mais informações sobre como criar entidades de serviço, consulte Criar uma entidade de serviço Azure com Azure PowerShell.

$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

Cuidado

O segredo da service principal fornecida é armazenado no arquivo AzureRmContext.json em seu perfil de usuário ($env:USERPROFILE\.Azure). Verifique se esse diretório tem proteções apropriadas.

Para obter as credenciais da entidade de serviço como um objeto, use o Get-Credential cmdlet. Esse cmdlet solicita um nome de usuário e uma senha. Use o AppId do principal de serviço para o nome de usuário e converta o secret em texto sem formatação para a senha.

# Retrieve the plain text password for use with Get-Credential in the next command.
$sp.PasswordCredentials.SecretText

$pscredential = Get-Credential -UserName $sp.AppId
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId

Para cenários de automação, você precisa criar credenciais a partir de um principal de serviço AppId e SecretText:

$SecureStringPwd = $sp.PasswordCredentials.SecretText | ConvertTo-SecureString -AsPlainText -Force
$pscredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $sp.AppId, $SecureStringPwd
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId

Use as práticas apropriadas de armazenamento de senhas ao automatizar conexões de principal do serviço.

Consulte também