Anslut till Azure med hjälp av en Azure Resource Manager-tjänstanslutning

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

Du kan använda en Azure Resource Manager-tjänstanslutning för att ansluta till Azure-resurser via autentisering med tjänstens huvudnamn eller via en Azure-hanterad tjänstidentitet. Om du använder en Resource Manager-tjänstanslutning kan du använda en pipeline för att distribuera till en Azure-resurs som en Azure App Service-app utan att autentisera varje gång.

Du har flera alternativ för att ansluta till Azure med hjälp av Azure Resource Manager-tjänstanslutningar:

  • Tjänstens huvudnamn eller hanterade identitet med arbetsbelastningsidentitetsfederation
  • Tjänstens huvudnamn med hemlighet
  • Agenttilldelad hanterad identitet

Mer information om andra typer av anslutningar och allmän information om hur du skapar och använder anslutningar finns i Tjänstanslutningar för byggen och versioner.

Skapa en Azure Resource Manager-tjänstanslutning som använder arbetsbelastningsidentitetsfederation

Arbetsbelastningsidentitetsfederation använder OpenID Anslut (OIDC) för att autentisera med Microsoft Entra-skyddade resurser utan att använda hemligheter.

Vi rekommenderar att du använder 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 till ett Azure Government-moln.
  • Alla Marketplace-tilläggsuppgifter som du använder uppdateras för att stödja arbetsbelastningsidentitetsfederation.

Skapa en ny arbetsbelastningsidentitetsfederationstjänstanslutning

  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 välj sedan Azure Resource Manager.

    Skärmbild som visar hur du väljer en anslutningstyp för arbetsbelastningsidentitetstjänsten.

  3. Välj Arbetsbelastningsidentitetsfederation (automatisk).

    Skärmbild som visar hur du väljer en anslutningstyp för arbetsbelastningsidentitetstjänsten.

  4. Ange följande parametrar:

    Parameter Description
    Prenumeration Välj en befintlig Azure-prenumeration. Om inga Azure-prenumerationer eller instanser visas kan du läsa Felsöka Azure Resource Manager-tjänstanslutningar.
    Resursgrupp Lämna tomt för att tillåta användare att komma åt alla resurser som har definierats i prenumerationen. Om du vill begränsa användarens åtkomst till resurser anger du ett resursgruppsnamn. Användarna kan sedan bara komma åt de resurser som har definierats för den resursgruppen.
    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.
  5. När den nya tjänstanslutningen har skapats kopierar du anslutningsnamnet och klistrar in det i koden som värde för azureSubscription.

  6. För att distribuera till en specifik Azure-resurs behöver aktiviteten mer data om den resursen. Gå till resursen i Azure-portalen och kopiera sedan data till koden. Om du till exempel vill distribuera en webbapp kopierar du namnet på Azure App Service-appen och klistrar in den i koden som värde för WebAppName.

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 tjänstens huvudnamn. 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 för tjänstens huvudnamn med en hemlighet som har upphört att gälla visas ett annat alternativ för konvertering.

    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. Du uppmanas att bekräfta att du vill konvertera varje associerad tjänstanslutning som inte använder arbetsbelastningsidentitetsfederation. Om du bekräftar använder skriptet Azure DevOps REST API för att uppdatera varje tjänstanslutning till att nu 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 för tjänstens huvudnamn

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 en hemlighet för tjänstens huvudnamn

Vi rekommenderar att du använder 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 till ett Azure Government-moln.
  • Du ansluter inte från Azure DevOps Server 2019 eller tidigare versioner av Team Foundation Server.

Så här skapar du tjänstanslutningen:

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

    I Team Foundation Server väljer du ikonen Inställningar i den översta menyraden för att gå till sidan Tjänster.

    Mer information finns i Öppna projektinställningar.

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

    Skärmbild som visar hur du väljer en tjänstanslutningstyp.

  3. Ange eller välj 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.
    Omfångsnivå Välj Prenumeration eller hanteringsgrupp. Hanteringsgrupper är containrar som hjälper dig att hantera åtkomst, principer och efterlevnad i flera prenumerationer.
    Abonnemang Om du väljer Prenumeration för omfånget väljer du en befintlig Azure-prenumeration. Om inga Azure-prenumerationer eller instanser visas kan du läsa Felsöka Azure Resource Manager-tjänstanslutningar.
    Hanteringsgrupp Om du väljer Hanteringsgrupp för omfånget väljer du en befintlig Azure-hanteringsgrupp. Mer information finns i Skapa hanteringsgrupper.
    Resursgrupp Lämna tomt för att tillåta användare att komma åt alla resurser som har definierats i prenumerationen. Om du vill begränsa användarens åtkomst till resurser anger du ett resursgruppsnamn. Användarna kan sedan bara komma åt de resurser som har definierats för den resursgruppen.
  4. När den nya tjänstanslutningen har skapats:

    • Om du använder den klassiska redigeraren väljer du det anslutningsnamn som du tilldelade i azure-prenumerationsinställningen för din pipeline.
    • Om du använder en YAML-fil kopierar du anslutningsnamnet till koden som värde för azureSubscription.
  5. Om du vill distribuera till en specifik Azure-resurs lägger du till mer information om resursen i uppgiften:

    • Om du använder den klassiska redigeraren väljer du data som ska läggas till i uppgiften. Välj till exempel App Service-namnet.
    • Om du använder en YAML-fil går du till resursen i Azure-portalen. Kopiera de data som du behöver och klistra in dem i aktivitetskoden. Om du till exempel vill distribuera en webbapp kopierar du namnet på App Service-appen och klistrar in den som värde för WebAppName i aktiviteten YAML.

Kommentar

