Ansluta till Azure med en Azure Resource Manager-tjänstanslutning

Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019

Med en Azure Resource Manager-tjänstanslutning kan du ansluta till Azure-resurser som Azure Key Vault från din pipeline. Med den här anslutningen kan du använda en pipeline för att distribuera till Azure-resurser, till exempel en Azure App Service-app, utan att behöva autentisera varje gång.

Du har flera autentiseringsalternativ för att ansluta till Azure med en Azure Resource Manager-tjänstanslutning. De rekommenderade alternativen är att använda arbetsbelastningsidentitetsfederation med antingen en appregistrering eller hanterad identitet.

De rekommenderade anslutningsalternativen för Azure Resource Manager-tjänsten är:

Det finns andra alternativ för autentisering av Azure Resource Manager-tjänstanslutningar som inte ingår i den här artikeln:

Skapa en Azure Resource Manager-appregistrering (automatisk)

När du skapar en Azure Resource Manager-tjänstanslutning väljer du mellan två olika typer av autentiseringsuppgifter – identitetsfederation för arbetsbelastning eller en hemlighet.

Skapa en Azure Resource Manager-appregistrering med arbetsbelastningsidentitetsfederation (automatiskt)

Du kan använda den här metoden om alla följande objekt är sanna för ditt scenario:

  • Du har rollen Ägare för din Azure-prenumeration.
  • Du ansluter inte till Azure Stack - eller Azure US Government-miljöerna .
  • Alla Marketplace-tilläggsuppgifter som du använder uppdateras för att stödja arbetsbelastningsidentitetsfederation.

Med det här valet frågar Azure DevOps automatiskt efter den prenumeration, hanteringsgrupp eller Machine Learning-arbetsyta som du vill ansluta till och skapar en arbetsbelastningsidentitetsfederation för autentisering.

  1. I Azure DevOps-projektet går du till Projektinställningar>Tjänstanslutningar.

    Mer information finns i Öppna projektinställningar.

  2. Välj Ny tjänstanslutning och sedan Azure Resource Manager och Nästa.

    Skärmbild som visar valet av Azure Resource Manager.

  3. Välj Appregistrering (automatisk) med identitetsfederationen för autentiseringsuppgifter.

    Skärmbild av val av appregistreringsautentiseringsmetod (automatisk) med arbetsbelastningsidentitet vald.

  4. Välj en omfångsnivå. Välj Prenumeration, Hanteringsgrupp eller Machine Learning-arbetsyta. Hanteringsgrupper är containrar som hjälper dig att hantera åtkomst, principer och efterlevnad i flera prenumerationer. En Machine Learning-arbetsyta är en plats där du kan skapa maskininlärningsartefakter.

    • Ange följande parametrar för prenumerationsomfånget :

      Parameter Description
      Abonnemang Obligatoriskt. Välj Azure-prenumerationen.
      Resursgrupp Obligatoriskt. Välj Azure-resursgrupp.
    • För omfånget Hanteringsgrupp väljer du Azure-hanteringsgruppen.

    • Ange följande parametrar för machine learning-arbetsytans omfång:

      Parameter Description
      Abonnemang Obligatoriskt. Välj Azure-prenumerationen.
      Resursgrupp Obligatoriskt. Välj den resursgrupp som innehåller arbetsytan.
      Machine Learning-arbetsyta Obligatoriskt. Välj Azure Machine Learning-arbetsytan.
  5. Ange ett namn på tjänstanslutningen.

  6. Du kan också ange en beskrivning för tjänstanslutningen.

  7. Välj Bevilja åtkomstbehörighet till alla pipelines för att tillåta att alla pipelines använder den här tjänstanslutningen. Om du inte väljer det här alternativet måste du manuellt bevilja åtkomst till varje pipeline som använder den här tjänstanslutningen.

  8. Välj Spara.

När den nya tjänstanslutningen har skapats kopierar du anslutningsnamnet och klistrar in det i koden som värde för azureSubscription.

Skapa en Azure Resource Manager-appregistrering med en hemlighet (automatiskt)

Med det här valet frågar Azure DevOps automatiskt efter den prenumeration, hanteringsgrupp eller Machine Learning-arbetsyta som du vill ansluta till och skapar en hemlighet för autentisering.

