Criar um principal de serviço do Azure com o Azure PowerShell
Aviso
O módulo AzureRM PowerShell foi oficialmente preterido a partir de 29 de fevereiro de 2024. Os usuários são aconselhados a migrar do AzureRM para o módulo Az PowerShell para garantir suporte e atualizações contínuos.
Embora o módulo AzureRM ainda possa funcionar, ele não é mais mantido ou suportado, colocando qualquer uso continuado a critério e risco do usuário. Consulte nossos recursos de migração para obter orientação sobre a transição para o módulo Az.
Se você planeja gerenciar seu aplicativo ou serviço com o Azure PowerShell, deve executá-lo em uma entidade de serviço do Azure Microsoft Entra, em vez de suas próprias credenciais. Este artigo orienta-o ao longo da criação de um principal de segurança com o Azure PowerShell.
Nota
Também pode criar um principal de serviço através do portal do Azure. Leia Utilizar o portal para criar o principal de serviço e de aplicação do Active Directory que pode aceder a recursos para obter mais detalhes.
O que é um “principal de serviço”?
Um principal de serviço do Azure é uma identidade de segurança utilizada por aplicações e serviços criados por utilizadores e ferramentas de automatização para aceder a recursos do Azure específicos. Pense nisso como uma "identidade de utilizador" (nome de utilizador e palavra-passe ou certificado) com uma função específica e permissões fortemente controladas. Um principal de serviço apenas precisa de fazer determinadas coisas, ao contrário das identidades de utilizador gerais. Melhora a segurança se apenas lhe conceder o nível de permissões mínimo de que precisa para realizar as tarefas de gestão.
Verificar o seu nível de permissões
Primeiro, você deve ter permissões suficientes em sua ID do Microsoft Entra e em sua assinatura do Azure. Tem de poder criar uma aplicação no Active Directory e atribuir uma função ao principal de serviço.
A forma mais fácil de verificar se a sua conta tem permissões adequadas é utilizar o portal. Veja Check required permission in portal (Verificar as permissões necessárias no portal).
Criar um principal de serviço para a sua aplicação
Quando tiver iniciado sessão na sua conta do Azure, pode criar o principal de serviço. Tem de ter um dos seguintes modos de identificação da sua aplicação implementada:
- O nome exclusivo da aplicação implementada, tal como "MyDemoWebApp" nos exemplos, ou
- o ID da Aplicação, o GUID exclusivo associado à sua aplicação implementada, serviço ou objeto
Obter informações sobre a sua aplicação
O cmdlet Get-AzureRmADApplication
pode servir para obter informações sobre a aplicação.
Get-AzureRmADApplication -DisplayNameStartWith MyDemoWebApp
DisplayName : MyDemoWebApp
ObjectId : 775f64cd-0ec8-4b9b-b69a-8b8946022d9f
IdentifierUris : {http://MyDemoWebApp}
HomePage : http://www.contoso.com
Type : Application
ApplicationId : 00001111-aaaa-2222-bbbb-3333cccc4444
AvailableToOtherTenants : False
AppPermissions :
ReplyUrls : {}
Criar um principal de serviço para a sua aplicação
O cmdlet New-AzureRmADServicePrincipal
é utilizado para criar o principal de serviço.
$servicePrincipal = New-AzureRmADServicePrincipal -ApplicationId 00001111-aaaa-2222-bbbb-3333cccc4444
Secret : System.Security.SecureString
ServicePrincipalNames : {00001111-aaaa-2222-bbbb-3333cccc4444, http://MyDemoWebApp}
ApplicationId : 00001111-aaaa-2222-bbbb-3333cccc4444
DisplayName : MyDemoWebApp
Id : 698138e7-d7b6-4738-a866-b4e3081a69e4
AdfsId :
Type : ServicePrincipal
A partir daqui, pode ou utilizar diretamente a propriedade $servicePrincipal.Secret em Connect-AzureRmAccount (veja "Iniciar sessão com o principal de serviço" abaixo) ou pode converter esta SecureString numa cadeia de carateres de texto simples para utilização posterior:
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($servicePrincipal.Secret)
$password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($BSTR)
Iniciar sessão com o principal de serviço
Agora pode iniciar sessão como o novo principal de serviço para a sua aplicação com o appId que forneceu e a palavra-passe que gerada automaticamente. Também vai precisar do ID de Inquilino para o principal de serviço. O ID do Inquilino é apresentado ao iniciar sessão no Azure com as suas credenciais pessoais. Para iniciar sessão com um principal de serviço, utilize os comandos seguintes:
$cred = New-Object System.Management.Automation.PSCredential ("00001111-aaaa-2222-bbbb-3333cccc4444", $servicePrincipal.Secret)
Connect-AzureRmAccount -Credential $cred -ServicePrincipal -TenantId 00000000-0000-0000-0000-000000000000
Depois de iniciar sessão com êxito, verá o resultado da seguinte forma:
Environment : AzureCloud
Account : 00001111-aaaa-2222-bbbb-3333cccc4444
TenantId : 00000000-0000-0000-0000-000000000000
SubscriptionId :
SubscriptionName :
CurrentStorageAccount :
Parabéns! Pode utilizar estas credenciais para executar a aplicação. Em seguida, tem de ajustar as permissões do principal de serviço.
Gerir funções
Nota
O Controlo de Acesso Baseado em Funções (RBAC) do Azure é um modelo para definir e gerir funções para principais de utilizador e serviço. As funções têm conjuntos de permissões associadas às mesmas, que determinam os recursos que o principal pode ler, aceder, escrever ou gerir. Para obter mais informações sobre RBAC e funções, veja RBAC: Built-in roles (RBAC: Funções incorporadas).
O Azure PowerShell disponibiliza os cmdlets seguintes para gerir atribuições de funções:
A função predefinida dos principais de serviço é Contribuidor. Pode não ser a melhor opção consoante o âmbito das interações da sua aplicação com os serviços do Azure, dadas as suas amplas permissões. A função Leitor é mais restritiva e é uma boa escolha para aplicações só de leitura. Pode ver detalhes de permissões específicas de funções ou criar permissões personalizadas através do portal do Azure.
Neste exemplo, adicionámos a função Leitor ao exemplo anterior e eliminámos a função Contribuinte:
New-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4 -RoleDefinitionName Reader
RoleAssignmentId : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG/providers/Microsoft.Authorization/roleAssignments/818892f2-d075-46a1-a3a2-3a4e1a12fcd5
Scope : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG
DisplayName : MyDemoWebApp
SignInName :
RoleDefinitionName : Reader
RoleDefinitionId : b24988ac-6180-42a0-ab88-20f7382dd24c
ObjectId : 698138e7-d7b6-4738-a866-b4e3081a69e4
ObjectType : ServicePrincipal
Remove-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4 -RoleDefinitionName Contributor
Para ver as funções atuais atribuídas:
Get-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4
RoleAssignmentId : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG/providers/Microsoft.Authorization/roleAssignments/0906bbd8-9982-4c03-8dae-aeaae8b13f9e
Scope : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG
DisplayName : MyDemoWebApp
SignInName :
RoleDefinitionName : Reader
RoleDefinitionId : acdd72a7-3385-48ef-bd42-f606fba81ae7
ObjectId : 698138e7-d7b6-4738-a866-b4e3081a69e4
ObjectType : ServicePrincipal
Outros cmdlets do Azure PowerShell para gestão de funções:
- Get-AzureRmRoleDefinition
- New-AzureRmRoleDefinition
- Remove-AzureRmRoleDefinition
- Set-AzureRmRoleDefinition
Alterar as credenciais do principal de segurança
Rever as permissões e atualizar a palavra-passe regularmente é uma boa prática de segurança. Também pode ser útil gerir e modificar as credenciais de segurança à medida que a sua aplicação sofre alterações. Por exemplo, podemos alterar a palavra-passe do principal de serviço ao criar uma nova palavra-passe e ao remover a antiga.
Adicionar uma nova palavra-passe para o principal de serviço
New-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
Secret : System.Security.SecureString
StartDate : 11/16/2018 12:38:23 AM
EndDate : 11/16/2019 12:38:23 AM
KeyId : 00001111-aaaa-2222-bbbb-3333cccc4444
Type : Password
Obter uma lista de credenciais para o principal de serviço
Get-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
StartDate EndDate KeyId Type
--------- ------- ----- ----
3/8/2017 5:58:24 PM 3/8/2018 5:58:24 PM 00001111-aaaa-2222-bbbb-3333cccc4444 Password
5/5/2016 4:55:27 PM 5/5/2017 4:55:27 PM ca9d4846-4972-4c70-b6f5-a4effa60b9bc Password
Remover a palavra-passe antiga do principal de serviço
Remove-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp -KeyId ca9d4846-4972-4c70-b6f5-a4effa60b9bc
Confirm
Are you sure you want to remove credential with keyId '00001111-aaaa-2222-bbbb-3333cccc4444' for
service principal objectId '698138e7-d7b6-4738-a866-b4e3081a69e4'.
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y
Verificar a lista de credenciais para o principal de serviço
Get-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
StartDate EndDate KeyId Type
--------- ------- ----- ----
3/8/2017 5:58:24 PM 3/8/2018 5:58:24 PM 00001111-aaaa-2222-bbbb-3333cccc4444 Password
Obter informações sobre o principal de serviço
$svcprincipal = Get-AzureRmADServicePrincipal -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4
$svcprincipal | Select-Object -Property *
ServicePrincipalNames : {http://MyDemoWebApp, 00001111-aaaa-2222-bbbb-3333cccc4444}
ApplicationId : 00001111-aaaa-2222-bbbb-3333cccc4444
DisplayName : MyDemoWebApp
Id : 698138e7-d7b6-4738-a866-b4e3081a69e4
Type : ServicePrincipal