Toegang tot Azure DevOps met Microsoft Entra workloadidentiteit

Azure DevOps Services

Opmerking

Deze functie wordt deze week en volgende uitgerold. Als u de functie nog niet ziet in uw Azure DevOps Services-project, controleert u over een paar dagen opnieuw.

Met een Azure DevOps-serviceverbinding kunnen uw pipelines bij Azure DevOps worden geauthenticeerd zonder gebruik te maken van Personal Access Tokens (PATs), maar met Microsoft Entra workloadidentiteiten. Service-principals en beheerde identiteiten krijgen toegang tot Azure DevOps via workload-identiteitsfederatie, een methode zonder geheimen waardoor geheimen niet beheerd of geroteerd hoeven te worden.

Voordelen

  • Verificatie zonder PAT: elimineer de noodzaak om persoonlijke toegangstokens te maken, op te slaan en te draaien.
  • Minimale bevoegdheden: Gebruik machtigingen per pijplijn in plaats van machtigingen voor gedeelde buildserviceaccountmachtigingen.
  • Verbeterde beveiliging: Gebruik federatieve referenties met automatische tokenrotatie.
  • Cross-organization access: Toegang tot Azure DevOps resources in verschillende organisaties met behulp van één serviceverbinding.
  • Audit trail: Alle verificatiepogingen worden vastgelegd in Azure DevOps auditlogboeken.

Ondersteunde scenario’s

De Azure DevOps-serviceverbinding ondersteunt deze scenario's:

  • Repository-resources: Bekijk code uit opslagplaatsen in verschillende Azure DevOps organisaties.
  • Artifact-feeds: Toegang tot Azure Artifacts-feeds (NuGet, npm, Maven, Python, Cargo, Conda) binnen organisaties zonder het gebruik van PAT's.
  • REST API-aanroepen: Autoriseren naar Azure DevOps REST APIs vanuit inlinescripts.
  • Extension publishing: Publiceer extensies naar Visual Studio Marketplace.

Vereiste voorwaarden

Als u een Azure DevOps-serviceverbinding wilt maken, hebt u het volgende nodig:

Stap 1: Een serviceverbinding maken binnen dezelfde organisatie

Als uw service-principal zich in dezelfde Azure DevOps organisatie bevindt als de serviceverbinding:

Voeg de service-principal toe aan je organisatie

  1. Ga in uw Azure DevOps organisatie naar Organization Settings>Users.

  2. Selecteer Gebruikers toevoegen.

  3. Voer de details van de serviceprincipal in:

    • Naam: de service-principal of de naam van de beheerde identiteit of de object-id
    • Toegangsniveau: selecteer het juiste toegangsniveau. Basic gebruiken voor standaardtoegang
  4. Wijs de service-principal of beheerde identiteit toe aan het project waar u de serviceverbinding maakt, bijvoorbeeld door deze toe te voegen aan de groep Lezers

  5. Selecteer Toevoegen om te bevestigen.

  6. Aanvullende machtigingen op resourceniveau toewijzen aan de service-principal of beheerde identiteit

Stap 2: De serviceverbinding maken

  1. Ga in uw Azure DevOps project naar Project Settings>Service connections.

  2. Selecteer Nieuwe serviceverbinding.

  3. Selecteer Azure DevOps als serviceverbindingstype.

  4. Vul het formulier in:

    • Identiteit: Selecteer de service-principal die u aan uw organisatie hebt toegevoegd
    • Serviceverbindingsnaam: voer een beschrijvende naam in voor de verbinding (bijvoorbeeld my-azdo-connection)
    • Beschrijving (optioneel): Details toevoegen over het doel van de verbinding
  5. Selecteer Opslaan om de serviceverbinding te maken.

Een serviceverbinding maken voor toegang tussen organisaties

Toegang krijgen tot resources in een andere Azure DevOps organisatie die is gekoppeld aan dezelfde Entra ID tenant:

  1. Volg de stappen in Een serviceverbinding maken binnen dezelfde organisatie, maar selecteer Verschillende organisatie bij het maken van de serviceverbinding.

  2. Voer de naam in van de doel-Azure DevOps organisatie.

  3. U moet ook de service principal toevoegen als gebruiker in de doelorganisatie.

De serviceverbinding in uw pijplijn gebruiken

Opslagplaatsen van verschillende organisaties uitchecken

