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.
Azure DevOps-tjänster
Tjänstens huvudnamn och hanterade identiteter ger säker och skalbar autentisering för Azure DevOps Automation-arbetsflöden. Dessa Microsoft Entra-identitetstyper ger förbättrad säkerhet jämfört med traditionella personliga åtkomsttoken (PAT). De använder automatisk hantering av autentiseringsuppgifter, kortare livslängd för token och åtkomstkontroller i företagsklass.
Fördelar med tjänstprincipaler och hanterade identiteter
Förbättrad säkerhet
- Kortlivade token: Microsoft Entra-token upphör att gälla varje timme, vilket minskar exponeringsrisken jämfört med PAT(som kan pågå i upp till ett år).
- Automatisk rotation: Hanterade identiteter hanterar rotation av autentiseringsuppgifter automatiskt.
- Inga lagrade hemligheter: Behovet av att lagra långvariga autentiseringsuppgifter i kod eller konfiguration elimineras.
Driftskvalitet
- Centraliserad hantering: Kontrollera åtkomsten via Microsoft Entra ID-principer och Azure DevOps-behörigheter.
- Granskningsfunktioner: Spåra autentiserings- och åtkomstmönster genom omfattande loggning.
- Skala effektivt: Stöd för scenarier för företagsautomatisering utan enskilda användarberoenden.
Modern autentisering
- Standardbaserad: Använder OAuth 2.0- och OpenID Connect-protokoll.
- Stöd för multifaktorautentisering: Ärver organisationens säkerhetsprinciper.
- Villkorlig åtkomst: Tillämpar avancerade säkerhetsprinciper baserat på kontext.
Förstå tjänstens huvudnamn och hanterade identiteter
Tjänsteprinciper
Serviceprincipaler är Microsoft Entra-objekt som representerar applikationer inom en klientorganisation. De definierar vad ett program kan göra, vilka resurser det kan komma åt och vem som kan använda det. Tjänstens huvudnamn skapas automatiskt när du registrerar ett program i Microsoft Entra-ID och ger ett säkert sätt för program att autentisera och komma åt resurser.
Viktiga egenskaper
- Skapas via programregistrering i Microsoft Entra-ID.
- Stöd för scenarier med flera klientorganisationer.
- Kräv explicit hantering av autentiseringsuppgifter (certifikat eller klienthemligheter).
- Passar perfekt för program som behöver autentiseras i olika miljöer.
Hanterade identiteter
Hanterade identiteter är en särskild typ av service principal som Azure hanterar automatiskt. De eliminerar behovet av att utvecklare hanterar autentiseringsuppgifter genom att tillhandahålla en automatiskt hanterad identitet i Microsoft Entra-ID för Azure-resurser.
Typer av hanterade identiteter
Systemtilldelad hanterad identitet:
- Skapas och kopplas automatiskt till en specifik Azure-resurs.
- Livscykel som hanteras av Azure (tas bort när resursen tas bort).
- En-till-en-relation med Azure-resursen.
- Bäst för program som distribueras på en enda Azure-resurs.
Användartilldelad hanterad identitet:
- Skapad som en fristående Azure-resurs.
- Kan tilldelas till flera Azure-resurser.
- Livscykeln hanteras oberoende av associerade resurser.
- Bäst för program som körs på flera resurser eller som behöver en delad identitet.
När du ska använda varje typ:
- Tjänstens huvudnamn: Distributioner mellan moln, ci/CD-pipelines (kontinuerlig integrering och kontinuerlig leverans), program utanför Azure.
- Systemtilldelade hanterade identiteter: Enskilda Azure-resursprogram (Azure Functions, Azure App Service).
- Användartilldelade hanterade identiteter: Program med flera resurser, scenarier med delad identitet.
Guide för implementering
Följ de här stegen för att implementera tjänstens huvudnamn eller hanterade identiteter för Azure DevOps-autentisering. Fullständiga kodexempel finns i våra exempelprogram.
Steg 1: Skapa din identitet
Välj lämplig identitetstyp baserat på distributionsscenariot.
Alternativ A: Skapa ett huvudnamn för tjänsten (programregistrering)
Serviceprincipaler fungerar bra för CI/CD-pipelines, molnöverskridande scenarier och program som behöver flexibla distributionsalternativ.
Registrera ett program i administrationscentret för Microsoft Entra.
Gå till Appregistreringar>Ny registrering.
Konfigurera programmet:
- Namn: Använd ett beskrivande namn för ditt program.
- Kontotyper: Välj lämplig klientsupport.
- Omdirigerings-URI: Lämna tomt för tjänst-till-tjänst-scenarier.
Skapa autentiseringsuppgifter:
- Rekommenderas: Ladda upp ett certifikat för förbättrad säkerhet.
- Alternativ: Skapa en klienthemlighet (kräver regelbunden rotation).
Viktigt!
När du registrerar ett program skapar Azure både ett programobjekt och ett objekt för tjänstens huvudnamn. Använd tjänstens huvudnamns objekt-ID (finns i fönstret Företagsprogram ) när du lägger till det i Azure DevOps, inte programmets objekt-ID.
Mer information finns i följande artiklar:
Alternativ B: Skapa en hanterad identitet
Hanterade identiteter ger den enklaste autentiseringsupplevelsen för Azure-värdbaserade program.
För systemtilldelad hanterad identitet:
- Gå till din Azure-resurs, till exempel App Service eller en Azure Functions-app.
- Gå till Identity>System tilldelad.
- Växla status till På.
- Spara konfigurationen genom att välja Spara .
För användartilldelad hanterad identitet:
- Skapa den hanterade identiteten i Azure-portalen.
- Gå till Skapa en resurs>Hanterad identitet.
- Konfigurera grundläggande inställningar och skapa resursen.
- Tilldela till resurser efter behov.
Mer information finns i följande artiklar:
Steg 2: Lägg till identiteten i Azure DevOps
När du har skapat din identitet i Microsoft Entra-ID lägger du till den i din Azure DevOps-organisation för att bevilja åtkomst till resurser.
Förutsättningar
- Administratörsroll för projektsamling.
- Projektadministratörs- eller teamadministratörsroll när principen för inbjudan tillåter teamadministratörer att lägga till användare.
Lägg till identiteten
Så här lägger du till identiteten via Azure DevOps-portalen:
Gå till Användare av organisationsinställningar>.
Välj Lägg till användare.
Ange visningsnamnet för din serviceprincipal eller hanterad identitet.
Välj lämplig åtkomstnivå och projektåtkomst.
Skicka inbjudan.
Lägg till identiteten programmatiskt:
Använd REST-API:et ServicePrincipalEntitlements för att automatisera processen.
Andra överväganden:
- Hitta rätt ID: Använd tjänstens huvudnamns objekt-ID i fönstret Företagsprogram i administrationscentret för Microsoft Entra, inte programregistreringens objekt-ID.
- Klientorganisationsbegränsningar: Du kan bara lägga till identiteter från samma klientorganisation som din Azure DevOps-organisation är ansluten till. För scenarier mellan klientorganisationer, se FAQ-lösning.
Steg 3: Konfigurera behörigheter
Konfigurera detaljerade behörigheter för tjänstens huvudnamn eller hanterade identitet i Azure DevOps. Till skillnad från andra Azure-tjänster använder Azure DevOps sin egen behörighetsmodell i stället för Microsoft Entra-programbehörigheter.
Behörighetsalternativ:
- Direkttilldelning: Tilldela behörigheter direkt till identiteten.
- Gruppmedlemskap: Lägg till i Azure DevOps- eller Microsoft Entra-säkerhetsgrupper.
- Åtkomstnivåer: Tilldela lämplig licensnivå (Basic, Basic + Test Plans eller Visual Studio-prenumerant).
Metodtips:
- Använd minst behörighet: Bevilja endast de lägsta behörigheter som krävs.
- Använd grupper: Hantera behörigheter via grupper för enklare underhåll.
- Regelbundna granskningar: Granska behörigheter med jämna mellanrum.
Alternativ för behörighetshantering:
- Azure DevOps-portalen: Välj Behörigheter för organisationsinställningar>.
- REST-API:er: Använd Api:er för tjänstens huvudnamn för programmatisk hantering.
Viktigt!
Azure DevOps jämfört med Microsoft Entra-behörigheter: Azure DevOps använder inte Programbehörigheter för Microsoft Entra-ID. All åtkomstkontroll hanteras via Azure DevOps-behörighetssystemet, vilket möjliggör detaljerade projekt- och resursnivåbehörigheter.
Steg 4: Hämta Microsoft Entra ID-token
Hämta åtkomsttoken för att autentisera dina program med Azure DevOps-API:er och -tjänster.
Tjänsteprincipaler
Använd flöde för klientautentiseringsuppgifter:
POST https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
client_id={client-id}
&scope=https://app.vssps.visualstudio.com/.default
&client_secret={client-secret}
&grant_type=client_credentials
Använd certifikatautentisering (rekommenderas):
using Microsoft.Identity.Client;
var app = ConfidentialClientApplicationBuilder
.Create(clientId)
.WithCertificate(certificate)
.WithAuthority(new Uri($"https://login.microsoftonline.com/{tenantId}"))
.Build();
var result = await app
.AcquireTokenForClient(new[] { "https://app.vssps.visualstudio.com/.default" })
.ExecuteAsync();
string accessToken = result.AccessToken;
För hanterade identiteter
Från Azure-resurser:
using Azure.Identity;
using Azure.Core;
var credential = new ManagedIdentityCredential();
var tokenRequest = new TokenRequestContext(new[] { "https://app.vssps.visualstudio.com/.default" });
var token = await credential.GetTokenAsync(tokenRequest);
string accessToken = token.Token;
Använd Azure Instance Metadata Service:
GET http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://app.vssps.visualstudio.com/
Metadata: true
Azure CLI för ad hoc-åtgärder
För engångsåtgärder eller testning använder du Azure CLI:
# For service principal
az login --service-principal --username {client-id} --password {client-secret} --tenant {tenant-id}
az account get-access-token --resource https://app.vssps.visualstudio.com/
# For managed identity (from Azure resource)
az login --identity
az account get-access-token --resource https://app.vssps.visualstudio.com/
Mer information finns i Hämta Microsoft Entra-token.
Steg 5: Använda token med Azure DevOps
Använd dina förvärvade token för att autentisera REST API-anrop och andra Azure DevOps-åtgärder.
Gör autentiserade API-anrop:
using System.Net.Http;
using System.Net.Http.Headers;
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", accessToken);
var response = await client.GetAsync(
"https://dev.azure.com/{organization}/_apis/projects?api-version=7.1");
Videoexempel
Vanliga integreringsscenarier
- NuGet-feeds: Anslut med NuGet.exe eller dotnet CLI.
- Marketplace-publicering: Publicera tillägg via kommandoraden.
- Azure Pipelines: Skapa tjänstanslutningar som backas upp av hanterade identiteter.
- Git-åtgärder: Klona lagringsplatser med Git Credential Manager.
Fullständiga kodexempel finns i våra exempelprogram.
Hanteringsöverväganden
Tjänstens huvudnamn och hanterade identiteter har olika hanteringsegenskaper jämfört med användarkonton.
Licensiering
- Varje identitet kräver en licens i varje organisation som den ansluter till.
- Fakturering för flera organisationer gäller inte för tjänstens huvudnamn.
- Gruppbaserade licensieringsregler gäller inte automatiskt. Du måste tilldela licenser direkt.
Identitetshantering
- E-postadresser används inte, så det finns inga inbjudningar via e-post.
- Visningsnamn eller avatarer ändras inte i Azure DevOps.
- Visningsnamn ärvs från Microsoft Entra-ID.
Gruppmedlemskap
- Kan läggas till i Microsoft Entra-grupper och Azure DevOps-grupper.
- Har en teknisk begränsning som förhindrar visning i Microsoft Entra-gruppmedlemslistor (endast användargränssnittsbegränsning).
- Kan fortfarande ärva behörigheter från Microsoft Entra-grupper som de tillhör.
Materialisering
- Måste uttryckligen läggas till i organisationer (ingen automatisk materialisering som användare).
- Krävs eftersom tjänstens huvudnamn inte kan logga in interaktivt.
Viktiga skillnader från användarkonton
Tjänstens huvudnamn och hanterade identiteter har specifika begränsningar jämfört med vanliga användare.
Capabilities
- ✅ Generera Microsoft Entra-token för API-åtkomst.
- ✅ Få åtkomst till Azure DevOps-resurser med rätt behörigheter.
- ✅ Gå med i säkerhetsgrupper och team.
- ❌ Skapa PAT- eller Secure Shell-nycklar.
- ❌ Logga in interaktivt eller få åtkomst via ett webbgränssnitt.
- ❌ Skapa eller egna organisationer.
- ❌ Stöd för Azure DevOps OAuth-flöden .
Billing
- Räknas som en separat licens i varje organisation. (Det finns ingen rabatt för flera organisationer.)
- Måste tilldela åtkomstnivå direkt. (Gruppregler tillämpas inte automatiskt.)
Vanliga frågor
Q. Varför ska jag använda tjänstens huvudnamn eller hanterade identitet i stället för en PAT?
A. Tjänstens huvudnamn och hanterade identiteter erbjuder betydande säkerhetsfördelar jämfört med PAT.
Säkerhetsfördelar:
- Kortare livslängd: Microsoft Entra-token upphör att gälla varje timme jämfört med PATs, som kan pågå i upp till ett år.
- Automatisk rotation: Hanterade identiteter roterar autentiseringsuppgifter automatiskt.
- Inga delade hemligheter: Risken för att lagra eller oavsiktligt exponera långlivade token elimineras.
- Centraliserad kontroll: Hanteras via Microsoft Entra-ID med företagssäkerhetsprinciper.
Driftfördelar:
- Spårningslogg: Loggar autentiserings- och åtkomstmönster helt.
- Villkorlig åtkomst: Tillämpar principer baserat på plats, enhet och riskfaktorer.
- Inga tjänstkonton: Eliminerar beroendet av enskilda användarkonton för automatisering.
För migreringsexempel, se Ersätt PAT med Microsoft Entra-token.
Q. Vilka är hastighetsbegränsningarna för tjänstens huvudnamn och hanterade identiteter?
A. Tjänstens huvudnamn och hanterade identiteter har samma hastighetsgränser som användare.
Q. Kostar det mer att använda den här funktionen?
A. Tjänstens huvudnamn och hanterade identiteter prissätts som användare baserat på åtkomstnivå. Viktiga skillnader är:
- Ingen faktureringsrabatt för flera organisationer: Varje identitet räknas som en separat licens i varje organisation.
- Licenstilldelning: Åtkomstnivåer måste tilldelas direkt. (Gruppregler tillämpas inte automatiskt.)
- Samma prisnivåer: Priser för basic-, basic- och testplaner och Visual Studio-prenumeranter gäller.
Q. Kan jag lägga till en hanterad identitet från en annan klientorganisation i min organisation?
A. Du kan bara lägga till identiteter direkt från organisationens anslutna klientorganisation. Använd den här lösningen för scenarier mellan klientorganisationer.
Så här konfigurerar du en hanterad identitet mellan klientorganisationer:
- Skapa en användartilldelad hanterad identitet i resursklientorganisationen.
- Tilldela den till en Azure-resurs, till exempel en virtuell dator eller en Functions-app).
- Skapa ett nyckelvalv och generera ett certifikat (icke-PEM-format).
- Bevilja hanterad identitet åtkomst till nyckelvalvet med behörigheterna Hämta och lista hemlighet.
- Ladda ned certifikatet i CER-format (endast offentlig nyckel).
- Registrera programmet i målklientorganisationen.
- Ladda upp certifikatet till programregistreringen.
- Lägg till tjänstens huvudnamn i Azure DevOps-organisationen.
- Konfigurera autentisering med hjälp av certifikatet från nyckelvalvet.
// Example: Acquire token using managed identity certificate
public static async Task<string> GetSecret(string keyVaultName, string secretName)
{
var keyVaultUri = new Uri($"https://{keyVaultName}.vault.azure.net");
var client = new SecretClient(keyVaultUri, new ManagedIdentityCredential());
var keyVaultSecret = await client.GetSecretAsync(secretName);
return keyVaultSecret.Value.Value;
}
private static async Task<AuthenticationResult> GetAppRegistrationAADAccessToken(
string applicationClientID, string appTenantId)
{
byte[] privateKeyBytes = Convert.FromBase64String(await GetSecret(keyVaultName, secretName));
var certificate = new X509Certificate2(privateKeyBytes, (string)null, X509KeyStorageFlags.MachineKeySet);
var app = ConfidentialClientApplicationBuilder.Create(applicationClientID)
.WithCertificate(certificate)
.WithAuthority(new Uri($"https://login.microsoftonline.com/{appTenantId}"))
.Build();
var result = await app.AcquireTokenForClient(
new[] { "499b84ac-1321-427f-aa17-267ca6975798/.default" })
.ExecuteAsync();
return result;
}
Viktigt!
Rotera certifikat regelbundet för bästa praxis för säkerhet.
Vanliga fel och lösningar
Git-lagringsplatsen med namn eller identifierare finns inte eller så har du inte behörighet
Lösning: Kontrollera att tjänstens huvudnamn har minst en Basic-licens. Intressentlicenser ger inte åtkomst till lagringsplatsen.
Det gick inte att skapa tjänstens huvudnamn med objekt-ID
Lösning: Kontrollera att du använder tjänstens huvudnamns objekt-ID från fönstret Företagsprogram , inte programregistreringens objekt-ID.
Så här hittar du rätt ID:
- Gå till Administrationscenter> för Microsoft EntraEnterprise-program.
- Sök efter ditt programnamn.
- Använd objekt-ID:t i fönstret Företagsprogram .
Åtkomst nekad: Behöver behörigheter för att lägga till användare
Möjliga orsaker och lösningar:
- Otillräcklig roll: Måste vara en projektsamlingsadministratör (PCA) eller ett projekt eller en gruppadministratör med inbjudningsbehörigheter aktiverade.
- Principbegränsning: Kontrollera om principen Tillåt team- och projektadministratörer att bjuda in nya användare är aktiverad.
- Licenstilldelning: Projektadministratörer kan inte tilldela licenser under inbjudan. Kontakta PCA för licensändringar.
Azure DevOps Graphs List API returnerar tom lista
Lösning: Använd continuationToken för att iterera genom alla sidor. Tjänstens huvudnamn kan visas på senare sidor på grund av API-sidnumreringsbeteende.
TF401444: Inloggning krävs
Lösning: Kontrollera att tjänstens huvudnamn har lagts till korrekt i organisationen med nödvändiga behörigheter. Det här felet anger att identiteten inte identifieras i organisationen.