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.
Descrição geral
Como um usuário, um aplicativo deve apresentar credenciais durante a autenticação, o que requer dois elementos:
- Uma ID de Aplicativo, às vezes chamada de ID de Cliente. Um GUID que identifica exclusivamente o registro do aplicativo em seu locatário do Ative Directory.
- Um segredo. Você pode gerar uma cadeia de caracteres secreta do cliente (semelhante a uma senha) ou especificar uma impressão digital de certificado X509 (que usa sua chave pública).
Executar um aplicativo sob 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/senha textual compartilhado.
- 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 do menor privilégio.
- As credenciais e permissões não são alteradas com tanta frequência para um aplicativo quanto as credenciais do usuário. Por exemplo, quando as responsabilidades do usuário mudam, os requisitos de senha ditam 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:
- Microsoft Entra ID: O Microsoft Entra ID é um serviço de gerenciamento de diretórios e identidades 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 o registro do aplicativo Microsoft Entra.
- Serviços de Federação do Ative Directory (AD FS): O AD FS fornece recursos simplificados e seguros de federação de identidades e logon único (SSO) 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 Hub de Pilha do Azure para registro de aplicativo do AD FS.
Depois de registrar o aplicativo, você aprende a atribuí-lo a uma função, limitando seu acesso a recursos.
Gerenciar um aplicativo Microsoft Entra
Se você implantou o Azure Stack Hub com a ID do Microsoft Entra como seu serviço de gerenciamento de identidades, você cria e gerencia identidades para aplicativos da mesma forma que faz para o Azure. Esta seção mostra como executar as etapas usando o portal do Azure. Reveja as Permissões necessárias para registar uma aplicação antes de começar, para se certificar de que tem permissões suficientes para registar uma aplicação.
Criar um registro de aplicativo que usa uma credencial de segredo 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 de segredo do cliente, mas o portal também oferece suporte a credenciais baseadas em certificado X509.
Inicie sessão no portal do Azure com a sua conta do Azure.
Selecione Registos da>aplicação Microsoft Entra ID>Novo registo.
Forneça um nome para o aplicativo.
Selecione os tipos de conta suportados apropriados.
Em URI de redirecionamento, selecione Web como o tipo de aplicativo e (opcionalmente) especifique um URI de redirecionamento se seu 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 & segredos . Selecione Novo segredo do cliente.
Forneça uma descrição para o segredo e uma duração expira .
Quando terminar, selecione Adicionar.
O valor do segredo é exibido. Copie e salve esse valor em outro local, porque não é possível recuperá-lo mais tarde. Você fornece o segredo com a ID do aplicativo em seu aplicativo cliente para entrar.
Prossiga para Atribuir uma função para saber como estabelecer um controle de acesso baseado em função para a identidade do aplicativo.
Artigos adicionais de 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.
Gerir uma aplicação AD FS
Se você implantou o Azure Stack Hub com AD FS como seu serviço de gerenciamento de identidade, deverá usar o PowerShell para gerenciar a identidade do seu aplicativo. Os exemplos a seguir demonstram um certificado X509 e uma credencial de segredo do cliente.
Os scripts devem ser executados em um console do PowerShell elevado ("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 privilegiada 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 por 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 Microsoft Trusted Root Authority Program. Para obter a lista completa, consulte Lista de participantes - Microsoft Trusted Root Program. Um exemplo de criação de um certificado de teste "autoassinado" também será mostrado posteriormente durante a atualização de uma credencial de certificado.
- O provedor de criptografia deve ser especificado como um provedor de chave CSP (Provedor de Serviços de Criptografia) herdado da Microsoft.
- O formato do certificado deve estar no arquivo PFX, pois as chaves pública e privada são necessárias. 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 Hub de Pilha do Azure deve ter acesso à rede para o local da Lista de Revogação de Certificados (CRL) 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:
Marcador de Posição | Descrição | Exemplo |
---|---|---|
<PepVM> | O nome da VM de ponto de extremidade privilegiada em sua instância do Azure Stack Hub. | "AzS-ERCS01" |
<SeuCertificadoLocalização> | O local do seu certificado X509 no armazenamento de certificados local. | "Cert:\CurrentUser\My\AB5A8A3533CC7AA2025BF05120117E06DE407B34" |
<YourAppName> | Um nome descritivo para o novo registro do aplicativo. | "A minha ferramenta de gestão" |
Abra uma sessão elevada do Windows PowerShell 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
Depois que o script for concluído, ele exibirá as informações de registro do aplicativo. Os
ClientID
eThumbprint
são autenticados e, posteriormente, autorizados para acesso a recursos gerenciados pelo Gerenciador de Recursos do Azure.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, à medida que você a usa com o ApplicationIdentifier
valor na próxima seção.
Atualizar uma credencial de certificado
Agora que registou a candidatura, esta secção irá mostrar-lhe 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 de certificado usando o PowerShell, substituindo seus próprios valores pelos seguintes espaços reservados:
Marcador de Posição | Descrição | Exemplo |
---|---|---|
<PepVM> | O nome da VM de ponto de extremidade privilegiada em sua instância do Azure Stack Hub. | "AzS-ERCS01" |
<YourAppName> | Um nome descritivo para o novo registro do aplicativo. | "A minha ferramenta de gestão" |
<SeuCertificadoLocalização> | O local do seu certificado X509 no armazenamento de certificados local. | "Cert:\CurrentUser\My\AB5A8A3533CC7AA2025BF05120117E06DE407B34" |
<AppIdentifier> | O identificador atribuído ao registo da aplicação. | "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
Depois que o script for concluído, ele exibirá as informações de registro do aplicativo atualizadas, incluindo o valor de 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 de segredo do cliente
Aviso
Usar um segredo de cliente é menos seguro do que usar uma credencial de certificado X509. Não só o mecanismo de autenticação é menos seguro, mas também normalmente requer a incorporação do segredo no código-fonte do aplicativo cliente. Como tal, 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 de segredo do cliente. Ao contrário de uma credencial de certificado, o diretório tem a capacidade de gerar uma credencial secreta do cliente. Em vez de especificar o segredo do cliente, use o -GenerateClientSecret
switch para solicitar que ele seja gerado. Substitua seus próprios valores pelos seguintes espaços reservados:
Marcador de Posição | Descrição | Exemplo |
---|---|---|
<PepVM> | O nome da VM de ponto de extremidade privilegiada em sua instância do Azure Stack Hub. | "AzS-ERCS01" |
<YourAppName> | Um nome descritivo para o novo registro do aplicativo. | "A minha ferramenta de gestão" |
Abra uma sessão elevada do Windows PowerShell 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
Depois que o script for concluído, ele exibirá as informações de registro do aplicativo. Os
ClientID
eClientSecret
são autenticados e, posteriormente, autorizados para acesso a recursos gerenciados pelo Gerenciador de Recursos do Azure.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, à medida que você a usa com o ApplicationIdentifier
valor na próxima seção.
Atualizar uma credencial de segredo do cliente
Atualize a credencial de 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:
Marcador de Posição | Descrição | Exemplo |
---|---|---|
<PepVM> | O nome da VM de ponto de extremidade privilegiada em sua instância do Azure Stack Hub. | "AzS-ERCS01" |
<AppIdentifier> | O identificador atribuído ao registo da aplicação. | "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 o registo de uma aplicação
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:
Marcador de Posição | Descrição | Exemplo |
---|---|---|
<PepVM> | O nome da VM de ponto de extremidade privilegiada em sua instância do Azure Stack Hub. | "AzS-ERCS01" |
<AppIdentifier> | O identificador atribuído ao registo da aplicação. | "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 ao chamar o 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 certas 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 de assinatura, grupo de recursos ou recurso. As permissões são herdadas para níveis mais baixos de escopo. Por exemplo, adicionar um aplicativo à função "Leitor" para um grupo de recursos significa que ele pode ler o grupo de recursos e quaisquer recursos que ele contenha.
Entre no portal apropriado, com base no diretório especificado durante a instalação do Azure Stack Hub (o portal do Azure para Microsoft Entra ID 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.
Nota
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 de Proprietário ou Administrador de Acesso de 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 compatíveis com RBAC.
Selecione +Adicionar
Em Função, escolha a função que deseja atribuir ao aplicativo.
Em Selecionar, pesquise seu aplicativo usando um Nome de 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 será exibido em Membros selecionados.
Selecione Salvar para concluir 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 determinada.
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óximos passos
Gerir permissões de utilizador
Documentação do Microsoft Entra
Serviços de Federação do Active Directory (AD FS)