pool:
  vmImage: 'ubuntu-latest'

resources:
  repositories:
  - repository: external-repo
    type: git
    endpoint: my-azdo-connection
    name: 'external-project/external-repo'
    ref: 'refs/heads/main'

steps:
- checkout: self
- checkout: external-repo

Verwijzen naar een sjabloon van een andere organisatie

resources:
  repositories:
    - repository: templates 
      type: git
      endpoint: my-azdo-connection
      name: 'external-project/external-repo'
      ref: "refs/heads/main"    
      
steps:
- template: azdosc-template.yml@templates

Toegang tot artefactfeeds

Gebruik de serviceverbinding met verificatietaken voor artefacten:

- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: 'my-azdo-connection'

- task: DotNetCoreCLI@2
  inputs:
    command: 'restore'
    projects: '**/*.csproj'

Azure DevOps aanroepen vanuit een script

- task: AzureCLI@3
  displayName: Secret-less
  inputs:
    connectionType: 'azureDevOps'
    azureDevOpsServiceConnection: 'my-azdo-connection'
    scriptType: 'pscore'
    scriptLocation: 'inlineScript'
    inlineScript: |
      az rest --method get `
              --url "https://status.dev.azure.com/_apis/status/health?api-version=7.1-preview.1" `
              --resource 499b84ac-1321-427f-aa17-267ca6975798 `
              --query "sort_by(services[?id=='Pipelines'].geographies | [], &name)" `
              -o table

      az devops configure -l

      az devops project list --query "value[].{Name:name, Id:id}" `
                            -o table

      az pipelines pool list --query "[].{Id:id, Name:name}" `
                            -o table

