Skapa tjänstens huvudnamn för Azure med Azure PowerShell
Automatiserade verktyg som använder Azure-tjänster bör alltid ha begränsad behörighet. 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 huvudnamn för tjänsten i Azure är en identitet som skapas för användning med program, värdbaserade tjänster och automatiserade verktyg för att tillgång till Azure-resurser. Åtkomsten begränsas av de roller som tilldelas tjänstens huvudnamn, vilket ger dig kontroll över vilka resurser som kan nås och på vilken nivå. Av säkerhetsskäl rekommenderar vi att du alltid använder tjänstens huvudnamn med automatiserade verktyg i stället för att tillåta inloggning 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.
Varning
När du skapar tjänstens huvudnamn 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 cmdleten Anslut-AzAccount.
- Om du väljer att använda 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 kan du välja vilken typ av inloggningsinformation som används.
Viktigt!
Från och med Az PowerShell-modul version 7.x tilldelar New-AzADServicePrincipal inte längre rollen Deltagare till tjänstens huvudnamn som standard. Information om hur du tilldelar en specifik roll till ett huvudnamn för tjänsten finns i Steg för att lägga till en rolltilldelning.
Kommentar
Om ditt konto inte har behörighet att skapa ett huvudnamn New-AzADServicePrincipal
för tjänsten returnerar ett felmeddelande som innehåller "Otillräckliga behörigheter för att slutföra åtgärden". Kontakta microsoft Entra-administratören för att skapa ett huvudnamn för tjänsten.
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
- Molnprogramadministratör
- Global administratör fö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 huvudnamn för tjänsten 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. Information om hur du hanterar rolltilldelningar finns i Hantera roller för tjänstens huvudnamn.
Om inga andra autentiseringsparametrar finns används lösenordsbaserad autentisering, och ett slumpmässigt lösenord skapas åt dig. Om du vill använda 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 värdet lagras på en säker plats för autentisering med tjänstens huvudnamn. Värdet visas inte i konsolens utdata. Om du tappar bort lösenordet måste du återställa autentiseringsuppgifterna för tjänstens huvudnamn.
Med följande kod kan du exportera hemligheten:
$sp.PasswordCredentials.SecretText
Objektet som returnerades från New-AzADServicePrincipal
innehåller medlemmarna Id
och DisplayName
, som båda kan användas för inloggning med tjänstens huvudnamn.
Viktigt!
För inloggning med tjänstens huvudnamn krävs det klientorganisations-ID som tjänstens huvudnamn skapades under. För att få den klientorganisation som var aktiv när tjänstens huvudnamn skapades kör du följande kommando omedelbart efter att tjänstens huvudnamn har skapats:
(Get-AzContext).Tenant.Id
Certifikatbaserad autentisering
Viktigt!
Ingen standardroll tilldelas när du skapar en certifikatbaserad autentisering för tjänstens huvudnamn. Information om hur du hanterar rolltilldelningar finns i Hantera roller för tjänstens huvudnamn.
Tjänstens huvudnamn med certifikatbaserad autentisering skapas med parametern CertValue
. Denna parameter 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är kodning av det offentliga certifikatet stöds inte. I de här anvisningarna förutsätts att du redan har ett tillgängligt certifikat.
$cert = <public certificate as base64-encoded string>
$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName -CertValue $cert
Objektet som returneras från New-AzADServicePrincipal
innehåller Id
egenskaperna och DisplayName
, som kan användas för inloggning med tjänstens huvudnamn. Klienter som loggar in med tjänstens huvudnamn måste också ha åtkomst till certifikatets privata nyckel.
Viktigt!
För inloggning med tjänstens huvudnamn krävs det klientorganisations-ID som tjänstens huvudnamn skapades under. För att få den klientorganisation som var aktiv när tjänstens huvudnamn skapades kör du följande kommando omedelbart efter att tjänstens huvudnamn har skapats:
(Get-AzContext).Tenant.Id
Hämta ett befintligt tjänsthuvudnamn
En lista över tjänsthuvudnamn för den aktiva klientorganisationen kan hämtas med Get-AzADServicePrincipal. Som standard returnerar detta kommando alla huvudnamn för tjänsten i en klientorganisation. För stora organisationer kan det ta lång tid att returnera resultat. Vi rekommenderar att du i stället använder de valfria argumenten för filtrering på serversidan:
DisplayNameBeginsWith
begär tjänsthuvudnamn som har ett prefix som matchar det angivna värdet. Visningsnamnet för ett tjänsthuvudnamn är det värde som anges medDisplayName
när det skapas.DisplayName
begär en exakt matchning av tjänstens huvudnamn.
Hantera roller för tjänstens huvudnamn
Azure PowerShell har följande cmdletar för hantering av rolltilldelningar:
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!
Cmdletar för rolltilldelning tar inte tjänsthuvudnamnsobjektets ID. De tar ID för det associerade programmet, som genereras vid tidpunkten för skapandet. Om du vill hämta program-ID:t för ett tjänsthuvudnamn använder du Get-AzADServicePrincipal
.
Kommentar
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änstens huvudnamn bör rollen Deltagare tas bort.
Du bekräftar ändringarna genom att ange de roller som är tilldelade:
Get-AzRoleAssignment -ServicePrincipalName ServicePrincipalName
Logga in med ett tjänsthuvudnamn
Testa det nya tjänsthuvudnamnets autentiseringsuppgifter och behörigheter genom att logga in. Om du vill logga in med ett huvudnamn för tjänsten behöver du det applicationId
värde som är associerat med det och den klientorganisation som det skapas under.
Så här loggar du in med ett huvudnamn för tjänsten med 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>
För certifikatbaserad autentisering måste Azure PowerShell kunna 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 bort autentiseringsuppgifterna för ett huvudnamn för tjänsten läggar du till en ny autentiseringsuppgift med ett slumpmässigt lösenord med hjälp av New-AzADSpCredential. Den här cmdleten stöder inte användardefinierade autentiseringsuppgifter när lösenordet återställs.
Viktigt!
Innan du tilldelar några nya autentiseringsuppgifter kan du ta bort befintliga autentiseringsuppgifter för att förhindra att de används för inloggning. 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 egenskapsidentifierare finns redan.", kontrollerar du att det inte redan finns ett huvudnamn för tjänsten 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 det finns ett program med samma namn som inte längre behövs så 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
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för