Entrar no Azure PowerShell de forma não interativa para cenários de automação
Uma entidade de serviço no Azure é uma conta não-interativa que fornece uma identidade usada por aplicativos, serviços e ferramentas de automação para acessar recursos específicos do Azure. A autenticação com uma entidade de serviço é a melhor maneira de escrever scripts seguros porque eles atuam como uma identidade de segurança com permissões atribuídas que regem quais ações podem ser executadas e quais recursos podem ser acessados. As entidades de serviço ajudam a automatizar com segurança as tarefas de gerenciamento sem usar contas de usuário pessoais, facilitando o acesso mais seguro e gerenciável aos recursos do Azure. Assim como outras contas de usuário, você gerencia suas permissões com o Microsoft Entra. Ao conceder a uma entidade de serviço somente as permissões necessárias, você manterá os scripts de automação protegidos.
Pré-requisitos
Fazer logon 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 na configuração ou no código para autenticar em qualquer serviço do 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 do Azure sem que os desenvolvedores precisem gerenciar credenciais. Elas também ajudam a atenuar o risco de vazamentos de credenciais.
Veja como as identidades gerenciadas funcionam em cenários reais:
- 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 Azure Key Vault, 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 precisar 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
O Azure cria automaticamente uma identidade gerenciada atribuída pelo sistema para uma instância de serviço do Azure (como uma VM do Azure, o Serviço de Aplicativo ou o Azure Functions). Se a instância de serviço é excluída, o Azure limpa automaticamente as credenciais e a identidade associadas ao serviço.
Esse exemplo 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 no Microsoft Entra. Ela pode ser atribuída a uma ou mais instâncias de um serviço do Azure. O ciclo de vida de uma identidade atribuída pelo usuário é gerenciado separadamente do ciclo de vida das instâncias de serviço do Azure a que ela é atribuída.
Ao usar uma identidade gerenciada atribuída pelo usuário, você deve especificar o parâmetro AccountId além do 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 de myUserAssignedIdentity
. A identidade atribuída pelo usuário é adicionada à máquina virtual e, em seguida, é feita a conexão usando o ClientId dessa identidade.
$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 saber mais, confira Configurar identidades gerenciadas para recursos do Azure em uma VM do Azure.
Fazer logon com uma entidade de serviço
Para entrar com uma entidade de serviço, use o parâmetro ServicePrincipal do cmdlet Connect-AzAccount
. 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 a entidade de serviço
- ID do locatário
A forma de entrar com uma entidade de serviço depende se ela está configurada para autenticação baseada em certificado ou senha.
Autenticação baseada em certificado
Para saber como criar uma entidade de serviço para usar com 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 possa recuperar informações de um repositório de certificados local com base em uma impressão digital do 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 mostram como importar um certificado existente no repositório de certificados acessível pelo PowerShell.
Importar um certificado no PowerShell 7.xe 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 uma entidade de serviço a ser usada nos exemplos nessa seção. Para obter mais informações sobre como criar as entidades de serviço, confira Criar uma entidade de serviço do Azure com o Azure PowerShell.
$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName
Cuidado
O segredo da entidade de serviço fornecido é armazenado no arquivo AzureRmContext.json
em seu perfil de usuário ($env:USERPROFILE\.Azure
). Verifique se o diretório tem as proteções apropriadas.
Para obter as credenciais da entidade de serviço como um objeto, use o cmdlet Get-Credential
. Esse cmdlet solicita um nome de usuário e uma senha. Use o AppId
da entidade 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 as credenciais de AppId
e SecretText
de uma entidade de serviço:
$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 senha ao automatizar conexões de entidade de serviço.
Confira também
- Criar uma entidade de serviço do Azure com o Azure PowerShell
- O que são identidades gerenciadas para recursos do Azure?
- Atribuir um acesso de identidade gerenciada a um recurso usando o PowerShell
- Exibir a entidade de serviço de uma identidade gerenciada usando o PowerShell
- Connect-AzAccount
- New-AzADServicePrincipal
- Get-Credential
Azure PowerShell