Dar a uma app acesso aos recursos do Azure Stack Hub

Uma aplicação que implemente ou configura recursos através do Azure Resource Manager deve ser representada pela sua própria identidade, conhecida como principal de segurança. Assim como um utilizador é representado por um utilizadores principal, uma aplicação é representada por um diretor de serviço.

A identidade também pode ser usada para delegar apenas as permissões necessárias ao utilizador ou app. Por exemplo, uma aplicação de gestão de configuração pode usar o Azure Resource Manager para inventariar recursos Azure. A aplicação seria registada no diretório, depois adicionada à função de "leitor" no âmbito apropriado, limitando a aplicação a acesso apenas de leitura.

Descrição Geral

Tal como um utilizador, uma aplicação deve apresentar credenciais durante a autenticação, que requer dois elementos:

  • Um ID de aplicação,por vezes referido como ID do Cliente. Um GUID que identifica exclusivamente o registo da app no seu inquilino Ative Directory.
  • Um segredo. Pode gerar uma cadeia secreta do cliente (semelhante a uma palavra-passe) ou especificar uma impressão digital de certificado X509 (que utiliza a sua chave pública).

Executar uma aplicação com a sua própria identidade é preferível executá-la sob a identidade do utilizador pelas seguintes razões:

  • Credenciais mais fortes - uma aplicação pode iniciar sação usando um certificado X509, em vez de um segredo/senha partilhado texual.
  • Permissões mais restritivas podem ser atribuídas a uma aplicação. Normalmente, estas permissões limitam-se apenas ao que a app precisa de fazer, conhecida como o princípio do menor privilégio.
  • Credenciais e permissões não mudam tão frequentemente para uma aplicação como credenciais de utilizador. Por exemplo, quando as responsabilidades do utilizador mudam, os requisitos de senha ditam uma alteração, ou quando um utilizador sai da empresa.

Começa por criar um novo registo de aplicações no seu diretório, que cria um objeto principal de serviço associado para representar a identidade da aplicação dentro do diretório. O processo de registo varia consoante o diretório que escolheu para o seu exemplo Azure Stack Hub:

  • Azure Ative Directory (Azure AD): Azure AD é um serviço multi-inquilino, baseado na nuvem, diretório e gestão de identidade. Você pode usar Azure AD com uma instância Azure Stack Hub conectada. Os exemplos apresentados mais tarde utilizarão o portal Azure para o registo de aplicações AZure AD.
  • Serviços da Federação de Diretório Ativo (AD FS): AD FS fornece capacidades simplificadas e seguras de federação de identidade e web single sign-on (SSO). Pode utilizar O FS AD com instâncias do Azure Stack Hub ligadas e desligadas. Os exemplos apresentados mais tarde usarão O Azure Stack Hub PowerShell para o registo de aplicações AD FS.

Depois de registar a app, aprende-se a atribuí-la a uma função, limitando o seu acesso a recursos.

Gerir uma aplicação AD AZure

Se implementou o Azure Stack Hub com a Azure AD como o seu serviço de gestão de identidade, cria e gere identidades para apps como faz para o Azure. Esta secção mostra-lhe como executar os passos utilizando o portal Azure. Rever 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.

Crie um registo de aplicativos que utilize uma credencial secreta do cliente

Nesta secção, registe a sua aplicação no seu inquilino Azure AD utilizando o portal Azure. Seguindo o exemplo, especifica uma credencial secreta do cliente, mas o portal também suporta credenciais baseadas em certificados X509.

  1. Inscreva-se no portal Azure utilizando a sua conta Azure.

  2. Selecione Azure Ative DirectoryRegistos da AppNovo registo.

  3. Forneça um nome para a aplicação.

  4. Selecione os tipos de conta suportados adequados.

  5. Em Redirect URI, selecione Web como o tipo de aplicação e (opcionalmente) especifique um URI de redirecionamento se a sua aplicação o exigir.

  6. Depois de definir os valores, selecione Registar-se. O registo da aplicação é criado e a página de visão geral é exibida.

  7. Copie o ID da aplicação para utilização no seu código de aplicação. Este valor também é referido como o ID do Cliente.

  8. Para gerar um segredo de cliente, selecione a página de segredos de Certificados. Selecione novo segredo de cliente.

  9. Forneça uma descrição do segredo, e uma duração expira.

  10. Quando terminar, selecione Adicionar.

  11. O valor das exibições secretas. Copie e guarde este valor em outro local, porque não pode recuperá-lo mais tarde. Fornece o segredo com o ID da aplicação da aplicação do seu cliente para iniciar sôm.

    Saved key in client secrets

Agora, proceda a atribuir uma função para aprender a estabelecer um controlo de acesso baseado em funções para a identidade da aplicação.

Gerir uma aplicação AD FS

Se implementou o Azure Stack Hub com O FS AD como o seu serviço de gestão de identidade, tem de usar o PowerShell para gerir a identidade da sua aplicação. Os exemplos a seguir demonstram tanto um certificado X509 como uma credencial secreta do cliente.

