Läs på engelska

Dela via


Skapa ett Huvudnamn för Azure-tjänsten med Azure PowerShell

Automatiserade verktyg som använder Azure-tjänster bör alltid ha begränsade behörigheter. I stället för att låta program logga in som en fullständigt privilegierad användare erbjuder Azure serviceprincipaler.

En säkerhetsprincip för Azure är en identitet som skapas för att användas med applikationer, värdtjänster och automatiserade verktyg för att få åtkomst till Azure-resurser. Den här åtkomsten begränsas av de roller som tilldelats tjänstehuvudnamnet, vilket ger dig kontroll över vilka resurser som kan komma åt och på vilken åtkomstnivå. Av säkerhetsskäl rekommenderas det alltid att använda tjänstprincipaler tillsammans med automatiserade verktyg i stället för att tillåta inloggning med en användaridentitet.

Den här artikeln visar stegen för att skapa, hämta information om och återställa ett tjänsthuvudnamn i Azure PowerShell.

Varning

När du skapar ett huvudnamn för tjänsten med kommandot New-AzADServicePrincipal innehåller utdata autentiseringsuppgifter som du måste skydda. Alternativt bör du överväga att använda hanterade identiteter för att undvika behovet av att använda autentiseringsuppgifter.

Förutsättningar

Skapa ett huvudnamn för tjänsten

Skapa ett huvudnamn för tjänsten med cmdleten New-AzADServicePrincipal. När du skapar ett huvudnamn för tjänsten väljer du den typ av inloggningsautentisering som används.

Viktigt

Från och med Az PowerShell-modulen version 7.x tilldelar New-AzADServicePrincipal inte längre rollen Contributor till tjänstens principalkonto som standardbeteende. För att tilldela en specifik roll till en tjänsthuvudman, se Steg för att lägga till en rolltilldelning.

Anteckning

Om ditt konto inte har behörighet att skapa ett huvudnamn för tjänsten returnerar New-AzADServicePrincipal ett felmeddelande som innehåller "Otillräcklig behörighet för att slutföra åtgärden". Kontakta din Microsoft Entra-administratör för att skapa ett tjänstehuvudkonto.

I en Microsoft Entra ID-katalog där användarinställningen Användare kan registrera applikationer har angetts till Nejmåste du vara medlem i någon av följande inbyggda Microsoft Entra ID-roller (som har åtgärden: microsoft.directory/applications/createAsOwner eller microsoft.directory/applications/create):

Mer information om användarinställningar i Microsoft Entra-ID finns i Begränsa vem som kan skapa program.

Det finns två typer av autentisering för tjänstens huvudnamn: Lösenordsbaserad autentisering och certifikatbaserad autentisering.

Lösenordsbaserad autentisering

Viktigt

Standardrollen för ett lösenordsbaserat autentiseringstjänsthuvudnamn är Deltagare. Den här rollen har fullständig behörighet att läsa och skriva till ett Azure-konto. Information om hur du hanterar rolltilldelningar finns i Hantera service principal-roller.

Utan andra autentiseringsparametrar används lösenordsbaserad autentisering och ett slumpmässigt lösenord skapas åt dig. Om du vill ha lösenordsbaserad autentisering rekommenderas den här metoden.

Azure PowerShell
$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

Det returnerade objektet innehåller egenskapen PasswordCredentials.SecretText som innehåller det genererade lösenordet. Se till att du lagrar det här värdet någonstans säkert för att autentisera med tjänstens huvudnamn. Dess värde visas inte i konsolens utdata. Om du förlorar lösenordet återställa autentiseringsuppgifterna för tjänstens huvudnamn.

Med följande kod kan du exportera hemligheten:

Azure PowerShell
$sp.PasswordCredentials.SecretText

Objektet som returneras från New-AzADServicePrincipal innehåller medlemmarna Id och DisplayName, där någon av dessa kan användas för inloggning med tjänstens huvudkonto.

Viktigt

För att logga in med tjänstens huvudnamn krävs det klient-ID som tjänstens huvudnamn skapades under. Om du vill hämta den aktiva klientorganisationen när tjänstens huvudkonto skapades, kör följande kommando direkt efter att tjänstens huvudkonto har skapats:

Azure PowerShell
(Get-AzContext).Tenant.Id

Certifikatbaserad autentisering

Viktigt

Det finns ingen tilldelad standardroll när du skapar ett certifikatbaserat autentiseringstjänsthuvudnamn. Information om hur du hanterar rolltilldelningar finns i Hantera tjänsthuvudnamnsroller.

Tjänstens huvudnamn med certifikatbaserad autentisering skapas med parametern CertValue. Den här parametern tar en base64-kodad ASCII-sträng för det offentliga certifikatet. Detta representeras av en PEM-fil eller en textkodad CRT eller CER. Binära kodningar för det offentliga certifikatet stöds inte. Dessa instruktioner förutsätter att du redan har ett certifikat tillgängligt.

Azure PowerShell
$cert = <public certificate as base64-encoded string>
$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName -CertValue $cert

Objektet som returneras från New-AzADServicePrincipal innehåller egenskaperna Id och DisplayName, som båda kan användas för inloggning med tjänstens huvudnamn. Klienter som loggar in med tjänstens huvudnamn behöver också åtkomst till certifikatets privata nyckel.

Viktigt

För att logga in med tjänstens huvudnamn krävs det klient-ID som tjänstens huvudnamn skapades under. Om du vill hämta den aktiva klientorganisationen när tjänstens huvudnamn skapades kör du följande kommando direkt efter att tjänstens huvudnamn har skapats:

