Skapa en Azure-tjänsts huvudnamn med Azure PowerShell

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

Ett Azure-tjänsthuvudnamn är en identitet som skapats för användning med program, värdtjänster och automatiska verktyg för åtkomst till Azure-resurser. Den här åtkomsten begränsas av rollerna som tilldelats tjänstens huvudnamn, vilket ger dig kontroll över vilka resurser som kan kommas åt och på vilken nivå. Av säkerhetsskäl rekommenderar vi alltid att du använder tjänsthuvudnamn med automatiska verktyg i stället för att låta dem logga in med en användaridentitet.

I den här artikeln beskrivs stegen för att skapa, hämta information om och återställa ett tjänsthuvudnamn med Azure PowerShell.

Varning

När du skapar en tjänsts huvudnamn med kommandot New-AzADServicePrincipal innehåller utdata autentiseringsuppgifter som du måste skydda. Alternativt kan du överväga att använda hanterade identiteter för att undvika att behöva använda autentiseringsuppgifter.

Som standard tilldelar New-AzADServicePrincipal rollen Deltagare till tjänstens huvudnamn i prenumerationens omfattning. Minska risken för ett komprometterat tjänsthuvudnamn genom att tilldela en mer specifik roll och begränsa omfattningen till en resurs eller resursgrupp. Mer information finns i Steg för att lägga till en rolltilldelning.

Skapa en tjänsts huvudnamn

Skapa en tjänsts huvudnamn med cmdleten New-AzADServicePrincipal. När du skapar en tjänsts huvudnamn väljer du vilken typ av inloggningsautentisering som används.

Anteckning

Om ditt konto inte har behörighet att skapa en tjänsts huvudnamn returneras ett felmeddelande som innehåller "Otillräckliga behörigheter för New-AzADServicePrincipal att slutföra åtgärden". Kontakta administratören Azure Active Directory skapa en tjänsts huvudnamn.

Det finns två typer av autentisering tillgänglig för tjänsthuvudnamn: lösenordsbaserad autentisering och certifikatbaserad autentisering.

Lösenordsbaserad autentisering

Viktigt

Standardrollen för en lösenordsbaserad autentiseringstjänsts huvudnamn är Deltagare. Den här rollen har fullständig behörighet att läsa och skriva till ett Azure-konto. Mer information om hur du hanterar rolltilldelningar finns i Hantera tjänstens huvudroller.

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

$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

Det returnerade objektet innehåller Secret medlemmen, som är en SecureString som innehåller det genererade lösenordet. Se till att du lagrar det här värdet någonstans säkert så att du kan autentisera med tjänstens huvudnamn. Värdet visas inte i konsolens utdata. Om du tappar bort lösenordet återställer du tjänstens huvudautentiseringsuppgifter.

Med följande kod kan du exportera hemligheten:

$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sp.Secret)
$UnsecureSecret = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)

För lösenord som anges av användaren tar PasswordCredential parametern Microsoft.Azure.Commands.ActiveDirectory.PSADPasswordCredential objekt. Objekten måste ha giltiga och StartDate EndDate och ha oformaterad Password text. När du skapar ett lösenord ska du se till att Azure Active Directory lösenordsregler och begränsningar. Använd inte ett svagt lösenord eller återanvänd ett lösenord.

Import-Module -Name Az.Resources # Imports the PSADPasswordCredential object
$credentials = New-Object Microsoft.Azure.Commands.ActiveDirectory.PSADPasswordCredential -Property @{StartDate=Get-Date; EndDate=Get-Date -Year 2024; Password=<Choose a strong password>}
$sp = New-AzAdServicePrincipal -DisplayName ServicePrincipalName -PasswordCredential $credentials

Objektet som returneras New-AzADServicePrincipal från innehåller filen och Id DisplayName medlemmarna, som båda kan användas för att logga in med tjänstens huvudnamn.

Viktigt

Om du loggar in med en tjänsts huvudnamn krävs det klientorganisations-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:

(Get-AzContext).Tenant.Id

Certifikatbaserad autentisering

Viktigt

Det finns ingen standardroll tilldelad när en certifikatbaserad autentiseringstjänsts huvudnamn skapas. Mer information om hur du hanterar rolltilldelningar finns i Hantera tjänstens huvudroller.

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

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

