Conceder acesso a uma aplicação aos recursos do Azure Stack Hub
Uma aplicação que implemente ou configure recursos através do Azure Resource Manager tem de ser representada pela sua própria identidade, conhecida como principal de segurança. Tal como um utilizador é representado por um principal de utilizador, uma aplicação é representada por um principal de serviço.
A identidade também pode ser utilizada para delegar apenas as permissões necessárias para o utilizador ou aplicação. Por exemplo, uma aplicação de gestão de configuração pode utilizar o Azure Resource Manager para inventariar recursos do Azure. A aplicação seria registada no diretório e, em seguida, adicionada à função "leitor" no âmbito adequado, limitando a aplicação ao acesso só de leitura.
Descrição Geral
Tal como um utilizador, uma aplicação tem de apresentar credenciais durante a autenticação, o que requer dois elementos:
- Um ID da Aplicação, por vezes referido como ID de Cliente. Um GUID que identifica exclusivamente o registo da aplicação no seu inquilino do Active Directory.
- Um segredo. Pode gerar uma cadeia de segredo do cliente (semelhante a uma palavra-passe) ou especificar um thumbprint de certificado X509 (que utiliza a respetiva chave pública).
A execução de uma aplicação com a sua própria identidade é preferível a executá-la na identidade do utilizador pelos seguintes motivos:
- Credenciais mais fortes – uma aplicação pode iniciar sessão com um certificado X509, em vez de um segredo/palavra-passe partilhado textual.
- Podem ser atribuídas permissões mais restritivas a uma aplicação. Normalmente, estas permissões são restritas apenas ao que a aplicação precisa de fazer, conhecido como o princípio do menor privilégio.
- As credenciais e as permissões não são alteradas com tanta frequência para uma aplicação como credenciais de utilizador. Por exemplo, quando as responsabilidades do utilizador mudam, os requisitos de palavra-passe ditam uma alteração ou quando um utilizador sai da empresa.
Começa por criar um novo registo de aplicação no diretório, que cria um objeto de principal de serviço associado para representar a identidade da aplicação no diretório. O processo de registo varia consoante o diretório que escolheu para a instância do Azure Stack Hub:
- Microsoft Entra ID: Microsoft Entra ID é um serviço de gestão de identidades, diretórios e diretórios multi-inquilino. Pode utilizar Microsoft Entra ID com uma instância do Azure Stack Hub ligada. Os exemplos apresentados posteriormente utilizarão o portal do Azure para Microsoft Entra registo de aplicações.
- Serviços de Federação do Active Directory (AD FS) (AD FS): o AD FS fornece capacidades de federação de identidade simplificada, protegida e início de sessão único (SSO) na Web. Pode utilizar o AD FS com instâncias do Azure Stack Hub ligadas e desligadas. Os exemplos apresentados posteriormente irão utilizar o PowerShell do Azure Stack Hub para o registo de aplicações do AD FS.
Depois de registar a aplicação, irá aprender a atribuí-la a uma função, limitando o respetivo acesso a recursos.
Gerir uma aplicação Microsoft Entra
Se implementou o Azure Stack Hub com Microsoft Entra ID como o seu serviço de gestão de identidades, crie e faça a gestão de identidades para aplicações tal como faz para o Azure. Esta secção mostra-lhe como executar os passos com 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 registo de aplicação que utiliza uma credencial de segredo do cliente
Nesta secção, vai registar a aplicação no inquilino do Microsoft Entra com o portal do Azure. No exemplo seguinte, especifique uma credencial de segredo do cliente, mas o portal também suporta credenciais baseadas em certificado X509.
Inicie sessão no portal do Azure com a sua conta do Azure.
Selecione Microsoft Entra ID>Registos de aplicações>Novo registo.
Indique um nome para a aplicação.
Selecione os tipos de conta Suportados adequados.
Em URI de Redirecionamento, selecione Web como o tipo de aplicação e (opcionalmente) especifique um URI de redirecionamento se a aplicação o exigir.
Depois de definir os valores, selecione Registar. O registo da aplicação é criado e a página Descrição geral é apresentada.
Copie o ID da Aplicação para utilização no código da aplicação. Este valor também é denominado ID de 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.
É apresentado o valor do segredo. Copie e guarde este valor noutra localização, uma vez que não poderá recuperá-lo mais tarde. Forneça o segredo com o ID da Aplicação na sua aplicação cliente para iniciar sessão.
Avance para Atribuir uma função para saber como estabelecer o controlo de acesso baseado em funções para a identidade da aplicação.
Artigos adicionais de gestão de aplicações Microsoft Entra
Veja os seguintes artigos do Azure para obter mais detalhes sobre como gerir aplicações Microsoft Entra:
- Mais detalhes sobre como registar uma aplicação Microsoft Entra, incluindo como criar um registo de aplicação que utiliza uma credencial de certificado.
- Como Remover um registo de aplicação.
- Como Restaurar ou remover um registo de aplicação recentemente eliminado.
Gerir uma aplicação do AD FS
Se implementou o Azure Stack Hub com o AD FS como o seu serviço de gestão de identidades, tem de utilizar o PowerShell para gerir a identidade da sua aplicação. Os exemplos seguintes demonstram um certificado X509 e uma credencial de segredo do cliente.
Os scripts têm de ser executados numa consola elevada ("Executar como administrador") do PowerShell, que abre outra sessão numa VM que aloja um ponto final privilegiado para a instância do Azure Stack Hub. Assim que a sessão de ponto final privilegiado tiver sido estabelecida, são utilizados cmdlets adicionais para criar e gerir o registo de aplicações. Para obter mais informações sobre o ponto final privilegiado, veja Utilizar o ponto final privilegiado no Azure Stack Hub.
Criar um registo de aplicação que utiliza uma credencial de certificado
Ao criar uma credencial de certificado, têm de ser cumpridos os seguintes requisitos:
- Para produção, o certificado tem de ser emitido a partir de uma Autoridade de Certificação interna ou de uma Autoridade de Certificação Pública. Ao utilizar uma autoridade pública, tem de incluir a autoridade na imagem do sistema operativo base como parte do Programa de Autoridade de Raiz Fidedigna da Microsoft. Para obter a lista completa, consulte Lista de Participantes – Programa de Raiz Fidedigna da Microsoft. Um exemplo de criação de um certificado de teste "autoassinado" também será apresentado mais tarde durante a atualização de uma credencial de certificado.
- O fornecedor criptográfico tem de ser especificado como um fornecedor de chaves do Fornecedor de Serviços Criptográficos (CSP) legado da Microsoft.
- O formato do certificado tem de estar no ficheiro PFX, uma vez que as chaves públicas e privadas são necessárias. Os servidores Windows utilizam ficheiros .pfx que contêm o ficheiro de chave pública (ficheiro de certificado TLS/SSL) e o ficheiro de chave privada associado.
- A infraestrutura do Azure Stack Hub tem de ter acesso de rede à localização da Lista de Revogação de Certificados (CRL) da autoridade de certificação publicada no certificado. Este CRL tem de ser um ponto final HTTP.
Assim que tiver um certificado, utilize o script do PowerShell abaixo para registar a sua aplicação e iniciar sessão com a identidade da aplicação. Substitua os seus próprios valores pelos seguintes marcadores de posição:
Marcador de posição | Descrição | Exemplo |
---|---|---|
<PepVM> | O nome da VM de ponto final privilegiado na instância do Azure Stack Hub. | "AzS-ERCS01" |
<YourCertificateLocation> | A localização do certificado X509 no arquivo de certificados local. | "Cert:\CurrentUser\My\AB5A8A3533CC7AA2025BF05120117E06DE407B34" |
<YourAppName> | Um nome descritivo para o novo registo de aplicações. | "A minha ferramenta de gestão" |
Abra uma sessão de Windows PowerShell elevada e execute o seguinte script.
# 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, apresenta as informações de registo da aplicação. Os
ClientID
eThumbprint
são autenticados e, posteriormente, autorizados para acesso a recursos geridos 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 a sessão da consola do PowerShell aberta, à medida que a utiliza com o ApplicationIdentifier
valor na secção seguinte.
Atualizar uma credencial de certificado
Agora que registou a aplicação, esta secção irá mostrar-lhe como:
- Crie um novo certificado X509 autoassinado para testes.
- Atualize as credenciais da aplicação ao atualizar a respetiva propriedade Thumbprint para corresponder ao novo certificado.
Atualize a credencial do certificado com o PowerShell, substituindo os seus próprios valores pelos seguintes marcadores de posição:
Marcador de posição | Descrição | Exemplo |
---|---|---|
<PepVM> | O nome da VM de ponto final privilegiado na instância do Azure Stack Hub. | "AzS-ERCS01" |
<YourAppName> | Um nome descritivo para o novo registo de aplicações. | "A minha ferramenta de gestão" |
<YourCertificateLocation> | A localização do certificado X509 no arquivo 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" |
Com a sua sessão de Windows PowerShell elevada, 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, apresenta as informações de registo da aplicação atualizadas, incluindo o valor thumbprint 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 registo de aplicação que utiliza uma credencial de segredo do cliente
Aviso
Utilizar um segredo de cliente é menos seguro do que utilizar uma credencial de certificado X509. Não só o mecanismo de autenticação é menos seguro, como também normalmente requer a incorporação do segredo no código fonte da aplicação cliente. Como tal, para aplicações de produção, é fortemente encorajado a utilizar uma credencial de certificado.
Agora, vai criar outro registo de aplicação, mas desta vez especifique uma credencial de segredo do cliente. Ao contrário de uma 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, utilize o -GenerateClientSecret
comutador para pedir que seja gerado. Substitua os seus próprios valores pelos seguintes marcadores de posição:
Marcador de posição | Descrição | Exemplo |
---|---|---|
<PepVM> | O nome da VM de ponto final privilegiado na instância do Azure Stack Hub. | "AzS-ERCS01" |
<YourAppName> | Um nome descritivo para o novo registo de aplicações. | "A minha ferramenta de gestão" |
Abra uma sessão de Windows PowerShell elevada 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, apresenta as informações de registo da aplicação. Os
ClientID
eClientSecret
são autenticados e, posteriormente, autorizados para acesso aos recursos geridos 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 a sessão da consola do PowerShell aberta, uma vez que a utiliza com o ApplicationIdentifier
valor na secção seguinte.
Atualizar uma credencial de segredo do cliente
Atualize a credencial do segredo do cliente com o PowerShell, utilizando o parâmetro ResetClientSecret , que altera imediatamente o segredo do cliente. Substitua os seus próprios valores pelos seguintes marcadores de posição:
Marcador de posição | Descrição | Exemplo |
---|---|---|
<PepVM> | O nome da VM de ponto final privilegiado na 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" |
Com a sua sessão de Windows PowerShell elevada, 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, apresenta as informações de registo de aplicações atualizadas, incluindo o segredo do cliente recentemente 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, verá como remover um registo de aplicação do seu diretório com o PowerShell.
Substitua os seus próprios valores pelos seguintes marcadores de posição:
Marcador de posição | Descrição | Exemplo |
---|---|---|
<PepVM> | O nome da VM de ponto final privilegiado na 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 será devolvido nenhum resultado ao chamar o cmdlet Remove-GraphApplication no ponto final privilegiado, mas verá a saída de confirmação literal para a consola 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 utilizadores e aplicações é autorizado através de Role-Based Controlo de Acesso (RBAC). Para permitir que uma aplicação aceda aos recursos na sua subscrição, tem de atribuir o respetivo principal de serviço a uma função para um recurso específico. Primeiro, decida qual é a função que representa as permissões certas para a aplicação. Para saber mais sobre as funções disponíveis, veja Funções incorporadas para recursos do Azure.
O tipo de recurso que escolher também estabelece o âmbito de acesso da aplicação. Pode definir o âmbito de acesso ao nível da subscrição, do grupo de recursos ou do recurso. As permissões são herdadas para níveis mais baixos de âmbito. Por exemplo, adicionar uma aplicação à função "Leitor" de um grupo de recursos significa que pode ler o grupo de recursos e quaisquer recursos que contenha.
Inicie sessão no portal adequado, com base no diretório que especificou durante a instalação do Azure Stack Hub (o portal do Azure para Microsoft Entra ID ou o portal de utilizadores do Azure Stack Hub para o AD FS, por exemplo). Neste exemplo, mostramos um utilizador com sessão iniciada no portal de utilizadores do Azure Stack Hub.
Nota
Para adicionar atribuições de funções a um determinado recurso, a sua conta de utilizador tem de pertencer a uma função que declare a
Microsoft.Authorization/roleAssignments/write
permissão. Por exemplo, as funções incorporadas proprietário ou Administrador de Acesso de Utilizador.Navegue para o recurso ao qual pretende permitir o acesso da aplicação. Neste exemplo, atribua a aplicação a uma função no âmbito da subscrição, selecionando Subscrições e, em seguida, uma subscrição específica. Em vez disso, pode selecionar um grupo de recursos ou um recurso específico, como uma máquina virtual.
Selecione a página Controlo de Acesso (IAM), que é universal em todos os recursos que suportam RBAC.
Selecione +Adicionar
Em Função, escolha a função que pretende atribuir à aplicação.
Em Selecionar, procure a sua aplicação com um Nome de Aplicação completo ou parcial. Durante o registo, o Nome da Aplicação é gerado como Azurestack-YourAppName-GUID<><>. Por exemplo, Se utilizou um nome de aplicação de App2 e GUID 2bbe67d8-3fdb-4b62-87cf-cc41dd4344ff foi atribuído durante a criação, o nome completo seria Azurestack-App2-2bbe67d8-3fdb-4b62-87cf-cc41dd4344ff. Pode procurar a cadeia exata ou uma parte, como Azurestack ou Azurestack-App2.
Assim que encontrar a aplicação, selecione-a e esta será apresentada em Membros selecionados.
Selecione Guardar para concluir a atribuição da função.
Quando terminar, a aplicação será apresentada na lista de principais atribuídos ao âmbito atual, para a função especificada.
Agora que deu uma identidade à sua aplicação e a autorizou para acesso a recursos, pode ativar o script ou código para iniciar sessão e aceder de forma segura aos recursos do Azure Stack Hub.
Passos seguintes
Gerir permissões de utilizador
Documentação do Microsoft Entra
Active Directory Federation Services