Ge en app åtkomst till Azure Stack Hub-resurser

Ett program som distribuerar eller konfigurerar resurser via Azure Resource Manager måste representeras av sin egen identitet, som kallas säkerhetsobjekt. Precis som en användare representeras av ett användarhuvudnamn representeras en app av tjänstens huvudnamn.

Identiteten kan också användas för att endast delegera nödvändiga behörigheter till användaren eller appen. En konfigurationshanteringsapp kan till exempel använda Azure Resource Manager för att inventera Azure-resurser. Appen registreras i katalogen och läggs sedan till i rollen "läsare" i lämpligt omfång, vilket begränsar appen till skrivskyddad åtkomst.

Översikt

Precis som en användare måste en app visa autentiseringsuppgifter under autentiseringen, vilket kräver två element:

  • Ett program-ID, som ibland kallas ett klient-ID. Ett GUID som unikt identifierar appens registrering i din Active Directory-klientorganisation.
  • En hemlighet. Du kan antingen generera en klienthemlighetssträng (liknar ett lösenord) eller ange ett tumavtryck för X509-certifikat (som använder dess offentliga nyckel).

Att köra en app under en egen identitet är att föredra framför att köra den under användarens identitet av följande skäl:

  • Starkare autentiseringsuppgifter – en app kan logga in med ett X509-certifikat i stället för en delad texthemlighet/lösenord.
  • Mer restriktiva behörigheter kan tilldelas till en app. Vanligtvis är dessa behörigheter begränsade till endast vad appen behöver göra, vilket kallas principen om lägsta behörighet.
  • Autentiseringsuppgifter och behörigheter ändras inte lika ofta för en app som användarautentiseringsuppgifter. När användarens ansvarsområden till exempel ändras avgör lösenordskraven en ändring eller när en användare lämnar företaget.

Du börjar med att skapa en ny appregistrering i katalogen, som skapar ett associerat objekt för tjänstens huvudnamn som representerar appens identitet i katalogen. Registreringsprocessen varierar beroende på vilken katalog du valde för din Azure Stack Hub-instans:

  • Microsoft Entra-ID: Microsoft Entra-ID är en tjänst för hantering av flera klientorganisationer, molnbaserade tjänster, kataloger och identitetshantering. Du kan använda Microsoft Entra-ID med en ansluten Azure Stack Hub-instans. Exemplen som presenteras senare använder Azure Portal för Microsoft Entra appregistrering.
  • Active Directory Federation Services (AD FS) (AD FS): AD FS tillhandahåller förenklade, säkra identitetsfederationer och funktioner för enkel inloggning (SSO). Du kan använda AD FS med både anslutna och frånkopplade Azure Stack Hub-instanser. Exemplen som presenteras senare använder Azure Stack Hub PowerShell för AD FS-appregistrering.

När du har registrerat appen får du lära dig hur du tilldelar den till en roll, vilket begränsar resursåtkomsten.

Hantera en Microsoft Entra app

Om du har distribuerat Azure Stack Hub med Microsoft Entra ID som identitetshanteringstjänst skapar och hanterar du identiteter för appar precis som du gör för Azure. Det här avsnittet visar hur du utför stegen med hjälp av Azure Portal. Granska Behörigheter som krävs för att registrera en app innan du börjar för att se till att du har tillräcklig behörighet för att registrera en app.

Skapa en appregistrering som använder en klienthemlig autentiseringsuppgift