Os scripts devem ser executados numa consola PowerShell elevada ("Run as administrator"), que abre outra sessão a um VM que acolhe um ponto final privilegiado para a sua instância Azure Stack Hub. Uma vez estabelecida a sessão de ponto final privilegiada, são utilizados cmdlets adicionais para criar e gerir o registo da aplicação. Para obter mais informações sobre o ponto final privilegiado, consulte utilizando o ponto final privilegiado no Azure Stack Hub.

Criar um registo de aplicativos que utilize uma credencial de certificado

Ao criar uma credencial de certificado, devem ser cumpridos os seguintes requisitos:

  • Para a produção, o certificado deve ser emitido a partir de uma Autoridade de Certificados Internos ou de uma Autoridade de Certificados Públicos. Ao utilizar uma autoridade pública, deve incluir a autoridade na imagem do sistema operativo base como parte do Programa Microsoft Trust Root Authority. Para obter a lista completa, consulte a Lista de Participantes - Microsoft Trusted Root Program. Um exemplo da criação de um certificado de teste "auto-assinado" também será mostrado mais tarde durante a Atualização de uma credencial de certificado.
  • O fornecedor criptográfico deve ser especificado como um fornecedor de serviços criptográficos (CSP) legado da Microsoft.
  • O formato do certificado deve estar no ficheiro PFX, uma vez que são necessárias as chaves públicas e privadas. Windows servidores 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 sua infraestrutura Azure Stack Hub deve ter acesso à rede à localização da Lista de Revogação de Certificados (CRL) da autoridade de certificados publicada no certificado. Este CRL deve ser um ponto final HTTP.

Assim que tiver um certificado, utilize o script PowerShell abaixo para registar a sua aplicação e iniciar sação utilizando a identidade da aplicação. Substitua os seus próprios valores pelos seguintes espaços reservados:

Marcador de posição Descrição Exemplo
<PepVM> O nome do VM de ponta privilegiado na sua instância Azure Stack Hub. "Azs-ERCS01"
<SuaLocação Certificada> A localização do seu certificado X509 na loja de certificados local. "Cert:\CurrentUser\My\AB5A8A3533CC7A2025BF05120117E06DE407B34"
<O Seu Nome DeApp> Um nome descritivo para o novo registo de aplicações. "A minha ferramenta de gestão"
  1. 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://docs.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
    
    
  2. Após o final do script, exibe a informação de registo da aplicação. Os ClientID e Thumbprint são autenticados, e posteriormente autorizados para acesso a recursos geridos pela Azure Resource Manager.

    ApplicationIdentifier : S-1-5-21-1512385356-3796245103-1243299919-1356
    ClientId              : 3c87e710-9f91-420b-b009-31fa9e430145
    Thumbprint            : 30202C11BE6864437B64CE36C8D988442082A0F1
    ApplicationName       : Azurestack-MyApp-c30febe7-1311-4fd8-9077-3d869db28342
    ClientSecret          :
    PSComputerName        : azs-ercs01
    RunspaceId            : a78c76bb-8cae-4db4-a45a-c1420613e01b
    

Mantenha a sessão de consola PowerShell aberta, uma vez que a utiliza com o ApplicationIdentifier valor na secção seguinte.

Atualizar uma credencial de certificado

Agora que registou o pedido, esta secção irá mostrar-lhe como:

  1. Crie um novo certificado X509 auto-assinado para testes.
  2. Atualize as credenciais da aplicação, atualizando a sua propriedade Thumbprint para corresponder ao novo certificado.

Atualize a credencial de certificado utilizando a PowerShell, substituindo os seus próprios valores pelos seguintes espaços reservados:

Marcador de posição Descrição Exemplo
<PepVM> O nome do VM de ponta privilegiado na sua instância Azure Stack Hub. "Azs-ERCS01"
<O Seu Nome DeApp> Um nome descritivo para o novo registo de aplicações. "A minha ferramenta de gestão"
<SuaLocação Certificada> A localização do seu certificado X509 na loja de certificados local. "Cert:\CurrentUser\My\AB5A8A3533CC7A2025BF05120117E06DE407B34"
<Avaliador> O identificador atribuído ao registo de pedidos. "S-1-5-21-1512385356-3796245103-1243299919-1356"
  1. Utilizando a sua sessão de Windows PowerShell elevada, executar 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://docs.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
    
  2. Após o final do script, exibe a informação atualizada do registo da aplicação, incluindo o valor de impressão digital para o novo certificado auto-assinado.

    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
    

Crie um registo de aplicativos que utilize uma credencial secreta 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, como também requer a incorporação do segredo no código fonte da aplicação do cliente. Como tal, para aplicações de produção, você é fortemente encorajado a usar uma credencial de certificado.

Agora cria outro registo de aplicações, mas desta vez especifica uma credencial secreta do cliente. Ao contrário de uma credencial de certificado, o diretório tem a capacidade de gerar uma credencial secreta de cliente. Em vez de especificar o segredo do cliente, use o -GenerateClientSecret interruptor para solicitar que seja gerado. Substitua os seus próprios valores pelos seguintes espaços reservados:

Marcador de posição Descrição Exemplo
<PepVM> O nome do VM de ponta privilegiado na sua instância Azure Stack Hub. "Azs-ERCS01"
<O Seu Nome DeApp> Um nome descritivo para o novo registo de aplicações. "A minha ferramenta de gestão"
  1. 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
    
  2. Após o final do script, exibe a informação de registo da aplicação. Os ClientID e ClientSecret são autenticados, e posteriormente autorizados para acesso a recursos geridos pela Azure Resource Manager.

    ApplicationIdentifier : S-1-5-21-1634563105-1224503876-2692824315-2623
    ClientId              : 8e0ffd12-26c8-4178-a74b-f26bd28db601
    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 de consola PowerShell aberta, uma vez que a utiliza com o ApplicationIdentifier valor na secção seguinte.

Atualizar uma credencial secreta do cliente

Atualize a credencial secreta do cliente usando o PowerShell, utilizando o parâmetro ResetClientSecret, que altera imediatamente o segredo do cliente. Substitua os seus próprios valores pelos seguintes espaços reservados:

Marcador de posição Descrição Exemplo
<PepVM> O nome do VM de ponta privilegiado na sua instância Azure Stack Hub. "Azs-ERCS01"
<Avaliador> O identificador atribuído ao registo de pedidos. "S-1-5-21-1634563105-1224503876-2692824315-2623"
  1. Utilizando a sua sessão de Windows PowerShell elevada, executar 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
    
  2. Após o final do script, exibe a informação atualizada do registo de aplicações, incluindo o segredo do cliente recentemente gerado.

    ApplicationIdentifier : S-1-5-21-1634563105-1224503876-2692824315-2623
    ClientId              : 8e0ffd12-26c8-4178-a74b-f26bd28db601
    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ê vai ver como remover um registo de aplicações do seu diretório usando PowerShell.

Substitua os seus próprios valores pelos seguintes espaços reservados:

Marcador de posição Descrição Exemplo
<PepVM> O nome do VM de ponta privilegiado na sua instância Azure Stack Hub. "Azs-ERCS01"
<Avaliador> O identificador atribuído ao registo de pedidos. "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 devolvida de chamar o Remove-GraphApplication cmdlet no ponto final privilegiado, mas verá a saída de confirmação verbatim 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 um papel

O acesso aos recursos do Azure por utilizadores e aplicações é autorizado através do Role-Based Access Control (RBAC). Para permitir que uma aplicação aceda a recursos na sua subscrição, tem de atribuir o seu principal de serviço a uma função para um recursoespecífico. Primeiro, decida qual o papel que representa as permissões certas para a app. Para conhecer os papéis disponíveis, consulte as funções incorporadas para os recursos da Azure.

O tipo de recurso que escolhe também estabelece o âmbito de acesso à aplicação. Pode definir o âmbito de acesso ao nível de subscrição, grupo de recursos ou recursos. As permissões são herdadas para níveis mais baixos de âmbito. Por exemplo, adicionar uma aplicação ao papel "Reader" para um grupo de recursos, significa que pode ler o grupo de recursos e quaisquer recursos que contenha.

  1. Inscreva-se no portal apropriado, com base no diretório especificado durante a instalação do Azure Stack Hub (o portal Azure para Azure AD ou o portal de utilizadores Azure Stack Hub para AD FS, por exemplo). Neste exemplo, mostramos um utilizador que se inscreveu no portal de utilizadores do Azure Stack Hub.

    Nota

    Para adicionar atribuições de funções para um determinado recurso, a sua conta de utilizador deve pertencer a uma função que declare a Microsoft.Authorization/roleAssignments/write permissão. Por exemplo, as funções incorporadas do Proprietário ou do Administrador de Acesso ao Utilizador.

  2. Navegue para o recurso que deseja permitir o acesso da app. Neste exemplo, atribua a app a uma função no âmbito de subscrição, selecionando Subscrições,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.

    Select subscription for assignment

  3. Selecione a página Access Control (IAM), que é universal em todos os recursos que suportam o RBAC.

  4. Selecione +Adicionar

  5. Under Role, escolha o papel que pretende atribuir à app.

  6. Em Select, procure a sua aplicação utilizando um Nome de Aplicação completo ou parcial. Durante o registo, o Nome da Aplicação é gerado como Azurestack- YourAppName > - < ClientId >. Por exemplo, se usou um nome de aplicação de App2, e ClientId 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 corda exata, ou uma parte, como Azurestack ou Azurestack-App2.

  7. Assim que encontrar a aplicação, selecione-a e ela aparecerá em membros Selecionados.

  8. Selecione Guardar para terminar a atribuição do papel.

    Assign role

  9. Quando terminada, a aplicação apresentará na lista de principais atribuídos para o âmbito atual, para o papel dado.

    Assigned role

Agora que deu à sua aplicação uma identidade e a autorizou para acesso a recursos, pode ativar o seu script ou código para iniciar e aceder de forma segura aos recursos do Azure Stack Hub.

Passos seguintes

Gerir permissões de utilizador
Documentação Azure Ative Directory
Active Directory Federation Services