Du kan också använda KeyCredential parametern, som tar PSADKeyCredential objekt. De här objekten måste ha en giltig , och ha medlemmen inställd på StartDate EndDate en CertValue base64-kodad ASCII-sträng för det offentliga certifikatet.

$cert = <public certificate as base64-encoded string>
$credentials = New-Object -TypeName Microsoft.Azure.Commands.ActiveDirectory.PSADKeyCredential -Property @{StartDate=Get-Date; EndDate=Get-Date -Year 2024; KeyId=New-Guid; CertValue=$cert}
$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName -KeyCredential $credentials

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

Viktigt

Om du loggar in med en tjänsts huvudnamn krävs det klientorganisations-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:

(Get-AzContext).Tenant.Id

Skaffa ett befintligt huvudnamn för tjänsten

En lista med tjänsthuvudnamn för den aktiva klientorganisationen kan hämtas med Get-AzADServicePrincipal. Som standard returnerar det här kommandot alla tjänsthuvudnamn i en klientorganisation. För stora organisationer kan det ta lång tid att returnera resultat. I stället rekommenderas ett av de valfria filtreringsargumenten på servern:

  • DisplayNameBeginsWith begär tjänsthuvudnamn som har ett prefix som matchar det angivna värdet. Visningsnamnet för en tjänsts huvudnamn är det värde som anges med DisplayName värdet när den skapas.
  • DisplayName begär en exakt matchning av ett huvudnamn för tjänsten.

Hantera tjänstens huvudroller

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

Standardrollen för en lösenordsbaserad autentiseringstjänsts huvudnamn är Deltagare. Den här rollen har fullständig behörighet att läsa och skriva till ett Azure-konto. Rollen Läsare är mer restriktiv med skrivskyddsåtkomst. Mer information om Role-Based åtkomstkontroll (RBAC) och roller finns i RBAC: Inbyggda roller.

I det här exemplet läggs rollen Läsare till och deltagarrollen tas bort:

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

Viktigt

Rolltilldelningscmdlet:ar tar inte tjänstens huvudobjekt-ID. De använder det associerade program-ID:t som genereras när det skapas. Om du vill hämta program-ID:t för en tjänsts huvudnamn 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 administratören Azure Active Directory att hantera roller.

När du lägger till en roll begränsas inte tidigare tilldelade behörigheter. När du begränsar behörigheterna för ett tjänsthuvudnamn bör deltagarrollen tas bort.

Du kan verifiera ändringarna genom att visa de tilldelade rollerna:

Get-AzRoleAssignment -ServicePrincipalName ServicePrincipalName

Logga in med ett tjänsthuvudnamn

Testa det nya tjänstens huvudnamn och autentiseringsuppgifter genom att logga in. Om du vill logga in med en tjänsts huvudnamn behöver du det värde som är kopplat till det, och applicationId klientorganisationen som den skapades under.

Så här loggar du in med en tjänsts huvudnamn med hjälp av 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 tumuttryck för certifikat.

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

Anvisningar om hur du importerar ett certifikat till ett lager för autentiseringsuppgifter som kan kommas åt via PowerShell finns i Logga in med Azure PowerShell

Återställa autentiseringsuppgifter

Om du glömmer autentiseringsuppgifterna för en tjänsts huvudnamn kan du använda New-AzADSpCredential och lägga till en ny autentisering med ett slumpmässigt lösenord. Den här cmdleten stöder inte användardefinierade autentiseringsuppgifter när du återställer lösenordet.

Viktigt

Innan du tilldelar nya autentiseringsuppgifter kanske du vill ta bort befintliga autentiseringsuppgifter för att förhindra att du loggar in 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 felmeddelandet: "New-AzADServicePrincipal: Ett annat objekt med samma värde för egenskapsidentifierareUris redan finns." kontrollerar du att ett tjänsthuvudnamn med samma namn inte redan finns.

Get-AzAdServicePrincipal -DisplayName ServicePrincipalName

Om det befintliga huvudbeloppet för tjänsten 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 när du tidigare har skapat ett tjänsthuvudnamn 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 tjänsthuvudnamn med samma namn.

Du kan använda följande exempel för att verifiera att Azure Active Directory 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 annat namn för det nya tjänsthuvudnamnet som du försöker skapa.