Quando você precisa automatizar tarefas no Azure com scripts e ferramentas, você consideraria usar contas de serviço ou princípios de serviço do Azure? Não é incomum para alguns apenas criarem uma nova conta de serviço, atribuírem todas as funções de administrador desejadas e excluírem-na da autenticação multifator (MFA).
I know what you’re thinking – “that is a horrible idea”. Of course, it is! And for sure, your IT Sec will give you a lot of grief if you did all that.
Mas qual é a alternativa? Como você pode usar uma credencial privilegiada com escopo limitado que não precisa ser excluída da autenticação multifator? Você tem sorte, porque é isso que este artigo vai te ensinar.
Neste artigo, você aprenderá sobre o que é um Princípio de Serviço do Azure. Você aprenderá como criar princípios de serviço com diferentes tipos de credenciais, como senhas, chaves secretas e certificados.
Existem muitas ferramentas para criar Princípios de Serviço do Azure. Estas incluem o uso do Portal do Azure, Centro de Administração do Azure Active Directory, Azure AD PowerShell, Azure CLI, e Azure PowerShell. A ferramenta que será foco deste artigo é o Azure PowerShell.
Ainda interessado? Continue lendo e vamos começar!
Requisitos
Uma vez que este é um artigo de aprendizado prático, aqui estão alguns requisitos para que você possa acompanhar.
- Acesso a uma assinatura do Azure. Seria melhor se você estivesse trabalhando em um inquilino de teste. Se você não tiver um, você pode se inscrever para um teste gratuito.
- Acesso a um computador com Windows 10 e PowerShell 5.1.
- O módulo Azure PowerShell deve estar instalado.
Azure Service Principal vs. Service Account
Ferramentas e scripts de automação geralmente precisam de acesso de administrador ou privilegiado. Por exemplo, provisionar contas de armazenamento ou iniciar e parar máquinas virtuais em um cronograma. E a maioria dos administradores provavelmente usa uma conta de usuário totalmente privilegiada (chamada conta de serviço) para configurar os requisitos de credenciais para os scripts.
A service account is essentially a privileged user account used to authenticate using a username and password. And, if used with automation, a service account is most likely excluded from any conditional access policies or multi-factor authentication.
Por outro lado, um Azure service principal pode ser configurado para usar um nome de usuário e senha ou um certificado para autenticação. Pense nele como uma identidade de usuário sem um usuário, mas sim uma identidade para uma aplicação.
Um Azure service principal pode ser atribuído com acesso mínimo, a apenas um recurso específico do Azure. Por exemplo, você pode criar um Azure service principal que tenha acesso baseado em função a uma assinatura inteira ou apenas a uma única máquina virtual do Azure.
**Considerações Principais para Criar Azure Service Principals**
Antes de criar um Azure service principal, é importante conhecer os detalhes básicos que você precisa planejar. Esses detalhes podem parecer simples, mas tornarão a criação de um Azure service principal tão eficiente e fácil quanto possível.
O nome de exibição. Tudo começa com um nome, e um Azure service principal deve ter um nome. Não há uma regra específica aqui, mas a sua organização pode ter uma convenção de nomenclatura prescrita.
- O tipo de credencial a ser usado. Você pode optar por criar um Azure service principal que usará uma senha ou certificado para autenticação. Isso não significa que você só pode escolher um; você pode usar ambos.
Para service principals, o nome de usuário e a senha são mais apropriadamente chamados de ID do aplicativo e chave secreta.
- O período de validade da(s) credencial(is). Ao atribuir uma senha ou uma credencial de certificado, é necessário definir uma data de início e término para sua validade. A duração típica da validade de uma credencial geralmente depende de com que frequência você está disposto a rotacionar ou renovar certificados e senhas.
- O escopo de acesso. Você está criando um Azure service principal com acesso a uma assinatura, grupo de recursos ou recursos selecionados?
- O papel. Existem vários papéis disponíveis, como Contribuinte, Leitor e Proprietário, para citar alguns. Você precisa definir qual papel é “suficiente” para o service principal.
Criando um Principal de Serviço do Azure com Chave Secreta Atribuída Automaticamente
O cerne da criação de um novo principal de serviço no Azure é o cmdlet New-AzAdServicePrincipal
. Neste exemplo, um novo principal de serviço será criado com estes valores:
DisplayName: AzVM_Reader
Escopo: AzVM1 (Máquina Virtual)
Função: Reader
Senha: <atribuída automaticamente>
Validade das Credenciais: 1 ano
Obtendo o ID do Escopo Alvo (Máquina Virtual)
Como você pode ver, o escopo deste novo principal de serviço é apenas para a máquina virtual chamada AzVM1. No entanto, o parâmetro -Escopo
não aceita apenas o nome, mas o ID completo do recurso. Portanto, neste exemplo, a primeira coisa a fazer é obter o ID da máquina virtual AzVM1. Para fazer isso, use o código abaixo.
Ao executar o código acima no PowerShell, você deverá ver a lista de nomes e IDs das VMs, semelhante à captura de tela abaixo.