I det här avsnittet registrerar du din app i din Microsoft Entra klientorganisation med hjälp av Azure Portal. I följande exempel anger du en klienthemlighetsautentiseringsuppgift, men portalen stöder även X509-certifikatbaserade autentiseringsuppgifter.

  1. Logga in på Azure Portal med ditt Azure-konto.

  2. Välj Microsoft Entra ID>Appregistreringar>Ny registrering.

  3. Ange ett namn för appen.

  4. Välj lämpliga kontotyper som stöds.

  5. Under Omdirigerings-URI väljer du Webb som apptyp och (valfritt) anger en omdirigerings-URI om din app kräver det.

  6. När du har angett värdena väljer du Registrera. Appregistreringen skapas och sidan Översikt visas.

  7. Kopiera program-ID:t för användning i din appkod. Det här värdet kallas även klient-ID.

  8. Om du vill generera en klienthemlighet väljer du sidan Certifikat & hemligheter . Välj Ny klienthemlighet.

  9. Ange en beskrivning av hemligheten och en varaktighet som upphör att gälla .

  10. När du är klar väljer du Lägg till.

  11. Värdet för hemligheten visas. Kopiera och spara det här värdet på en annan plats eftersom du inte kan hämta det senare. Du anger hemligheten med program-ID:t i klientappen för inloggning.

    Sparad nyckel i klienthemligheter

Fortsätt till Tilldela en roll för att lära dig hur du upprättar rollbaserad åtkomstkontroll för appens identitet.

Ytterligare Microsoft Entra apphanteringsartiklar

Mer information om hur du hanterar Microsoft Entra appar finns i följande Azure-artiklar:

Hantera en AD FS-app

Om du har distribuerat Azure Stack Hub med AD FS som identitetshanteringstjänst måste du använda PowerShell för att hantera appens identitet. I följande exempel visas både ett X509-certifikat och en klienthemlig autentiseringsuppgift.

Skripten måste köras i en upphöjd ("Kör som administratör") PowerShell-konsol, som öppnar en annan session till en virtuell dator som är värd för en privilegierad slutpunkt för din Azure Stack Hub-instans. När den privilegierade slutpunktssessionen har upprättats används ytterligare cmdletar för att skapa och hantera appregistreringen. Mer information om den privilegierade slutpunkten finns i Använda den privilegierade slutpunkten i Azure Stack Hub.

Skapa en appregistrering som använder en certifikatautentiseringsuppgift

När du skapar en certifikatautentiseringsuppgift måste följande krav uppfyllas:

  • För produktion måste certifikatet utfärdas från antingen en intern certifikatutfärdare eller en offentlig certifikatutfärdare. När du använder en offentlig myndighet måste du inkludera utfärdaren i den grundläggande operativsystemavbildningen som en del av Microsoft Trusted Root Authority Program. Den fullständiga listan finns i Lista över deltagare – Microsoft Trusted Root Program. Ett exempel på hur du skapar ett "självsignerat" testcertifikat visas också senare under Uppdatera en certifikatautentiseringsuppgift.
  • Kryptografiprovidern måste anges som en Microsoft-nyckelprovider för kryptografitjänst (CSP).
  • Certifikatformatet måste vara i PFX-filen eftersom både offentliga och privata nycklar krävs. Windows-servrar använder .pfx-filer som innehåller den offentliga nyckelfilen (TLS/SSL-certifikatfilen) och den associerade privata nyckelfilen.
  • Din Azure Stack Hub-infrastruktur måste ha nätverksåtkomst till certifikatutfärdares crl-plats (Certificate Revocation List) som publicerats i certifikatet. Denna CRL måste vara en HTTP-slutpunkt.

När du har ett certifikat använder du PowerShell-skriptet nedan för att registrera din app och logga in med appens identitet. Ersätt dina egna värden med följande platshållare:

Platshållare Beskrivning Exempel
<PepVM> Namnet på den privilegierade virtuella slutpunktsdatorn på din Azure Stack Hub-instans. "AzS-ERCS01"
<YourCertificateLocation> Platsen för X509-certifikatet i det lokala certifikatarkivet. "Cert:\CurrentUser\My\AB5A8A3533CC7AA2025BF05120117E06DE407B34"
<YourAppName> Ett beskrivande namn för den nya appregistreringen. "Mitt hanteringsverktyg"
  1. Öppna en upphöjd Windows PowerShell session och kör följande skript.

    # 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
    
    
  2. När skriptet har slutförts visas appregistreringsinformationen. Och Thumbprint autentiseras ClientID och auktoriseras senare för åtkomst till resurser som hanteras av 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
    