- task: AzureCLI@3
  displayName: Use Entra access token
  inputs:
    connectionType: 'azureDevOps'
    azureDevOpsServiceConnection: 'my-azdo-connection'
    scriptType: 'pscore'
    scriptLocation: 'inlineScript'
    inlineScript: |
      # Get access token for Azure DevOps
      $token = az account get-access-token --resource "499b84ac-1321-427f-aa17-267ca6975798" `
                                           --query "accessToken" `
                                           --output tsv
      
      # Use token in REST API call
      $headers = @{
        Authorization = "Bearer $token"
        "Content-Type" = "application/json"
      }
      
      $body = @{
        name = "Test Build"
      } | ConvertTo-Json
      
      Invoke-RestMethod -Uri "$(System.CollectionUri)$(System.TeamProject)/_apis/build/definitions?api-version=7.1" `
                        -Method POST `
                        -Headers $headers `
                        -Body $body

De AzureCLI@3 taak maakt gebruik van de Azure DevOps CLI, die vooraf is geïnstalleerd op Microsoft-gehoste agents. Voor zelf-hostende agents hebt u de Azure CLI nodig met de extensie azure-devops. Als de azure-devops extensie niet is geïnstalleerd, installeert de AzureCLI@3 taak deze tijdens runtime.

Aanbevolen procedures voor beveiliging

  • Minimale machtigingen: wijs de service-principal alleen de machtigingen toe die nodig zijn voor uw specifieke pijplijntaken.
  • Controletoegang: controleer regelmatig auditlogboeken om het gebruik van de serviceverbinding te controleren.
  • Bereikgebruik: gebruik afzonderlijke serviceverbindingen voor verschillende projecten of organisaties om gedeelde machtigingen te beperken.

Troubleshooting

Aanbeveling

Voor betere beveiliging wijst u de service-principal alleen de machtigingen toe die deze nodig heeft, controleert u regelmatig auditlogboeken en gebruikt u afzonderlijke serviceverbindingen voor verschillende projecten of organisaties.

Maken van serviceverbinding mislukt

Oorzaak: De service-principal wordt niet toegevoegd aan uw organisatie of u beschikt niet over de vereiste machtigingen.

reparatie:

  • Controleer of u de service-principal als gebruiker aan uw organisatie hebt toegevoegd.
  • Controleer of u over de juiste machtigingen beschikt om serviceverbindingen te maken.
  • Zorg ervoor dat de service-principal het vereiste toegangsniveau in de organisatie heeft.

De pijplijn kan niet worden geverifieerd

Oorzaak: De naam van de serviceverbinding komt niet overeen met de YAML-verwijzing of de service-principal beschikt niet over machtigingen voor de doelbronnen.

reparatie:

  • Controleer of de naam van de serviceverbinding in uw pijplijn-YAML overeenkomt met de naam die u hebt gemaakt.
  • Controleer of de service-principal over de juiste machtigingen beschikt voor de resources die u gebruikt.
  • Controleer Azure DevOps auditlogboeken op verificatiefouten.
  • Raadpleeg veelgestelde vragen over service-principals en beheerde identiteiten.
  • Raadpleeg de lijst met foutberichten voor Microsoft Entra AADSTS-statuscodes.

Toegang tussen organisaties werkt niet

Oorzaak: U hebt de service-principal niet toegevoegd als gebruiker in beide organisaties of u hebt de naam van de doelorganisatie verkeerd gespeld.

reparatie:

  • Voeg de service-principal toe als gebruiker in beide organisaties.
  • Controleer of de naam van de doelorganisatie juist is gespeld in de configuratie van de serviceverbinding.
  • Controleer of de service-principal over de vereiste machtigingen in de doelorganisatie beschikt.

Veelvoorkomende foutberichten

Bericht Betekenis en mitigatie
FOUT: TF401444: Meld u ten minste één keer aan als 72f988bf-86f1-41af-91ab-2d7cd011db47\72f988bf-86f1-41af-91ab-2d7cd011db47\115c3ab3-943b-4e0c-96ed-1a1763fbaa44 in een webbrowser om toegang tot de service mogelijk te maken. Controleer of u de service-principal als gebruiker aan uw organisatie hebt toegevoegd.
De managed identity/service-principal <sp/msi name> heeft geen toegang tot Azure DevOps organisatie <org>. Zorg ervoor dat de identiteit is toegevoegd aan de organisatie. Zie https://aka.ms/azdosc#prerequisites Voeg de service-principal toe als gebruiker aan de doelorganisatie en wijs deze toe aan het vereiste project.
U bent niet gemachtigd voor de geselecteerde identiteit. De serviceverbinding wordt als concept opgeslagen. Voor het voltooien van de configuratie, neem contact op met de identiteitseigenaar om een federaal referentie-inloggegeven in de Azure-portal aan te maken met de hieronder vermelde uitgever en subject-ID. De aangemelde gebruiker beschikt niet over voldoende machtigingen om federated inloggegevens te maken. Volg de instructies die worden weergegeven om federatieve referenties rechtstreeks op de identiteit te maken.
VS800075: Het project met id 'vstfs:///Classification/TeamProject/00000000-0000-00000000-000000000000' bestaat niet of u bent niet gemachtigd om het te openen. De serviceverbindingsidentiteit wordt niet toegevoegd aan het project. Ga naar de pagina > serviceverbindingdetails Bekijk de toegang in de huidige organisatie>Lid van> Selecteer een groep om de identiteit aan toe te voegen, bijvoorbeeld de Readers groep. Ga naar Organisatie-instellingen>Gebruikers>. Beheer de identiteit die wordt gebruikt voor de serviceverbinding >Toegang beheren> en selecteer de projecten waartoe de identiteit toegang moet hebben.

Foutberichten van Microsoft Entra ID

De volgende tabel bevat veelvoorkomende Microsoft Entra ID foutcodes en mogelijke problemen met betrekking tot de identiteitsserviceverbindingen van de workload:

Bericht Mogelijk probleem
AADSTS700016: De toepassing met id '****' is niet gevonden De identiteit die wordt gebruikt voor de serviceverbinding bestaat niet meer, is mogelijk verwijderd uit de serviceverbinding of is onjuist geconfigureerd. Als u de serviceverbinding handmatig configureert met een vooraf gemaakte identiteit, moet u ervoor zorgen dat de appID/clientId serviceverbinding correct is geconfigureerd.
AADSTS7000215: Ongeldig clientgeheim opgegeven. U gebruikt een serviceverbinding met een verlopen geheim. Converteer de serviceverbinding naar workload-identiteitsfederatie en vervang de verlopen geheime sleutel door federatieve referenties.
AADSTS700024: Clientverklaring valt niet binnen het geldige tijdsbereik Als de fout zich na ongeveer 1 uur voordoet, gebruikt u in plaats daarvan een serviceverbinding met workload-identiteitsfederatie en een beheerde identiteit. Tokens voor beheerde identiteiten hebben een levensduur van ongeveer 24 uur.
Als de fout vóór 1 uur plaatsvindt, maar na 10 minuten, verplaatst u opdrachten die (impliciet) een toegangstoken aanvragen om bijvoorbeeld toegang te krijgen tot Azure opslag aan het begin van uw script. Het toegangstoken wordt in de cache opgeslagen voor volgende opdrachten.
AADSTS70021: Er is geen overeenkomende federatieve identiteitsrecord gevonden voor gepresenteerde assertie. Verklaringsuitgever: https://app.vstoken.visualstudio.com. Er is geen federatieve referentie gemaakt of de URL van de verlener is niet juist. De juiste URL van de verlener heeft de indeling https://login.microsoftonline.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. U kunt de URL van de uitgever herstellen door een serviceverbinding te bewerken en vervolgens op te slaan. Als Azure DevOps uw identiteit niet heeft gemaakt, moet u de verlener handmatig bijwerken. U kunt de juiste uitgever vinden in het bewerkingsdialoogvenster van de serviceverbinding of in het antwoord als u de REST API gebruikt.
AADSTS70021: Er is geen overeenkomende federatieve identiteitsrecord gevonden voor gepresenteerde assertie. Verklaringsuitgever: https://login.microsoftonline.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Onderwerp van assertie: sc://<org>/<project>/<service-connection>. De URL van de verlener of het federatieonderwerp komt niet overeen. De naam van de Azure DevOps organisatie of project is gewijzigd of de naam van een handmatig gemaakte serviceverbinding is gewijzigd zonder het federatieonderwerp op de identiteit bij te werken.
AADSTS700211: Er is geen overeenkomend gefedereerd identiteitsrecord gevonden voor de verstrekker van de gepresenteerde assertie Er is geen federatieve referentie gemaakt of de URL van de verlener is niet juist.
AADSTS700213: Er is geen overeenkomende federatieve identiteitsrecord gevonden voor het gepresenteerde assertieonderwerp Er is geen federatieve referentie gemaakt of het onderwerp is niet juist.
AADSTS700223 Federatie van workload-identiteit is uitgeschakeld of beperkt op de Microsoft Entra-tenant. In dit scenario is het mogelijk om in plaats daarvan een beheerde identiteit voor de federatie te gebruiken. Bekijk Workload-identiteit met beheerde identiteit voor meer informatie.
AADSTS70025: Clienttoepassing heeft geen geconfigureerde federatieve identiteitsreferenties Zorg dat federatieve authenticatie-referenties zijn geconfigureerd voor de applicatieregistratie of beheerde identiteit.
Microsoft Entra heeft het token afgewezen dat is uitgegeven door Azure DevOps met foutcode AADSTS700238 Workload-identiteitsfederatie is beperkt tot de Microsoft Entra-tenant. De uitgever voor uw organisatie (https://login.microsoftonline.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) mag geen federatie van workloadidentiteiten gebruiken met het workload-identiteitstype (app-registratie en/of beheerde identiteit) dat u gebruikt. Vraag uw Microsoft Entra tenantbeheerder of -beheerteam om workloadidentiteitsfederatie toe te staan voor uw Azure DevOps organisatie.
AADSTS70052: De identiteit moet een beheerde identiteit, één tenant-app of een serviceaccount zijn App-registraties voor meerdere tenants die signInAudience: AzureADMultipleOrgs hebben worden momenteel niet ondersteund door de Microsoft Entra uitgever. Gebruik signInAudience: AzureADMyOrg en verdeel de toegang tot meerdere tenants om in plaats daarvan verschillende serviceverbindingen voor elke tenant te gebruiken. Als u afhankelijk bent van ARM-bewerkingen die toegang hebben tot meerdere tenants in één aanvraag (bijvoorbeeld Cross-tenant-peering van virtuele netwerken) kunt u contact opnemen met ondersteuning om uw Azure DevOps organisatie de Azure DevOps-uitgever te laten gebruiken.
AADSTS900382: Vertrouwelijke client wordt niet ondersteund in Cross Cloud Sommige onafhankelijke clouds blokkeren federatie van workloadidentiteiten.

Wordt de AADSTS-fout die u hierboven niet ziet weergegeven? Controleer Microsoft Entra-foutcodes voor verificatie en autorisatie.

Volgende stappen