Varning

Användning av en hemlighet kräver manuell rotation och hantering och rekommenderas inte. Arbetsbelastningsidentitetsfederation är den önskade typen av autentiseringsuppgifter.

Du kan använda den här metoden om alla följande objekt är sanna för ditt scenario:

  • Du är inloggad som ägare till Azure Pipelines-organisationen och Azure-prenumerationen.
  • Du behöver inte ytterligare begränsa behörigheter för Azure-resurser som användarna får åtkomst till via tjänstanslutningen.
  • Du ansluter inte till Azure Stack - eller Azure US Government-miljöerna .
  • Du ansluter inte från Azure DevOps Server 2019 eller tidigare versioner av Team Foundation Server.
  1. I Azure DevOps-projektet går du till Projektinställningar>Tjänstanslutningar.

    Mer information finns i Öppna projektinställningar.

  2. Välj Ny tjänstanslutning och sedan Azure Resource Manager och Nästa.

    Skärmbild som visar valet av Azure Resource Manager.

  3. Välj Appregistrering (automatisk) med hemligheten för autentiseringsuppgifter.

    Skärmbild av val av autentiseringsmetod för autentiseringsmetod för arbetsbelastningsidentitetsfederationsappregistrering (automatisk).

  4. Välj en omfångsnivå. Välj Prenumeration, Hanteringsgrupp eller Machine Learning-arbetsyta. Hanteringsgrupper är containrar som hjälper dig att hantera åtkomst, principer och efterlevnad i flera prenumerationer. En Machine Learning-arbetsyta är en plats där du kan skapa maskininlärningsartefakter.

    • Ange följande parametrar för prenumerationsomfånget :

      Parameter Description
      Abonnemang Obligatoriskt. Välj Azure-prenumerationen.
      Resursgrupp Obligatoriskt. Välj Azure-resursgrupp.
    • För omfånget Hanteringsgrupp väljer du Azure-hanteringsgruppen.

    • Ange följande parametrar för machine learning-arbetsytans omfång:

      Parameter Description
      Abonnemang Obligatoriskt. Välj Azure-prenumerationen.
      Resursgrupp Obligatoriskt. Välj den resursgrupp som innehåller arbetsytan.
      Machine Learning-arbetsyta Obligatoriskt. Välj Azure Machine Learning-arbetsytan.
  5. Ange ett namn på tjänstanslutningen.

  6. Du kan också ange en beskrivning för tjänstanslutningen.

  7. Välj Bevilja åtkomstbehörighet till alla pipelines för att tillåta att alla pipelines använder den här tjänstanslutningen. Om du inte väljer det här alternativet måste du manuellt bevilja åtkomst till varje pipeline som använder den här tjänstanslutningen.

  8. Välj Spara.

När den nya tjänstanslutningen har skapats kopierar du anslutningsnamnet och klistrar in det i koden som värde för azureSubscription.

Skapa en Azure Resource Manager-tjänstanslutning för en befintlig användartilldelad hanterad identitet