Criando o Principal de Serviço do Azure com Chave Secreta
Agora que você tem o ID do escopo alvo, que é o ID da máquina virtual AzVM1, você pode usar o comando abaixo para criar o novo principal de serviço que tem a função de leitor. As propriedades do novo principal de serviço serão armazenadas na variável $sp
.
Como resultado do comando acima, o principal de serviço foi criado com estes valores abaixo.

Descriptografando a Chave Secreta
Agora você tem o ApplicationID e Secret, que é o nome de usuário e senha do principal de serviço. No entanto, o valor do Secret é mostrado como System.Security.SecureString. Você vai querer saber qual é o segredo. Para isso, use o comando abaixo para converter o segredo em texto simples.
O comando acima converte o valor de string seguro de $sp.Secret
para texto simples. Veja a imagem abaixo para referência.

Verificando a Atribuição de Função Principal de Serviço do Azure
Como você sabe que isso funcionou? Você pode verificar a lista de controle de acesso do recurso usando o Portal do Azure. Por exemplo, na imagem abaixo, você pode ver que o principal de serviço AzVM_Reader agora tem acesso de Leitor à máquina virtual AzVM1.

Também é possível usar o comando Get-AzRoleAssignment -ObjectID $sp.id
para obter as atribuições de função do principal de serviço do Azure. Veja a captura de tela abaixo como exemplo.

Criando um Principal de Serviço do Azure com Senha
Se você deseja ter mais controle sobre qual senha ou chave secreta é atribuída ao seu principal de serviço do Azure, use o parâmetro -PasswordCredential
durante a criação do principal de serviço. Isso é especialmente útil se a senha precisar atender a um requisito de complexidade.
Neste exemplo, o novo principal de serviço do Azure será criado com estes valores:
NomeExibição: ATA_RG_Contributor
Escopo: ATA (Grupo de Recursos)
Função: Contribuinte
Senha: 20 caracteres de comprimento com 6 caracteres não alfanuméricos
Validade das Credenciais: 5 anos
Obtendo o ID do Escopo Alvo (Grupo de Recursos)
O escopo deste novo principal de serviço abrange todo o grupo de recursos chamado ATA. O primeiro passo é obter o ID do grupo de recursos ATA. Para fazer isso, use o código abaixo, mas certifique-se de alterar o valor do parâmetro -Name
para o nome do seu grupo de recursos.
Em seguida, você deverá ver o ResourceID
do grupo de recursos, que agora está armazenado na variável $Scope
.

Gerando a Sequência de Senha
O próximo passo é gerar a senha que segue a complexidade de 20 caracteres de comprimento com 6 caracteres não alfanuméricos. Para isso, você pode utilizar o método estático do .NET GeneratePassword()
.
No código acima, GeneratePassword(20, 6)
, o primeiro valor representa o comprimento da senha, e o segundo valor representa o número de caracteres não alfanuméricos a serem incluídos. O resultado é mostrado na captura de tela abaixo.

GeneratePassword()
static methodCriando o Objeto de Credencial de Senha
Agora que você possui a string de senha, o próximo passo é criar o objeto Microsoft.Azure.Commands.ActiveDirectory.PSADPasswordCredential
. Este objeto conterá a string de senha armazenada na variável $password
e o período de validade de 5 anos. Copie o código abaixo e execute-o em sua sessão do Azure PowerShell.
Executar o código acima no PowerShell irá, por sua vez, armazenar o objeto de credencial na variável $PasswordCredential
. O resultado esperado seria semelhante ao mostrado abaixo.

Criando o Principal de Serviço com Senha
Agora você tem os valores dos parâmetros necessários prontos para criar o principal de serviço do Azure. O código abaixo irá criar o principal de serviço com o nome de exibição ATA_RG_Contributor e usando a senha armazenada na variável $PasswordCredential
.
Após executar o código, o novo principal de serviço deve ser criado, e as propriedades são armazenadas na variável $sp
. Veja o exemplo de resultado abaixo.

Atribuindo a Função e o Escopo
O principal de serviço do Azure foi criado na seção anterior, mas sem Função e Escopo. Isso ocorre porque os parâmetros -Role
e -Scope
não podem ser usados em conjunto com o parâmetro -PasswordCredential
. Isso significa que um passo adicional é necessário para atribuir a função e o escopo ao principal de serviço.
O código abaixo utiliza o cmdlet New-AzRoleAssignment
para atribuir o escopo e a função do principal serviço do Azure.
A captura de tela abaixo mostra o resultado esperado após a atribuição da função e do escopo ao principal serviço do Azure.

Sempre certifique-se de salvar a senha do principal serviço porque não há como recuperá-la se você não conseguir salvá-la ou se esquecer dela.
Conectando ao Azure com uma Senha de Principal de Serviço
Agora, para colocar o principal serviço em uso. Em vez de fazer login no Azure PowerShell usando uma conta de usuário, o código abaixo utiliza a credencial do principal serviço.
Depois de executar o código acima, você deverá estar conectado ao Azure PowerShell usando o serviço principal ATA_RG_Contributor e as credenciais de senha.