Håll PowerShell-konsolsessionen öppen när du använder den ApplicationIdentifier med värdet i nästa avsnitt.

Uppdatera en certifikatautentiseringsuppgift

Nu när du har registrerat programmet visar det här avsnittet hur du:

  1. Skapa ett nytt självsignerat X509-certifikat för testning.
  2. Uppdatera programmets autentiseringsuppgifter genom att uppdatera dess tumavtrycksegenskap så att den matchar det nya certifikatet.

Uppdatera certifikatautentiseringsuppgifterna med PowerShell och ersätt dina egna värden med följande platshållare:

Platshållare Beskrivning Exempel
<PepVM> Namnet på den privilegierade virtuella slutpunktsdatorn på din Azure Stack Hub-instans. "AzS-ERCS01"
<YourAppName> Ett beskrivande namn för den nya appregistreringen. "Mitt hanteringsverktyg"
<YourCertificateLocation> Platsen för X509-certifikatet i det lokala certifikatarkivet. "Cert:\CurrentUser\My\AB5A8A3533CC7AA2025BF05120117E06DE407B34"
<AppIdentifier> Identifieraren som tilldelats programregistreringen. "S-1-5-21-1512385356-3796245103-1243299919-1356"
  1. Kör följande cmdletar med din upphöjda Windows PowerShell session:

    # 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
    
  2. När skriptet har slutförts visas den uppdaterade appregistreringsinformationen, inklusive tumavtrycksvärdet för det nya självsignerade certifikatet.

    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
    

Skapa en appregistrering som använder en klienthemlig autentiseringsuppgift

Varning

Det är mindre säkert att använda en klienthemlighet än att använda en X509-certifikatautentiseringsuppgift. Autentiseringsmekanismen är inte bara mindre säker, utan kräver också vanligtvis inbäddning av hemligheten i klientappens källkod. Därför uppmanas du starkt att använda en certifikatautentiseringsuppgift för produktionsappar.

Nu skapar du en ny appregistrering, men den här gången anger du en klienthemlig autentiseringsuppgift. Till skillnad från en certifikatautentiseringsuppgift kan katalogen generera en klienthemlig autentiseringsuppgift. I stället för att ange klienthemligheten använder du växeln -GenerateClientSecret för att begära att den ska genereras. Ersätt dina egna värden med följande platshållare:

Platshållare Beskrivning Exempel
<PepVM> Namnet på den privilegierade virtuella slutpunktsdatorn på din Azure Stack Hub-instans. "AzS-ERCS01"
<YourAppName> Ett beskrivande namn för den nya appregistreringen. "Mitt hanteringsverktyg"
  1. Öppna en upphöjd Windows PowerShell session och kör följande cmdletar:

    # 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. När skriptet har slutförts visas appregistreringsinformationen. Och ClientSecret autentiseras ClientID och auktoriseras senare för åtkomst till resurser som hanteras av 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
    

Håll PowerShell-konsolsessionen öppen när du använder den ApplicationIdentifier med värdet i nästa avsnitt.

Uppdatera en klienthemlighetsautentiseringsuppgift

Uppdatera klienthemlighetens autentiseringsuppgifter med PowerShell med hjälp av parametern ResetClientSecret , som omedelbart ändrar klienthemligheten. Ersätt dina egna värden med följande platshållare:

Platshållare Beskrivning Exempel
<PepVM> Namnet på den privilegierade virtuella slutpunktsdatorn på din Azure Stack Hub-instans. "AzS-ERCS01"
<AppIdentifier> Identifieraren som tilldelats programregistreringen. "S-1-5-21-1634563105-1224503876-2692824315-2623"
  1. Kör följande cmdletar med din upphöjda Windows PowerShell session:

    # 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. När skriptet har slutförts visas den uppdaterade appregistreringsinformationen, inklusive den nyligen genererade klienthemligheten.

    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
    

