Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 fullt privilegierad användare erbjuder Azure huvudkonton för tjänsten.
Ett Azure-tjänsthuvudnamn är en identitet som skapas för användning med program, värdbaserade tjänster och automatiserade verktyg för åtkomst till Azure-resurser. Åtkomsten begränsas av de roller som tilldelas den tjänsthuvudansvarige, vilket ger dig kontroll över vilka resurser som kan nås och på vilken nivå. Av säkerhetsskäl rekommenderas det alltid att använda tjänstprincipaler med automatiserade verktyg i stället för att låta dem logga in med en användaridentitet.
Den här artikeln visar hur du skapar, hämtar information om och återställer ett tjänsthuvudnamn med Azure PowerShell.
Försiktighet
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 att behöva använda autentiseringsuppgifter.
Förutsättningar
- Om du väljer att använda Azure PowerShell lokalt:
- Installera Az PowerShell-modulen.
- Anslut till ditt Azure-konto med hjälp av cmdleten Connect-AzAccount .
- Om du väljer att använda Azure Cloud Shell:
- Mer information finns i Översikt över Azure Cloud Shell .
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 version 7.x av Az PowerShell-modulen tilldelar New-AzADServicePrincipal inte längre rollen Contributor till tjänsthuvudmannen som standard. För att tilldela en specifik roll till en tjänsthuvudman, se Steg för att lägga till en rolltilldelning.
Anmärkning
Om ditt konto inte har behörighet att skapa ett tjänstehuvudnamn, returnerar New-AzADServicePrincipal
ett felmeddelande som innehåller "Otillräckliga behörigheter 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 program har angetts till Nej, må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
):
- Programutvecklare
- Programadministratör
- Applikationsadministratör för molnet
- Global Administratör
- Hybrididentitetsadministratör
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 tjänstens huvudkonto för lösenordsbaserad autentisering är Deltagare. Den här rollen har fullständig behörighet att läsa och skriva till ett Azure-konto. För information om att hantera rolltilldelningar, se Hantera roller för tjänstehuvudman.
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.
$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äll tjänstens huvudautentiseringsuppgifter.
Med följande kod kan du exportera hemligheten:
$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 ett tjänstehuvudnamn krävs det klient-ID under vilket tjänstehuvudnamnet skapades. För att få den aktiva tenant när serviceprincipalen skapades, kör du följande kommando omedelbart efter att serviceprincipalen har skapats:
(Get-AzContext).Tenant.Id
Certifikatbaserad autentisering
Viktigt!
Ingen standardroll tilldelas när du skapar ett tjänstehuvudnamn för certifikatbaserad autentisering. För information om att hantera rolltilldelningar, se Hantera roller för tjänstehuvudman.
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.
$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 ett tjänstehuvudnamn krävs det klient-ID under vilket tjänstehuvudnamnet skapades. För att få den aktiva tenant när serviceprincipalen skapades, kör du följande kommando omedelbart efter att serviceprincipalen har skapats:
(Get-AzContext).Tenant.Id
Hämta en befintlig tjänsthuvudman
En lista över tjänsteprincipaler för den aktiva klientorganisationen kan hämtas med Get-AzADServicePrincipal. Som standard returnerar detta kommando alla tjänstehuvudprinciper i en hyresgäst. 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änsthuvudnamn som har ett prefix som matchar det angivna värdet. Visningsnamnet för en service principal är det värde som anges medDisplayName
vid skapandet. -
DisplayName
begär en exakt matchning av tjänstens huvudnamn.
Hantera tjänstens huvudidentitetroller
Azure PowerShell har följande cmdletar för hantering av rolltilldelningar:
- Get-AzRoleAssignment
- New-AzRoleAssignment (Skapar en ny rolltilldelning)
- Remove-AzRoleAssignment
Mer information om rollbaserad åtkomstkontroll (RBAC) och roller finns i RBAC: Inbyggda roller.
Följande exempel lägger till rollen Läsare och tar bort rollen Deltagare :
New-AzRoleAssignment -ApplicationId <service principal application ID> -RoleDefinitionName 'Reader'
Remove-AzRoleAssignment -ObjectId <service principal object ID> -RoleDefinitionName 'Contributor'
Viktigt!
Rolltilldelnings-cmdletar tar inte objekt-ID:t för tjänstens huvudobjekt. 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
.
Anmärkning
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.
När en roll läggs till begränsas inte tidigare tilldelade behörigheter. När du begränsar behörigheter för tjänsthuvudkontot ska rollen Deltagare tas bort.
Ändringarna kan verifieras genom att visa en lista över tilldelade roller:
Get-AzRoleAssignment -ServicePrincipalName ServicePrincipalName
Logga in med ett tjänsthuvudnamn
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 det applicationId
värde som är kopplat till den, samt den klientorganisation den skapats under.
Så här loggar du in med tjänsteprincipalen via ett lösenord.
# 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.
Connect-AzAccount -ServicePrincipal -Tenant <TenantId> -CertificateThumbprint <Thumbprint> -ApplicationId <ApplicationId>
Anvisningar om hur du importerar ett certifikat till ett autentiseringsarkiv som är tillgängligt 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 med cmdleten Remove-AzADSpCredential:
Remove-AzADSpCredential -DisplayName ServicePrincipalName
$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.
Get-AzAdServicePrincipal -DisplayName ServicePrincipalName
Om det befintliga tjänsthuvudnamnet inte längre behövs kan du ta bort det med hjälp av följande exempel.
Remove-AzAdServicePrincipal -DisplayName ServicePrincipalName
Det här felet kan också inträffa om du tidigare har skapat ett tjänsthuvudnamn för ett Azure Active Directory-program. Om du tar bort tjänsthuvudnamnet är programmet fortfarande tillgängligt. Det här programmet förhindrar att du skapar ett annat tjänsthuvudnamn med samma namn.
Du kan använda följande exempel för att kontrollera att ett Microsoft Entra-program med samma namn inte finns:
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.
Remove-AzADApplication -DisplayName ServicePrincipalName
Annars väljer du ett alternativt namn för det nya huvudtjänstnamn som du försöker skapa.
Azure PowerShell