Criando um Azure Service Principal com Certificado
Além das credenciais de senha, um serviço principal do Azure também pode ter uma credencial baseada em certificado. O certificado associado pode ser emitido por uma autoridade de certificação ou autoassinado.
Neste exemplo, o novo serviço principal do Azure será criado com os seguintes valores:
DisplayName: VSE3_SUB_OWNER
Escopo: VSE3 (Assinatura)
Função: Proprietário
Validade do Certificado: 2 anos
Obtendo o ID do Escopo de Destino (Assinatura)
O escopo deste novo serviço principal abrange a assinatura do Azure denominada VSE3. A primeira coisa a fazer é obter o ID da assinatura VSE3. Para fazer isso, use o código abaixo, mas certifique-se de alterar o valor do parâmetro -SubscriptionName
para o nome do seu grupo de recursos.
Em seguida, especifique o nome do novo serviço principal do Azure e o certificado autoassinado a serem criados.
Criando o Certificado Autoassinado
O código abaixo cria a senha autoassinada no repositório de certificados pessoais com o nome CN=VSE3_SUB_OWNER. A validade do certificado é definida para dois anos. As propriedades do certificado são salvas na variável $cert
.
A captura de tela abaixo mostra que o certificado foi criado.

Se você deseja ver o novo certificado de forma mais familiar (GUI), pode encontrá-lo no console de Certificados (certmgr.mmc). Consulte a imagem abaixo que mostra o certificado.

O próximo passo é obter o valor codificado em Base64 do certificado autoassinado e salvá-lo na variável $keyValue
.
Criando o Principal de Serviço com Certificado
Agora que o certificado foi criado, o próximo passo é criar o novo principal de serviço do Azure. O código abaixo criará o principal de serviço do Azure que usará o certificado autoassinado como credencial. O período de validade da credencial coincide com o período de validade do certificado.
Você obterá uma saída semelhante à mostrada na imagem abaixo.

Atribuindo a Função e o Escopo
O principal de serviço do Azure foi criado, mas ainda não foram atribuídos Função e Escopo. Isso significa que é necessário um passo adicional para atribuir a função e o escopo ao principal de serviço.
O código abaixo usa o cmdlet New-AzRoleAssignment
para atribuir a função de proprietário à assinatura VSE3 do principal de serviço.
Ao executar o código, a captura de tela abaixo mostra a confirmação de que a atribuição de função foi feita.

Conectando ao Azure com um Certificado de Principal de Serviço
Agora você criou o principal de serviço com uma credencial baseada em certificado. Isso significa que você pode usá-lo para se conectar ao Azure sem usar uma senha. Em vez disso, você usará o certificado disponível em seu computador como método de autenticação.
Neste exemplo, o nome de exibição do principal de serviço é VSE3_SUB_OWNER, e o nome do certificado é CN=VSE3_SUB_OWNER. O código abaixo irá obter a impressão digital do certificado da loja de certificados pessoais e usá-lo como credencial de login.
A captura de tela abaixo mostra que, usando o código acima, o login no Azure PowerShell foi bem-sucedido usando apenas o ApplicationID, Tenant e Impressão digital do Certificado.

Conclusão
Principais de Serviço do Azure são os principais de segurança que devem ser considerados ao criar credenciais para tarefas de automação e ferramentas que acessam recursos do Azure. O escopo e a função a serem aplicados podem ser escolhidos para dar permissões de acesso “suficientes”.
Neste artigo, você aprendeu como criar Princípios de Serviço do Azure usando apenas o PowerShell. Os Princípios de Serviço do Azure podem ter uma senha, chave secreta ou credenciais baseadas em certificado. Cada um desses tipos de credenciais tem suas vantagens e cenários de uso aplicáveis.
Princípios de serviço com uma credencial de senha ou chave secreta são mais portáteis, mas considerados menos seguros porque a credencial pode ser compartilhada como texto simples. Por outro lado, as credenciais baseadas em certificado são a opção mais segura, mas exigem um pouco mais de esforço para manter.
As técnicas que você aprendeu neste artigo abordaram apenas o básico para começar a usar os princípios de serviço do Azure em sua automação. Existem muitas outras maneiras de configurar os princípios de serviço do Azure, como adicionar, remover e redefinir credenciais. Cabe a você descobri-las conforme avança.
Obrigado por ler!
Recursos de Aprendizagem Adicionais
Aqui estão alguns recursos que você pode achar úteis para acompanhar este artigo.
- Connect-AzAccount: Seu Gateway Para o Azure com PowerShell
- Connect-AzAccount: Seu Gateway Para o Azure com PowerShell
- Como Gerar uma Senha Aleatória com PowerShell
- O que é o controle de acesso baseado em funções do Azure (Azure RBAC)?
- Desmistificando os Princípios de Serviço do Azure AD
- Como criar um Principal de Serviço do Azure via Azure CLI 2.0
- Como controlar o acesso aos serviços do Office 365 com MFA
Source:
https://adamtheautomator.com/azure-service-principal/