Använd det här alternativet om du vill skapa en arbetsbelastningsidentitetsautentiseringsuppgifter automatiskt för en befintlig användartilldelad hanterad identitet. Du måste ha en befintlig användartilldelad hanterad identitet innan du börjar.

  1. I Azure DevOps-projektet går du till Projektinställningar>Tjänstanslutningar.

    Mer information finns i Öppna projektinställningar.

  2. Välj Ny tjänstanslutning och sedan Azure Resource Manager och Nästa.

    Skärmbild som visar valet av Azure Resource Manager.

  3. Välj Hanterad identitet.

    Skärmbild som visar hur du väljer Azure Resource Manager-val av hanterad identitet med användartilldelad identitet.

  4. I steg 1: Hanterad identitetsinformation:

    1. Välj Prenumeration för hanterad identitet. Det här är Azure-prenumerationen som innehåller din hanterade identitet.
    2. Välj Resursgrupp för Hanterad identitet. Det här är resursgruppen som innehåller din hanterade identitet.
    3. Välj Hanterad identitet. Det här är den hanterade identiteten i resursgruppen som du ska använda för att komma åt resurser.
  5. I steg 2: Azure-omfång:

    1. Välj omfångsnivå. Välj Prenumeration, Hanteringsgrupp eller Machine Learning-arbetsyta. Hanteringsgrupper är containrar som hjälper dig att hantera åtkomst, principer och efterlevnad i flera prenumerationer. En Machine Learning-arbetsyta är en plats där du kan skapa maskininlärningsartefakter.

      • Ange följande parametrar för prenumerationsomfånget :

        Parameter Description
        Prenumeration för tjänstanslutning Obligatoriskt. Välj det Azure-prenumerationsnamn som din hanterade identitet ska komma åt.
        Resursgrupp för tjänstanslutning Valfritt. Ange för att begränsa åtkomsten till hanterad identitet till en resursgrupp.
      • Ange följande parametrar för hanteringsgruppens omfång:

        Parameter Description
        Hanteringsgrupp Obligatoriskt. Välj Azure-hanteringsgruppen.
      • Ange följande parametrar för machine learning-arbetsytans omfång:

        Parameter Description
        Abonnemang Obligatoriskt. Välj namnet på Azure-prenumerationen.
        Resursgrupp för tjänstanslutning Valfritt. Välj den resursgrupp som innehåller arbetsytan.
        ML-arbetsyta Obligatoriskt. Ange namnet på den befintliga Azure Machine Learning-arbetsytan.
    2. I avsnittet Steg 3: Information om tjänstanslutning: anger eller väljer du följande parametrar:

      Parameter Description
      Namn på tjänstanslutning Obligatoriskt. Namnet som du använder för att referera till den här tjänstanslutningen i aktivitetsegenskaper. Inte namnet på din Azure-prenumeration.
      Referens för tjänsthantering Valfritt. Kontextinformation från en ITSM-databas.
      Beskrivning Valfritt. Ange en beskrivning av tjänstanslutningen.
    3. I avsnittet Säkerhet väljer du Bevilja åtkomstbehörighet till alla pipelines för att tillåta att alla pipelines använder den här tjänstanslutningen. Om du inte väljer det här alternativet måste du manuellt bevilja åtkomst till varje pipeline som använder den här tjänstanslutningen.

    4. Välj Spara för att verifiera och skapa tjänstanslutningen.

Konvertera en befintlig Azure Resource Manager-tjänstanslutning för att använda arbetsbelastningsidentitetsfederation

Du kan snabbt konvertera en befintlig Azure Resource Manager-tjänstanslutning för att använda arbetsbelastningsidentitetsfederation för autentisering i stället för en hemlighet. Du kan använda konverteringsverktyget för tjänstanslutning i Azure DevOps om tjänstanslutningen uppfyller följande krav:

  • Azure DevOps skapade ursprungligen tjänstanslutningen. Om du skapar tjänstanslutningen manuellt kan du inte konvertera tjänstanslutningen med hjälp av konverteringsverktyget för tjänstanslutning eftersom Azure DevOps inte har behörighet att ändra sina egna autentiseringsuppgifter.
  • Endast ett projekt använder tjänstanslutningen. Du kan inte konvertera anslutningar mellan projektservice.

Så här konverterar du en tjänstanslutning:

  1. I Azure DevOps-projektet går du till Projektinställningar>Tjänstanslutningar.

    Mer information finns i Öppna projektinställningar.

  2. Välj den tjänstanslutning som du vill konvertera för att använda arbetsbelastningsidentitet.

  3. Välj Konvertera.

    Skärmbild som visar hur du väljer konvertera för federerade autentiseringsuppgifter.

    Om du har en befintlig autentiseringsuppgift med en hemlighet som har upphört att gälla ser du ett annat alternativ för att konvertera.

    Skärmbild som visar alternativet att konvertera för att använda federerade autentiseringsuppgifter när du har ett utgånget certifikat.

  4. Välj Konvertera igen för att bekräfta att du vill skapa en ny tjänstanslutning.

    Konverteringen kan ta några minuter. Om du vill återställa anslutningen måste du återställa den inom sju dagar.

Konvertera flera Azure Resource Manager-tjänstanslutningar med ett skript

