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:
- Appregistrering (automatisk) med en arbetsbelastningsidentitetsfederation eller en hemlighet
- Hanterad identitet som skapar en autentiseringsuppgift för arbetsbelastningsidentitetsfederation och ansluter till en befintlig användartilldelad hanterad identitet. Använd det här alternativet när du inte har behörighet att skapa en appregistrering.
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.
I Azure DevOps-projektet går du till Projektinställningar>Tjänstanslutningar.
Mer information finns i Öppna projektinställningar.
Välj Ny tjänstanslutning och sedan Azure Resource Manager och Nästa.
Välj Appregistrering (automatisk) med identitetsfederationen för autentiseringsuppgifter.
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.
Ange ett namn på tjänstanslutningen.
Du kan också ange en beskrivning för tjänstanslutningen.
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.
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.
I Azure DevOps-projektet går du till Projektinställningar>Tjänstanslutningar.
Mer information finns i Öppna projektinställningar.
Välj Ny tjänstanslutning och sedan Azure Resource Manager och Nästa.
Välj Appregistrering (automatisk) med hemligheten för autentiseringsuppgifter.
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.
Ange ett namn på tjänstanslutningen.
Du kan också ange en beskrivning för tjänstanslutningen.
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.
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.
I Azure DevOps-projektet går du till Projektinställningar>Tjänstanslutningar.
Mer information finns i Öppna projektinställningar.
Välj Ny tjänstanslutning och sedan Azure Resource Manager och Nästa.
Välj Hanterad identitet.
I steg 1: Hanterad identitetsinformation:
- Välj Prenumeration för hanterad identitet. Det här är Azure-prenumerationen som innehåller din hanterade identitet.
- Välj Resursgrupp för Hanterad identitet. Det här är resursgruppen som innehåller din hanterade identitet.
- Välj Hanterad identitet. Det här är den hanterade identiteten i resursgruppen som du ska använda för att komma åt resurser.
I steg 2: Azure-omfång:
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.
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. 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.
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:
I Azure DevOps-projektet går du till Projektinställningar>Tjänstanslutningar.
Mer information finns i Öppna projektinställningar.
Välj den tjänstanslutning som du vill konvertera för att använda arbetsbelastningsidentitet.
Välj Konvertera.
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.
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:
I Azure DevOps-projektet går du till Pipelines>Service-anslutningar.
Välj en befintlig tjänstanslutning som ska återställas.
Välj Återställ konvertering till det ursprungliga schemat.
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:
- Använd portalen för att skapa ett Microsoft Entra-program och ett huvudnamn för tjänsten som kan komma åt resurser
- Använda Azure PowerShell för att skapa ett Huvudnamn för Azure-tjänsten som har ett certifikat
Så här skapar du en tjänstanslutning som använder ett befintligt huvudnamn för tjänsten:
I Azure DevOps-projektet går du till Projektinställningar>Tjänstanslutningar.
Mer information finns i Öppna projektinställningar.
Välj Ny tjänstanslutning och sedan Azure Resource Manager och Nästa.
Välj Tjänstens huvudnamn (manuell) och Nästa.
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
.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.
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. 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. Välj Verifiera och spara för att verifiera och skapa tjänstanslutningen.
I Azure DevOps-projektet går du till Projektinställningar>Tjänstanslutningar.
Mer information finns i Öppna projektinställningar.
Välj Ny tjänstanslutning och sedan Azure Resource Manager.
I dialogrutan Lägg till en Azure Resource Manager-tjänstanslutning fyller du i fälten på följande sätt:
Ange anslutningsnamnet.
Välj Miljö. Om du väljer Azure Stack anger du miljö-URL:en, som liknar
https://management.local.azurestack.external
.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.
Ange tjänstens huvudnamns-ID.
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.
Ange klientorganisations-ID :t.
Välj Verifiera anslutning för att verifiera tjänstanslutningen.
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.
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
- Utforska felsökningstips.
- Få råd om Stack Overflow.
- Publicera dina frågor, sök efter svar eller föreslå en funktion i Azure DevOps Developer Community.
- Få support för Azure DevOps.