När du följer den här metoden ansluter Azure DevOps med Microsoft Entra-ID och skapar en appregistrering med en hemlighet som är giltig i tre månader. När tjänstanslutningen snart upphör att gälla visar Microsoft Entra-ID:t den här uppmaningen: Ett certifikat eller en hemlighet upphör snart att gälla. Skapa en ny. I det här scenariot måste du uppdatera tjänstanslutningen.

Om du vill uppdatera en tjänstanslutning går du till Azure DevOps-portalen, redigerar anslutningen och väljer sedan Verifiera. När du har sparat redigeringen är tjänstanslutningen giltig i ytterligare tre månader.

Vi rekommenderar att du använder arbetsbelastningsidentitetsfederation i stället för att skapa en hemlighet. Om du använder arbetsbelastningsidentitetsfederation behöver du inte rotera hemligheter och appregistreringen bibehåller sitt avsedda syfte. Om du vill börja använda arbetsbelastningsidentitetsfederation går du till sidan för tjänstanslutningsinformation och väljer Konvertera. Tjänstanslutningen konverteras till att använda arbetsbelastningsidentitetsfederation i stället för en hemlighet. Mer information finns i Konvertera en befintlig Azure Resource Manager-tjänstanslutning för att använda arbetsbelastningsidentitetsfederation.

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

Om du har problem med att använda den här metoden (till exempel inga prenumerationer som visas i listrutan) eller om du vill begränsa användarbehörigheterna ytterligare kan du i stället använda tjänstens huvudnamn eller en virtuell dator med en hanterad tjänstidentitet.

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

  1. 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:

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

    I Team Foundation Server väljer du ikonen Inställningar i den översta menyraden för att gå till sidan Tjänster.

    Mer information finns i Öppna projektinställningar.

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

    Skärmbild som visar hur du väljer en tjänstanslutningstyp.

  4. Välj alternativet Tjänstens huvudnamn (manuell) och ange sedan information om tjänstens huvudnamn.

    Skärmbild som visar hur du öppnar den fullständiga versionen av tjänstdialogrutan.

  5. För Anslut ionsnamn anger du ett visningsnamn som ska användas för att referera till den här tjänstanslutningen.

  6. För Miljö väljer du miljönamnet (Azure Cloud, Azure Stack eller Azure Government Cloud).

  7. Om du inte väljer Azure Cloud anger du miljö-URL:en. För Azure Stack är miljö-URL:en ungefär som https://management.local.azurestack.external.

  8. För Omfångsnivå väljer du omfånget för anslutningen:

  9. I dialogrutan Azure-prenumeration anger du följande information om tjänstens huvudnamn:

    • Prenumerations-ID:t
    • Prenumerationsnamn
    • Tjänstens huvudnamn-ID
    • Antingen klientnyckeln för tjänstens huvudnamn eller, om du har valt Certifikat, anger du innehållet i både certifikatet och de privata nyckelavsnitten i filen *.pem .
    • Klientorganisations-ID

    Du kan hämta den här informationen genom att ladda ned och köra ett Azure PowerShell-skript. När du uppmanas anger du ditt prenumerationsnamn, lösenord, roll (valfritt) och typen av moln, till exempel Azure Cloud (standard), Azure Stack eller ett Azure Government Cloud.

  10. Välj Verifiera anslutning för att verifiera de inställningar som du har angett.

  11. 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.
  12. 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.

Skapa en Azure Resource Manager-tjänstanslutning till en virtuell dator som använder en hanterad tjänstidentitet

Kommentar

Om du vill använda en hanterad tjänstidentitet för att autentisera måste du använda en lokalt installerad agent på en virtuell Azure-dator (VM).

Du kan konfigurera Azure VM-baserade agenter att använda en Azure Managed Service-identitet i Microsoft Entra-ID. I det här scenariot använder du den systemtilldelade identiteten (tjänstens huvudnamn) för att ge azure VM-baserade agenter åtkomst till alla Azure-resurser som stöder Microsoft Entra-ID, till exempel en instans av Azure Key Vault, i stället för att spara autentiseringsuppgifter i Azure DevOps för anslutningen.

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

    I Team Foundation Server väljer du ikonen Inställningar i den översta menyraden för att gå till sidan Tjänster.

    Mer information finns i Öppna projektinställningar.

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

    Skärmbild som visar hur du väljer en tjänstanslutningstyp.

  3. Välj alternativet Hanterad identitetsautentisering.

    Skärmbild som visar hur du går till inställningarna för hanterad tjänstidentitet.

  4. För Anslut ionsnamn anger du ett visningsnamn som ska användas när du refererar till den här tjänstanslutningen.

  5. För Miljö väljer du miljönamnet (Azure Cloud, Azure Stack eller Azure Government Cloud).

  6. I dialogrutan Anslutningar anger du följande värden från din prenumeration:

    • Prenumerations-ID:t
    • Prenumerationsnamn
    • Klientorganisations-ID
  7. 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 till koden som värde för azureSubscription.
  8. Kontrollera att den virtuella datorn (agenten) har rätt behörigheter.

    Om koden till exempel behöver anropa Azure Resource Manager tilldelar du den virtuella datorn rätt roll med hjälp av rollbaserad åtkomstkontroll (RBAC) i Microsoft Entra-ID.

    Mer information finns i Hur kan jag använda hanterade identiteter för Azure-resurser? och Använda rollbaserad åtkomstkontroll för att hantera åtkomst till dina Azure-prenumerationsresurser.

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

Anslut till ett Azure Government-moln

Information om hur du ansluter till ett Azure Government-moln finns i Anslut från Azure Pipelines (Azure Government Cloud).

Anslut till Azure Stack

Information om hur du ansluter till Azure Stack finns i följande artiklar:

Hjälp och support