Använd ett skript för att uppdatera flera tjänstanslutningar samtidigt för att nu använda arbetsbelastningsidentitetsfederation för autentisering.

Det här PowerShell-skriptexemplet kräver två parametrar: Azure DevOps-organisation (exempel: https://dev.azure.com/fabrikam-tailspin) och Azure DevOps-projekt (exempel: Space game web agent). Skriptet hämtar sedan de associerade tjänstanslutningarna för ditt Azure DevOps-projekt och din organisation.

När du konverterar tjänstanslutningar till att använda arbetsbelastningsidentitetsfederation uppmanas du att bekräfta uppdateringen för varje anslutning som inte redan använder den. När bekräftelsen har bekräftats uppdaterar skriptet dessa tjänstanslutningar via Azure DevOps REST API för att använda arbetsbelastningsidentitetsfederation.

Skriptet kräver Att PowerShell 7.3 eller senare och Azure CLI körs. Spara skriptet i en .ps1 fil och kör det med PowerShell 7.

#!/usr/bin/env pwsh
<# 
.SYNOPSIS 
    Convert multiple Azure Resource Manager service connection(s) to use Workload identity federation

.LINK
    https://aka.ms/azdo-rm-workload-identity-conversion

.EXAMPLE
    ./convert_azurerm_service_connection_to_oidc_simple.ps1 -Project <project> -OrganizationUrl https://dev.azure.com/<organization>
#> 

#Requires -Version 7.3

param ( 
    [parameter(Mandatory=$true,HelpMessage="Name of the Azure DevOps Project")]
    [string]
    [ValidateNotNullOrEmpty()]
    $Project,

    [parameter(Mandatory=$true,HelpMessage="Url of the Azure DevOps Organization")]
    [uri]
    [ValidateNotNullOrEmpty()]
    $OrganizationUrl
) 
$apiVersion = "7.1"
$PSNativeCommandArgumentPassing = "Standard" 

#-----------------------------------------------------------
# Log in to Azure
$azdoResource = "499b84ac-1321-427f-aa17-267ca6975798" # application id of Azure DevOps 
az login --allow-no-subscriptions --scope ${azdoResource}/.default
$OrganizationUrl = $OrganizationUrl.ToString().Trim('/')

#-----------------------------------------------------------
# Retrieve the service connection
$getApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints?authSchemes=ServicePrincipal&type=azurerm&includeFailed=false&includeDetails=true&api-version=${apiVersion}"
az rest --resource $azdoResource -u "${getApiUrl} " -m GET --query "sort_by(value[?authorization.scheme=='ServicePrincipal' && data.creationMode=='Automatic' && !(isShared && serviceEndpointProjectReferences[0].projectReference.name!='${Project}')],&name)" -o json `
        | Tee-Object -Variable rawResponse | ConvertFrom-Json | Tee-Object -Variable serviceEndpoints | Format-List | Out-String | Write-Debug
if (!$serviceEndpoints -or ($serviceEndpoints.count-eq 0)) {
    Write-Warning "No convertible service connections found"
    exit 1
}

foreach ($serviceEndpoint in $serviceEndpoints) {
    # Prompt user to confirm conversion
    $choices = @(
        [System.Management.Automation.Host.ChoiceDescription]::new("&Convert", "Converting service connection '$($serviceEndpoint.name)'...")
        [System.Management.Automation.Host.ChoiceDescription]::new("&Skip", "Skipping service connection '$($serviceEndpoint.name)'...")
        [System.Management.Automation.Host.ChoiceDescription]::new("&Exit", "Exit script")
    )
    $prompt = $serviceEndpoint.isShared ? "Convert shared service connection '$($serviceEndpoint.name)'?" : "Convert service connection '$($serviceEndpoint.name)'?"
    $decision = $Host.UI.PromptForChoice([string]::Empty, $prompt, $choices, $serviceEndpoint.isShared ? 1 : 0)

    if ($decision -eq 0) {

        Write-Host "$($choices[$decision].HelpMessage)"
    } elseif ($decision -eq 1) {
        Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
        continue 
    } elseif ($decision -ge 2) {
        Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
        exit 
    }

    # Prepare request body
    $serviceEndpoint.authorization.scheme = "WorkloadIdentityFederation"
    $serviceEndpoint.data.PSObject.Properties.Remove('revertSchemeDeadline')
    $serviceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
    $serviceEndpoint | ConvertTo-Json -Depth 4 -Compress | Set-Variable serviceEndpointRequest
    $putApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints/$($serviceEndpoint.id)?operation=ConvertAuthenticationScheme&api-version=${apiVersion}"
    # Convert service connection
    az rest -u "${putApiUrl} " -m PUT -b $serviceEndpointRequest --headers content-type=application/json --resource $azdoResource -o json `
            | ConvertFrom-Json | Set-Variable updatedServiceEndpoint

    $updatedServiceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
    if (!$updatedServiceEndpoint) {
        Write-Debug "Empty response"
        Write-Error "Failed to convert service connection '$($serviceEndpoint.name)'"
        exit 1
    }
    Write-Host "Successfully converted service connection '$($serviceEndpoint.name)'"
}

