Conceder a um aplicativo acesso aos recursos do Azure Stack Hub
Um aplicativo que implanta ou configura recursos por meio do Azure Resource Manager deve ser representado por sua própria identidade, conhecida como entidade de segurança. Assim como um usuário é representado por uma entidade de usuário, um aplicativo é representado por uma entidade de serviço.
A identidade também pode ser usada para delegar apenas as permissões necessárias ao usuário ou aplicativo. Por exemplo, um aplicativo de gerenciamento de configuração pode usar o Azure Resource Manager para inventariar recursos do Azure. O aplicativo seria registrado no diretório e, em seguida, adicionado à função "leitor" no escopo apropriado, limitando o aplicativo ao acesso somente leitura.
Visão geral
Como um usuário, um aplicativo deve apresentar credenciais durante a autenticação, o que requer dois elementos:
- Uma ID do Aplicativo, às vezes chamada de ID do Cliente. Uma GUID que identifica exclusivamente o registro do aplicativo no locatário do Active Directory.
- Um segredo. Você pode gerar uma cadeia de caracteres secreta do cliente (semelhante a uma senha) ou especificar uma impressão digital do certificado X509 (que usa sua chave pública).
Executar um aplicativo em sua própria identidade é preferível a executá-lo sob a identidade do usuário pelos seguintes motivos:
- Credenciais mais fortes – Um aplicativo pode entrar usando um certificado X509, em vez de um segredo ou uma senha compartilhada textual.
- Permissões mais restritivas podem ser atribuídas a um aplicativo. Normalmente, essas permissões são restritas apenas ao que o aplicativo precisa fazer, conhecido como o princípio de privilégios mínimos.
- Credenciais e permissões não mudam com tanta frequência para um aplicativo como as credenciais de usuário. Por exemplo, quando as responsabilidades do usuário mudam, os requisitos de senha determinam uma alteração ou quando um usuário sai da empresa.
Você começa criando um novo registro de aplicativo em seu diretório, que cria um objeto de entidade de serviço associado para representar a identidade do aplicativo dentro do diretório. O processo de registro varia dependendo do diretório escolhido para sua instância do Azure Stack Hub:
- ID do Microsoft Entra: O Microsoft Entra ID é um serviço de gerenciamento de identidades e diretório multilocatário, baseado em nuvem. Você pode usar a ID do Microsoft Entra com uma instância conectada do Azure Stack Hub. Os exemplos apresentados posteriormente usarão o portal do Azure para registro de aplicativo do Microsoft Entra.
- Serviços de Federação do Active Directory (AD FS): o AD FS fornece recursos simplificados e seguros de federação de identidade e SSO (logon único) da Web. Você pode usar o AD FS com instâncias do Azure Stack Hub conectadas e desconectadas. Os exemplos apresentados posteriormente usarão o PowerShell do Azure Stack Hub para registro de aplicativo do AD FS.
Depois de registrar o aplicativo, você aprenderá como atribuí-lo a uma função, limitando seu acesso a recursos.
Gerenciar um aplicativo do Microsoft Entra
Se você implantou o Azure Stack Hub com a ID do Microsoft Entra como seu serviço de gerenciamento de identidades, crie e gerencie identidades para aplicativos da mesma forma que faz para o Azure. Esta seção mostra como executar as etapas usando o portal do Azure. Examine as permissões necessárias para registrar um aplicativo antes de começar, para garantir que você tenha permissões suficientes para registrar um aplicativo.
Criar um registro de aplicativo que usa uma credencial secreta do cliente
Nesta seção, você registra seu aplicativo em seu locatário do Microsoft Entra usando o portal do Azure. No exemplo a seguir, você especifica uma credencial secreta do cliente, mas o portal também dá suporte a credenciais baseadas em certificado X509.
Entre no portal do Azure usando a conta do Azure.
Selecione Registros de>aplicativo do Microsoft Entra ID>Novo registro.
Forneça um nome para o aplicativo.
Selecione os tipos de conta compatíveis apropriados.
Em URI de redirecionamento, selecione Web como o tipo de aplicativo e (opcionalmente) especifique um URI de redirecionamento se o aplicativo exigir.
Depois de definir os valores, selecione Registrar. O registro do aplicativo é criado e a página Visão geral é exibida.
Copie a ID do aplicativo para uso no código do aplicativo. Esse valor também é conhecido como ID do Cliente.
Para gerar um segredo do cliente, selecione a página Certificados e segredos . Selecione Novo segredo do cliente.
Forneça uma descrição para o segredo e uma duração de expiração.
Ao terminar, selecione Adicionar.
O valor do segredo é exibido. Copie e salve esse valor em outro local, pois você não poderá recuperá-lo posteriormente. Você fornece o segredo com a ID do aplicativo em seu aplicativo cliente para entrada.
Prossiga para Atribuir uma função para saber como estabelecer o controle de acesso baseado em função para a identidade do aplicativo.
Artigos adicionais sobre gerenciamento de aplicativos do Microsoft Entra
Consulte os seguintes artigos do Azure para obter mais detalhes sobre como gerenciar aplicativos do Microsoft Entra:
- Mais detalhes sobre como registrar um aplicativo Microsoft Entra, incluindo como criar um registro de aplicativo que usa uma credencial de certificado.
- Como remover um registro de aplicativo.
- Como restaurar ou remover um registro de aplicativo excluído recentemente.
Gerenciar um aplicativo do AD FS
Se você implantou o Azure Stack Hub com o AD FS como seu serviço de gerenciamento de identidade, deverá usar o PowerShell para gerenciar a identidade do aplicativo. Os exemplos a seguir demonstram um certificado X509 e uma credencial secreta do cliente.
Os scripts devem ser executados em um console do PowerShell com privilégios elevados ("Executar como administrador"), que abre outra sessão para uma VM que hospeda um ponto de extremidade privilegiado para sua instância do Azure Stack Hub. Depois que a sessão de ponto de extremidade privilegiado for estabelecida, cmdlets adicionais serão usados para criar e gerenciar o registro do aplicativo. Para obter mais informações sobre o ponto de extremidade privilegiado, consulte Usando o ponto de extremidade privilegiado no Azure Stack Hub.
Criar um registro de aplicativo que usa uma credencial de certificado
Ao criar uma credencial de certificado, os seguintes requisitos devem ser atendidos:
- Para produção, o certificado deve ser emitido por uma Autoridade de Certificação interna ou uma Autoridade de Certificação Pública. Ao usar uma autoridade pública, você deve incluir a autoridade na imagem do sistema operacional base como parte do Programa de Autoridade Raiz Confiável da Microsoft. Para obter a lista completa, consulte Lista de Participantes – Programa Raiz Confiável da Microsoft. Um exemplo de criação de um certificado de teste "autoassinado" também será mostrado posteriormente durante Atualizar uma credencial de certificado.
- O provedor de criptografia deve ser especificado como um provedor de chaves CSP (provedor de serviços de criptografia) herdado da Microsoft.
- O formato do certificado deve estar no arquivo PFX, pois são necessárias as chaves públicas e privadas. Os servidores Windows usam arquivos .pfx que contêm o arquivo de chave pública (arquivo de certificado TLS/SSL) e o arquivo de chave privada associado.
- Sua infraestrutura do Azure Stack Hub deve ter acesso à rede para o local CRL (lista de certificados revogados) da autoridade de certificação publicado no certificado. Essa CRL deve ser um ponto de extremidade HTTP.
Depois de ter um certificado, use o script do PowerShell abaixo para registrar seu aplicativo e entrar usando a identidade do aplicativo. Substitua seus próprios valores pelos seguintes espaços reservados:
Espaço reservado | Descrição | Exemplo |
---|---|---|
<PepVM> | O nome da VM do ponto de extremidade privilegiado em sua instância do Azure Stack Hub. | "AzS-ERCS01" |
<YourCertificateLocation> | O local do certificado X509 no armazenamento de certificados local. | "Cert:\CurrentUser\My\AB5A8A3533CC7AA2025BF05120117E06DE407B34" |
<NomeDoSeuAplicativo> | Um nome descritivo do novo registro de aplicativo. | "Minha ferramenta de gerenciamento" |
Abra uma sessão com privilégio elevado do PowerShell no Windows e execute o script a seguir.
# Sign in to PowerShell interactively, using credentials that have access to the VM running the Privileged Endpoint (typically <domain>\cloudadmin) $Creds = Get-Credential # Create a PSSession to the Privileged Endpoint VM $Session = New-PSSession -ComputerName "<PepVm>" -ConfigurationName PrivilegedEndpoint -Credential $Creds -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US) # To use a managed certificate from the certificate store, use the Get-Item cmdlet. # To use a certificate file, use Get-Certificate for a .cer file, or Get-PfxCertificate for a .pfx file. # To use a test certificate, use the New-SelfSignedCertificate cmdlet # See https://learn.microsoft.com/powershell/module/pki/new-selfsignedcertificate for usage details, including using the -Provider parameter # $Cert = New-SelfSignedCertificate -CertStoreLocation "cert:\CurrentUser\My" -Subject "CN=<YourAppName>" -KeySpec KeyExchange $Cert = Get-Item "<YourCertificateLocation>" # Use the privileged endpoint to create the new app registration $SpObject = Invoke-Command -Session $Session -ScriptBlock {New-GraphApplication -Name "<YourAppName>" -ClientCertificates $using:cert} $AzureStackInfo = Invoke-Command -Session $Session -ScriptBlock {Get-AzureStackStampInformation} $Session | Remove-PSSession # Using the stamp info for your Azure Stack Hub instance, populate the following variables: # - Az endpoint used for Azure Resource Manager operations # - Audience for acquiring an OAuth token used to access Graph API # - GUID of the directory tenant $ArmEndpoint = $AzureStackInfo.TenantExternalEndpoints.TenantResourceManager $GraphAudience = "https://graph." + $AzureStackInfo.ExternalDomainFQDN + "/" $TenantID = $AzureStackInfo.AADTenantID # Register and set an Az environment that targets your Azure Stack Hub instance Add-AzEnvironment -Name "AzureStackUser" -ArmEndpoint $ArmEndpoint # Sign in using the new service principal $SpSignin = Connect-AzAccount -Environment "AzureStackUser" ` -ServicePrincipal ` -CertificateThumbprint $SpObject.Thumbprint ` -ApplicationId $SpObject.ClientId ` -TenantId $TenantID # Output the service principal details $SpObject
Após a conclusão do script, ele exibe as informações de registro do aplicativo. A
ClientID
eThumbprint
são autenticadas e, posteriormente, autorizadas a acessar os recursos gerenciados pelo Azure Resource Manager.ApplicationIdentifier : S-1-5-21-1512385356-3796245103-1243299919-1356 ClientId : 00001111-aaaa-2222-bbbb-3333cccc4444 Thumbprint : 30202C11BE6864437B64CE36C8D988442082A0F1 ApplicationName : Azurestack-MyApp-c30febe7-1311-4fd8-9077-3d869db28342 ClientSecret : PSComputerName : azs-ercs01 RunspaceId : a78c76bb-8cae-4db4-a45a-c1420613e01b
Mantenha sua sessão de console do PowerShell aberta, pois você a usa com o ApplicationIdentifier
valor na próxima seção.
Atualizar uma credencial de certificado
Agora que você registrou o aplicativo, esta seção mostrará como:
- Crie um novo certificado X509 autoassinado para teste.
- Atualize as credenciais do aplicativo, atualizando sua propriedade Thumbprint para corresponder ao novo certificado.
Atualize a credencial do certificado usando o PowerShell, substituindo seus próprios valores pelos seguintes espaços reservados:
Espaço reservado | Descrição | Exemplo |
---|---|---|
<PepVM> | O nome da VM do ponto de extremidade privilegiado em sua instância do Azure Stack Hub. | "AzS-ERCS01" |
<NomeDoSeuAplicativo> | Um nome descritivo do novo registro de aplicativo. | "Minha ferramenta de gerenciamento" |
<YourCertificateLocation> | O local do certificado X509 no armazenamento de certificados local. | "Cert:\CurrentUser\My\AB5A8A3533CC7AA2025BF05120117E06DE407B34" |
<Identificador de aplicativo> | O identificador atribuído ao registro do aplicativo. | "S-1-5-21-1512385356-3796245103-1243299919-1356" |
Usando sua sessão elevada do Windows PowerShell, execute os seguintes cmdlets:
# Create a PSSession to the PrivilegedEndpoint VM $Session = New-PSSession -ComputerName "<PepVM>" -ConfigurationName PrivilegedEndpoint -Credential $Creds -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US) # Create a self-signed certificate for testing purposes, using the New-SelfSignedCertificate cmdlet # See https://learn.microsoft.com/powershell/module/pki/new-selfsignedcertificate for usage details, including using the -Provider parameter $NewCert = New-SelfSignedCertificate -CertStoreLocation "cert:\CurrentUser\My" -Subject "CN=<YourAppName>" -KeySpec KeyExchange # In production, use Get-Item to retrieve a managed certificate from the certificate store. # Alteratively, use Get-Certificate for a .cer file, or Get-PfxCertificate for a .pfx file. # $Cert = Get-Item "<YourCertificateLocation>" # Use the privileged endpoint to update the certificate thumbprint, used by <AppIdentifier> $SpObject = Invoke-Command -Session $Session -ScriptBlock {Set-GraphApplication -ApplicationIdentifier "<AppIdentifier>" -ClientCertificates $using:NewCert} $Session | Remove-PSSession # Output the updated service principal details $SpObject
Após a conclusão do script, ele exibe as informações de registro do aplicativo atualizadas, incluindo o valor da impressão digital do novo certificado autoassinado.
ApplicationIdentifier : S-1-5-21-1512385356-3796245103-1243299919-1356 ClientId : Thumbprint : AF22EE716909041055A01FE6C6F5C5CDE78948E9 ApplicationName : Azurestack-MyApp-c30febe7-1311-4fd8-9077-3d869db28342 ClientSecret : PSComputerName : azs-ercs01 RunspaceId : a580f894-8f9b-40ee-aa10-77d4d142b4e5
Criar um registro de aplicativo que usa uma credencial secreta do cliente
Aviso
Usar um segredo do cliente é menos seguro do que usar uma credencial de certificado X509. O mecanismo de autenticação não é apenas menos seguro, mas também normalmente requer a inserção do segredo no código-fonte do aplicativo cliente. Dessa forma, para aplicativos de produção, é altamente recomendável usar uma credencial de certificado.
Agora você cria outro registro de aplicativo, mas desta vez especifica uma credencial secreta do cliente. Ao contrário da credencial de certificado, o diretório tem a capacidade de gerar uma credencial de segredo do cliente. Em vez de especificar o segredo do cliente, você usa a -GenerateClientSecret
opção para solicitar que ele seja gerado. Substitua seus próprios valores pelos seguintes espaços reservados:
Espaço reservado | Descrição | Exemplo |
---|---|---|
<PepVM> | O nome da VM do ponto de extremidade privilegiado em sua instância do Azure Stack Hub. | "AzS-ERCS01" |
<NomeDoSeuAplicativo> | Um nome descritivo do novo registro de aplicativo. | "Minha ferramenta de gerenciamento" |
Abra uma sessão com privilégio elevado do PowerShell no Windows e execute os seguintes cmdlets:
# Sign in to PowerShell interactively, using credentials that have access to the VM running the Privileged Endpoint (typically <domain>\cloudadmin) $Creds = Get-Credential # Create a PSSession to the Privileged Endpoint VM $Session = New-PSSession -ComputerName "<PepVM>" -ConfigurationName PrivilegedEndpoint -Credential $Creds -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US) # Use the privileged endpoint to create the new app registration $SpObject = Invoke-Command -Session $Session -ScriptBlock {New-GraphApplication -Name "<YourAppName>" -GenerateClientSecret} $AzureStackInfo = Invoke-Command -Session $Session -ScriptBlock {Get-AzureStackStampInformation} $Session | Remove-PSSession # Using the stamp info for your Azure Stack Hub instance, populate the following variables: # - Az endpoint used for Azure Resource Manager operations # - Audience for acquiring an OAuth token used to access Graph API # - GUID of the directory tenant $ArmEndpoint = $AzureStackInfo.TenantExternalEndpoints.TenantResourceManager $GraphAudience = "https://graph." + $AzureStackInfo.ExternalDomainFQDN + "/" $TenantID = $AzureStackInfo.AADTenantID # Register and set an Az environment that targets your Azure Stack Hub instance Add-AzEnvironment -Name "AzureStackUser" -ArmEndpoint $ArmEndpoint # Sign in using the new service principal $securePassword = $SpObject.ClientSecret | ConvertTo-SecureString -AsPlainText -Force $credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $SpObject.ClientId, $securePassword $SpSignin = Connect-AzAccount -Environment "AzureStackUser" -ServicePrincipal -Credential $credential -TenantId $TenantID # Output the service principal details $SpObject
Após a conclusão do script, ele exibe as informações de registro do aplicativo. A
ClientID
eClientSecret
são autenticadas e, posteriormente, autorizadas a acessar os recursos gerenciados pelo Azure Resource Manager.ApplicationIdentifier : S-1-5-21-1634563105-1224503876-2692824315-2623 ClientId : 11112222-bbbb-3333-cccc-4444dddd5555 Thumbprint : ApplicationName : Azurestack-YourApp-6967581b-497e-4f5a-87b5-0c8d01a9f146 ClientSecret : 6RUWLRoBw3EebBLgaWGiowCkoko5_j_ujIPjA8dS PSComputerName : azs-ercs01 RunspaceId : 286daaa1-c9a6-4176-a1a8-03f543f90998
Mantenha sua sessão de console do PowerShell aberta, pois você a usa com o ApplicationIdentifier
valor na próxima seção.
Atualizar uma credencial secreta do cliente
Atualize a credencial do segredo do cliente usando o PowerShell, usando o parâmetro ResetClientSecret , que altera imediatamente o segredo do cliente. Substitua seus próprios valores pelos seguintes espaços reservados:
Espaço reservado | Descrição | Exemplo |
---|---|---|
<PepVM> | O nome da VM do ponto de extremidade privilegiado em sua instância do Azure Stack Hub. | "AzS-ERCS01" |
<Identificador de aplicativo> | O identificador atribuído ao registro do aplicativo. | "S-1-5-21-1634563105-1224503876-2692824315-2623" |
Usando sua sessão elevada do Windows PowerShell, execute os seguintes cmdlets:
# Create a PSSession to the PrivilegedEndpoint VM $Session = New-PSSession -ComputerName "<PepVM>" -ConfigurationName PrivilegedEndpoint -Credential $Creds -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US) # Use the privileged endpoint to update the client secret, used by <AppIdentifier> $SpObject = Invoke-Command -Session $Session -ScriptBlock {Set-GraphApplication -ApplicationIdentifier "<AppIdentifier>" -ResetClientSecret} $Session | Remove-PSSession # Output the updated service principal details $SpObject
Após a conclusão do script, ele exibe as informações de registro do aplicativo atualizadas, incluindo o segredo do cliente recém-gerado.
ApplicationIdentifier : S-1-5-21-1634563105-1224503876-2692824315-2623 ClientId : 11112222-bbbb-3333-cccc-4444dddd5555 Thumbprint : ApplicationName : Azurestack-YourApp-6967581b-497e-4f5a-87b5-0c8d01a9f146 ClientSecret : MKUNzeL6PwmlhWdHB59c25WDDZlJ1A6IWzwgv_Kn PSComputerName : azs-ercs01 RunspaceId : 6ed9f903-f1be-44e3-9fef-e7e0e3f48564
Remover um registro de aplicativo
Agora você verá como remover um registro de aplicativo do seu diretório usando o PowerShell.
Substitua seus próprios valores pelos seguintes espaços reservados:
Espaço reservado | Descrição | Exemplo |
---|---|---|
<PepVM> | O nome da VM do ponto de extremidade privilegiado em sua instância do Azure Stack Hub. | "AzS-ERCS01" |
<Identificador de aplicativo> | O identificador atribuído ao registro do aplicativo. | "S-1-5-21-1634563105-1224503876-2692824315-2623" |
# Sign in to PowerShell interactively, using credentials that have access to the VM running the Privileged Endpoint (typically <domain>\cloudadmin)
$Creds = Get-Credential
# Create a PSSession to the PrivilegedEndpoint VM
$Session = New-PSSession -ComputerName "<PepVM>" -ConfigurationName PrivilegedEndpoint -Credential $Creds -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
# OPTIONAL: Use the privileged endpoint to get a list of applications registered in AD FS
$AppList = Invoke-Command -Session $Session -ScriptBlock {Get-GraphApplication}
# Use the privileged endpoint to remove application <AppIdentifier>
Invoke-Command -Session $Session -ScriptBlock {Remove-GraphApplication -ApplicationIdentifier "<AppIdentifier>"}
Não haverá saída retornada da chamada do cmdlet Remove-GraphApplication no ponto de extremidade privilegiado, mas você verá a saída de confirmação literal para o console durante a execução do cmdlet:
VERBOSE: Deleting graph application with identifier S-1-5-21-1634563105-1224503876-2692824315-2623.
VERBOSE: Remove-GraphApplication : BEGIN on AZS-ADFS01 on ADFSGraphEndpoint
VERBOSE: Application with identifier S-1-5-21-1634563105-1224503876-2692824315-2623 was deleted.
VERBOSE: Remove-GraphApplication : END on AZS-ADFS01 under ADFSGraphEndpoint configuration
Atribuir uma função
O acesso aos recursos do Azure por usuários e aplicativos é autorizado por meio do RBAC (Controle de Acesso Baseado em Função). Para permitir que um aplicativo acesse recursos em sua assinatura, você deve atribuir sua entidade de serviço a uma função para um recurso específico. Primeiro, decida qual função representa as permissões corretas para o aplicativo. Para saber mais sobre as funções disponíveis, consulte Funções internas para recursos do Azure.
O tipo de recurso escolhido também estabelece o escopo de acesso para o aplicativo. Você pode definir o escopo de acesso no nível da assinatura, do grupo de recursos ou do recurso. As permissão são herdadas para níveis inferiores do escopo. Por exemplo, adicionar um aplicativo à função "Leitor" de um grupo de recursos significa que ele pode ler o grupo de recursos e todos os recursos que ele contém.
Entre no portal apropriado, com base no diretório especificado durante a instalação do Azure Stack Hub (o portal do Azure para a ID do Microsoft Entra ou o portal do usuário do Azure Stack Hub para AD FS, por exemplo). Neste exemplo, mostramos um usuário conectado ao portal do usuário do Azure Stack Hub.
Observação
Para adicionar atribuições de função para um determinado recurso, sua conta de usuário deve pertencer a uma função que declare a
Microsoft.Authorization/roleAssignments/write
permissão. Por exemplo, as funções internas Proprietário ou Administrador de Acesso do Usuário .Navegue até o recurso que você deseja permitir que o aplicativo acesse. Neste exemplo, atribua o aplicativo a uma função no escopo da assinatura, selecionando Assinaturas e, em seguida, uma assinatura específica. Em vez disso, você pode selecionar um grupo de recursos ou um recurso específico, como uma máquina virtual.
Selecione a página Controle de acesso (IAM), que é universal em todos os recursos que oferecem suporte ao RBAC.
Selecione + Adicionar
Em Função, escolha a função que deseja atribuir ao aplicativo.
Em Selecionar, pesquise seu aplicativo usando um Nome do Aplicativo completo ou parcial. Durante o registro, o Nome do Aplicativo é gerado como Azurestack-YourAppName-GUID><<>. Por exemplo, se você usou um nome de aplicativo de App2 e o GUID 2bbe67d8-3fdb-4b62-87cf-cc41dd4344ff foi atribuído durante a criação, o nome completo seria Azurestack-App2-2bbe67d8-3fdb-4b62-87cf-cc41dd4344ff. Você pode pesquisar a cadeia de caracteres exata ou uma parte, como Azurestack ou Azurestack-App2.
Depois de encontrar o aplicativo, selecione-o e ele aparecerá em Membros selecionados.
Selecione Salvar para finalizar a atribuição da função.
Quando terminar, o aplicativo será exibido na lista de entidades atribuídas para o escopo atual, para a função especificada.
Agora que você deu uma identidade ao seu aplicativo e o autorizou para acesso a recursos, você pode habilitar seu script ou código para entrar e acessar com segurança os recursos do Azure Stack Hub.
Próximas etapas
Gerenciar permissões de usuário
Documentação do Microsoft Entra
Serviços de Federação do Active Directory (AD FS)