Azure PowerShell
(Get-AzContext).Tenant.Id

Hämta ett befintligt huvudnamn för tjänsten

En lista över service principals för den aktiva hyresgästen kan hämtas med Get-AzADServicePrincipal. Som standard returnerar det här kommandot alla tjänstens huvudnamn i en klientorganisation. För stora organisationer kan det ta lång tid att returnera resultat. I stället rekommenderar vi att du använder något av de valfria filtreringsargumenten på serversidan:

  • DisplayNameBeginsWith begär tjänsteprinciper som har ett prefix som matchar det angivna värdet. Visningsnamnet för tjänstehuvudnamn är värdet som anges med DisplayName vid skapandet.
  • DisplayName begär en exakt match av ett tjänstehuvudnamn.

Hantera roller för tjänstens huvudnamn

Azure PowerShell har följande cmdletar för att hantera rolltilldelningar:

Mer information om Role-Based åtkomstkontroll (RBAC) och roller finns i RBAC: Inbyggda roller.

Följande exempel lägger till rollen Reader och tar bort rollen Deltagare:

Azure PowerShell
New-AzRoleAssignment -ApplicationId <service principal application ID> -RoleDefinitionName 'Reader'
Remove-AzRoleAssignment -ObjectId <service principal object ID> -RoleDefinitionName 'Contributor'

Viktigt

Rolltilldelnings-cmdletar använder inte objekt-ID:t för serviceprincipalen. De tar det associerade program-ID:t, som genereras vid skapandetillfället. Om du vill hämta applikations-ID:t för tjänstehuvudmannen använder du Get-AzADServicePrincipal.

Anteckning

Om ditt konto inte har behörighet att tilldela en roll visas ett felmeddelande om att ditt konto "inte har behörighet att utföra åtgärden Microsoft.Authorization/roleAssignments/write". Kontakta din Microsoft Entra-administratör för att hantera roller.

Att lägga till en roll begränsar inte tidigare tilldelade behörigheter. När du begränsar behörigheterna för tjänstens huvudkonto bör rollen Bidragsgivare tas bort.

Ändringarna kan verifieras genom att visa en lista över tilldelade roller:

Azure PowerShell
Get-AzRoleAssignment -ServicePrincipalName ServicePrincipalName

Logga in med tjänstens huvudnamn

Testa det nya service principalens autentiseringsuppgifter och behörigheter genom att logga in. För att logga in med en tjänsteprincip behöver du värdet applicationId som är associerat med den och den klientorganisation den skapades under.

Logga in med tjänstens huvudnamn med ett lösenord:

Azure PowerShell
# Use the application ID as the username, and the secret as password
$credentials = Get-Credential
Connect-AzAccount -ServicePrincipal -Credential $credentials -Tenant <tenant ID>

Certifikatbaserad autentisering kräver att Azure PowerShell kan hämta information från ett lokalt certifikatarkiv baserat på ett tumavtryck för certifikat.

Azure PowerShell
Connect-AzAccount -ServicePrincipal -Tenant <TenantId> -CertificateThumbprint <Thumbprint> -ApplicationId <ApplicationId>

Anvisningar om hur du importerar ett certifikat till ett arkiv för autentiseringsuppgifter som kan nås av PowerShell finns i certifikatbaserad autentisering

Återställ autentiseringsuppgifter

Om du glömmer autentiseringsuppgifterna för tjänstens huvudnamn använder du New-AzADSpCredential för att lägga till en ny autentiseringsuppgift med ett slumpmässigt lösenord. Den här cmdleten stöder inte användardefinierade autentiseringsuppgifter när lösenordet återställs.

Viktigt

Innan du tilldelar nya autentiseringsuppgifter kanske du vill ta bort befintliga autentiseringsuppgifter för att förhindra inloggning med dem. Det gör du genom att använda cmdleten Remove-AzADSpCredential:

Azure PowerShell
Remove-AzADSpCredential -DisplayName ServicePrincipalName
Azure PowerShell
$newCredential = New-AzADSpCredential -ServicePrincipalName ServicePrincipalName

Felsökning

Om du får felet: "New-AzADServicePrincipal: Ett annat objekt med samma värde för egenskapen identifierUris finns redan.", kontrollera att det inte redan finns ett tjänsthuvudobjekt med samma namn.

Azure PowerShell
Get-AzAdServicePrincipal -DisplayName ServicePrincipalName

Om det befintliga tjänstens huvudnamn inte längre behövs kan du ta bort det med hjälp av följande exempel.

Azure PowerShell
Remove-AzAdServicePrincipal -DisplayName ServicePrincipalName

Det här felet kan också inträffa när du tidigare har skapat ett huvudnamn för tjänsten för ett Azure Active Directory-program. Om du tar bort tjänstens huvudnamn är programmet fortfarande tillgängligt. Det här programmet hindrar dig från att skapa ett annat huvudnamn för tjänsten med samma namn.

Du kan använda följande exempel för att kontrollera att ett Microsoft Entra-program med samma namn inte finns:

Azure PowerShell
Get-AzADApplication -DisplayName ServicePrincipalName

Om ett program med samma namn finns och inte längre behövs kan det tas bort med hjälp av följande exempel.

Azure PowerShell
Remove-AzADApplication -DisplayName ServicePrincipalName

Annars väljer du ett alternativt namn för det nya tjänstens huvudnamn som du försöker skapa.