Återställa en befintlig Azure Resource Manager-tjänstanslutning som använder en hemlighet

Du kan återställa en konverterad automatisk tjänstanslutning med dess hemlighet i sju dagar. Efter sju dagar skapar du en ny hemlighet manuellt.

Om du skapar och konverterar tjänstanslutningen manuellt kan du inte återställa tjänstanslutningen med hjälp av konverteringsverktyget för tjänstanslutning eftersom Azure DevOps inte har behörighet att ändra sina egna autentiseringsuppgifter.

Så här återställer du en tjänstanslutning:

  1. I Azure DevOps-projektet går du till Pipelines>Service-anslutningar.

  2. Välj en befintlig tjänstanslutning som ska återställas.

  3. Välj Återställ konvertering till det ursprungliga schemat.

    Skärmbild som visar hur du väljer återställ för en federerad autentiseringsuppgift.

  4. Välj Återställ igen för att bekräfta ditt val.

Skapa en Azure Resource Manager-tjänstanslutning som använder ett befintligt huvudnamn för tjänsten

Om du vill använda en fördefinierad uppsättning åtkomstbehörigheter och du inte redan har definierat ett huvudnamn för tjänsten för det här ändamålet följer du någon av dessa självstudier för att skapa ett nytt huvudnamn för tjänsten:

