Partilhar via


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

Uma identidade gerenciada no Azure fornece uma maneira segura e contínua para aplicativos, serviços e ferramentas de automação acessarem recursos do Azure sem armazenar credenciais em código ou configuração. Ao contrário das entidades de serviço, que exigem gerenciamento manual de credenciais, o Azure lida automaticamente com identidades gerenciadas e não expõe segredos confidenciais. O uso de uma identidade gerenciada é a prática recomendada 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 dos usuários. As permissões para identidades gerenciadas são gerenciadas por meio do Microsoft Entra, garantindo que elas tenham apenas o acesso necessário aos recursos, aprimorando a segurança e a capacidade de manutenção.

Importante

A partir do início de 2025, a autenticação no Azure a partir do Azure PowerShell usando uma identidade de usuário do Microsoft Entra ID exigirá autenticação multifator (MFA). Para obter mais informações, consulte Planejando a autenticação multifator obrigatória para o Azure e outros portais de administração.

Pré-requisitos

Login com uma identidade gerenciada

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

Existem dois tipos de identidades gerenciadas:

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

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

Veja como as identidades gerenciadas funcionam em cenários do mundo real:

  • O Azure gerencia automaticamente a criação e a exclusão das credenciais usadas pela identidade gerenciada.
  • Um serviço do Azure habilitado com uma identidade gerenciada pode acessar com segurança outros serviços, como o Cofre da Chave do Azure, o Banco de Dados SQL do Azure, o Armazenamento de Blobs do Azure, etc., usando tokens do Microsoft Entra.
  • Essa identidade é gerenciada diretamente no 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 nas operações seguras na nuvem, reduzindo o risco associado ao tratamento de segredos.

Identidade gerenciada atribuída ao sistema

O Azure cria automaticamente uma identidade gerenciada atribuída ao sistema para uma instância de serviço do Azure (como uma VM do Azure, Serviço de Aplicativo ou Azure Functions). Quando a instância de serviço é excluída, o 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 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 no Microsoft Entra. Ele pode ser atribuído a uma ou mais instâncias de serviço do Azure. O ciclo de vida de uma identidade gerenciada atribuída pelo usuário é gerenciado separadamente das instâncias de serviço às quais é atribuída.

Ao usar uma identidade gerenciada atribuída pelo usuário, você deve especificar o parâmetro AccountId e o parâmetro 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 do myUserAssignedIdentity. Ele adiciona a identidade atribuída pelo usuário à máquina virtual e, em seguida, se conecta usando o 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 do Azure em uma VM do Azure.

Iniciar sessão com uma entidade de serviço

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

  • AppId
  • Credenciais de início de sessão ou acesso ao certificado usado para criar o principal de serviço
  • ID do inquilino

A forma como você entra com uma entidade de serviço depende se ela está configurada para autenticação baseada em certificado ou em senha.

Autenticação baseada em certificado

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

A autenticação baseada em certificado exige que o Azure PowerShell recupere informações de um armazenamento 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 uma aplicação registada, especifique o parâmetro ServicePrincipal e forneça o AppId da entidade de serviço como valor para o parâmetro ApplicationId.

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

No Windows PowerShell 5.1, o armazenamento 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 armazenamento 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 desta seção. Para obter mais informações sobre como criar entidades de serviço, consulte Criar uma entidade de serviço do Azure com o Azure PowerShell.

$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

Atenção

O segredo principal do serviço fornecido é armazenado no arquivo AzureRmContext.json em seu perfil de usuário ($env:USERPROFILE\.Azure). Verifique se este diretório tem proteções apropriadas.

Para obter as credenciais da principal de serviço como um objeto, use o cmdlet Get-Credential. Este cmdlet solicita um nome de usuário e uma senha. Use o AppId da entidade de serviço para o nome de utilizador e converta o seu secret em texto simples 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, precisa criar credenciais a partir da AppId e SecretTextde um service principal:

$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 práticas apropriadas de armazenamento de senha ao automatizar as conexões da entidade de serviço.

Ver também