Ta bort en appregistrering

Nu ser du hur du tar bort en appregistrering från din katalog med hjälp av PowerShell.

Ersätt dina egna värden med följande platshållare:

Platshållare Beskrivning Exempel
<PepVM> Namnet på den privilegierade virtuella slutpunktsdatorn på din Azure Stack Hub-instans. "AzS-ERCS01"
<AppIdentifier> Identifieraren som tilldelats programregistreringen. "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>"}

Inga utdata returneras från att anropa cmdleten Remove-GraphApplication på den privilegierade slutpunkten, men du ser utförliga bekräftelseutdata till konsolen under körningen av cmdleten:

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

Tilldela en roll

Åtkomst till Azure-resurser av användare och appar auktoriseras via Role-Based Access Control (RBAC). Om du vill tillåta att en app får åtkomst till resurser i din prenumeration måste du tilldela tjänstens huvudnamn till en roll för en specifik resurs. Bestäm först vilken roll som representerar rätt behörigheter för appen. Mer information om tillgängliga roller finns i Inbyggda roller för Azure-resurser.

Den typ av resurs som du väljer upprättar också åtkomstomfånget för appen. Du kan ange åtkomstomfånget på prenumerations-, resursgrupps- eller resursnivå. Behörigheter ärvs till lägre omfångsnivåer. Om du till exempel lägger till en app i rollen Läsare för en resursgrupp innebär det att den kan läsa resursgruppen och alla resurser som den innehåller.

  1. Logga in på lämplig portal baserat på den katalog som du angav under Azure Stack Hub-installationen (Azure Portal för Microsoft Entra-ID eller Azure Stack Hub-användarportalen för AD FS, till exempel). I det här exemplet visar vi en användare som är inloggad på Azure Stack Hub-användarportalen.

    Anteckning

    Om du vill lägga till rolltilldelningar för en viss resurs måste ditt användarkonto tillhöra en roll som deklarerar behörigheten Microsoft.Authorization/roleAssignments/write . Till exempel antingen de inbyggda rollerna Ägare eller Administratör för användaråtkomst .

  2. Gå till den resurs som du vill tillåta att appen får åtkomst till. I det här exemplet tilldelar du appen till en roll i prenumerationsomfånget genom att välja Prenumerationer och sedan en specifik prenumeration. Du kan i stället välja en resursgrupp eller en specifik resurs som en virtuell dator.

    Välj prenumeration för tilldelning

  3. Välj sidan Access Control (IAM), som är universell för alla resurser som stöder RBAC.

  4. Välj +Lägg till

  5. Under Roll väljer du den roll som du vill tilldela till appen.

  6. Under Välj söker du efter din app med ett fullständigt eller partiellt programnamn. Under registreringen genereras programnamnet som Azurestack-YourAppName-GUID<><>. Om du till exempel använde ett programnamn för App2 och GUID 2bbe67d8-3fdb-4b62-87cf-cc41dd4344ff tilldelades under skapandet, skulle det fullständiga namnet vara Azurestack-App2-2bbe67d8-3fdb-4b62-87cf-cc41dd4344ff. Du kan söka efter antingen den exakta strängen eller en del, till exempel Azurestack eller Azurestack-App2.

  7. När du hittar appen väljer du den så visas den under Valda medlemmar.

  8. Välj Spara för att slutföra tilldelningen av rollen.

    Tilldela rollen

  9. När appen är klar visas den i listan över huvudkonton som har tilldelats för det aktuella omfånget för den angivna rollen.

    Tilldelad roll

Nu när du har gett din app en identitet och godkänt den för resursåtkomst kan du aktivera skriptet eller koden för att logga in och få säker åtkomst till Azure Stack Hub-resurser.

Nästa steg

Hantera användarbehörigheter
Microsoft Entra dokumentation
Konfigurera Active Directory Federation Services (AD FS)