Så här skapar du en tjänstanslutning som använder ett befintligt huvudnamn för tjänsten:

  1. I Azure DevOps-projektet går du till Projektinställningar>Tjänstanslutningar.

    Mer information finns i Öppna projektinställningar.

  2. Välj Ny tjänstanslutning och sedan Azure Resource Manager och Nästa.

    Skärmbild som visar valet av Azure Resource Manager.

  3. Välj Tjänstens huvudnamn (manuell) och Nästa.

    Skärmbild som visar val av autentiseringsmetod för tjänstens huvudnamn (manuell).

  4. I dialogrutan Ny Azure-tjänstanslutning väljer du Miljö. Om du väljer Azure Stack anger du miljö-URL:en, som liknar https://management.local.azurestack.external.

  5. Välj omfångsnivå. Välj Prenumeration eller hanteringsgrupp. Hanteringsgrupper är containrar som hjälper dig att hantera åtkomst, principer och efterlevnad i flera prenumerationer.

    • Ange följande parametrar för prenumerationsomfånget :

      Parameter Description
      Prenumerations-ID Obligatoriskt. Ange Azure-prenumerations-ID:t.
      Prenumerationsnamn Obligatoriskt. Ange namnet på Azure-prenumerationen.
    • Ange följande parametrar för hanteringsgruppens omfång:

      Parameter Description
      Hanteringsgrupps-ID Obligatoriskt. Ange Azure-hanteringsgruppens ID.
      Namn på hanteringsgrupp Obligatoriskt. Ange namnet på Azure-hanteringsgruppen.
  6. I avsnittet Autentisering anger eller väljer du följande parametrar:

    Parameter Description
    Tjänstens huvudnamn-ID Obligatoriskt. Ange tjänstens huvudnamns-ID.
    Referens Välj Nyckel eller certifikat för tjänstens huvudnamn. Om du har valt Tjänstens huvudnyckel anger du nyckeln (lösenordet). Om du har valt Certifikat anger du certifikatet.
    Klientorganisations-ID Obligatoriskt. Ange innehavar-ID:t.
    Verifiera Välj för att verifiera de inställningar som du har angett.
  7. I avsnittet Information anger du följande parametrar:

    Parameter Description
    Anslutningsnamn Obligatoriskt. Namnet som du använder för att referera till den här tjänstanslutningen i aktivitetsegenskaper. Inte namnet på din Azure-prenumeration.
    Beskrivning Valfritt. Ange en beskrivning av tjänstanslutningen.
    Säkerhet Välj Bevilja åtkomstbehörighet till alla pipelines för att tillåta att alla pipelines använder den här tjänstanslutningen. Om du inte väljer det här alternativet måste du manuellt bevilja åtkomst till varje pipeline som använder den här tjänstanslutningen.
  8. Välj Verifiera och spara för att verifiera och skapa tjänstanslutningen.

  1. I Azure DevOps-projektet går du till Projektinställningar>Tjänstanslutningar.

    Mer information finns i Öppna projektinställningar.

  2. Välj Ny tjänstanslutning och sedan Azure Resource Manager.

    Skärmbild som visar valet av Azure Resource Manager.

  3. I dialogrutan Lägg till en Azure Resource Manager-tjänstanslutning fyller du i fälten på följande sätt:

    Skärmbild av Lägg till en Azure Resource Manager-tjänstanslutning.

    1. Ange anslutningsnamnet.

    2. Välj Miljö. Om du väljer Azure Stack anger du miljö-URL:en, som liknar https://management.local.azurestack.external.

    3. Välj omfångsnivå, **prenumeration eller hanteringsgrupp. Hanteringsgrupper är containrar som hjälper dig att hantera åtkomst, principer och efterlevnad i flera prenumerationer.

      • Ange följande parametrar för prenumerationsomfånget :

        Parameter Description
        Prenumerations-ID Obligatoriskt. Ange Azure-prenumerations-ID:t.
        Prenumerationsnamn Obligatoriskt. Ange namnet på Azure-prenumerationen.
      • Ange följande parametrar för hanteringsgruppens omfång:

        Parameter Description
        Hanteringsgrupps-ID Obligatoriskt. Ange Azure-hanteringsgruppens ID.
        Namn på hanteringsgrupp Obligatoriskt. Ange namnet på Azure-hanteringsgruppen.
    4. Ange tjänstens huvudnamns-ID.

    5. Välj typ av autentiseringsuppgifter:

      • Tjänstens huvudnyckel: Ange nyckeln för tjänstens huvudnamn (lösenord).
      • Certifikat: Ange innehållet i .perm-filen , inklusive både certifikat- och privata nyckelavsnitt.
    6. Ange klientorganisations-ID :t.

    7. Välj Verifiera anslutning för att verifiera tjänstanslutningen.

    8. Du kan också välja Tillåt att alla pipelines använder den här anslutningen. Om du inte väljer det här alternativet måste du manuellt bevilja åtkomst till varje pipeline som använder den här tjänstanslutningen.

    9. Välj Spara för att skapa tjänstanslutningen.

När den nya tjänstanslutningen har skapats:

  • Om du använder tjänstanslutningen i användargränssnittet väljer du det anslutningsnamn som du tilldelade i azure-prenumerationsinställningen för din pipeline.
  • Om du använder tjänstanslutningen i en YAML-fil kopierar du anslutningsnamnet och klistrar in det i koden som värde för azureSubscription.

Om det behövs ändrar du tjänstens huvudnamn för att exponera lämpliga behörigheter.

Mer information om autentisering med hjälp av tjänstens huvudnamn finns i Använda rollbaserad åtkomstkontroll för att hantera åtkomst till dina Azure-prenumerationsresurser eller blogginlägget Automatisera en Distribution av azure-resursgrupper med hjälp av tjänstens huvudnamn i Visual Studio.

Mer information finns i Felsöka Azure Resource Manager-tjänstanslutningar.

Hjälp och support