Verbinding maken naar Azure met behulp van een Azure Resource Manager-serviceverbinding

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

U kunt een Azure Resource Manager-serviceverbinding gebruiken om verbinding te maken met Azure-resources via verificatie van de service-principal of via een door Azure beheerde service-identiteit. Als u een Resource Manager-serviceverbinding gebruikt, kunt u een pijplijn gebruiken om te implementeren in een Azure-resource, zoals een Azure-app Service-app, zonder dat u deze telkens hoeft te verifiëren.

U hebt meerdere opties om verbinding te maken met Azure met behulp van Azure Resource Manager-serviceverbindingen:

  • Service-principal of beheerde identiteit met federatie van workloadidentiteit
  • Service-principal met geheim
  • Door de agent toegewezen beheerde identiteit

Zie Serviceverbindingen voor builds en releases voor meer informatie over het maken en gebruiken van verbindingen voor meer informatie over het maken en gebruiken van verbindingen.

Een Azure Resource Manager-serviceverbinding maken die gebruikmaakt van federatie van workloadidentiteit

Federatie van workloadidentiteit maakt gebruik van OpenID Verbinding maken (OIDC) om te verifiëren met door Microsoft Entra beveiligde resources zonder geheimen te gebruiken.

U wordt aangeraden deze methode te gebruiken als alle volgende items waar zijn voor uw scenario:

  • U hebt de rol Eigenaar voor uw Azure-abonnement.
  • U maakt geen verbinding met Azure Stack of met een Azure Government Cloud.
  • Alle Marketplace-uitbreidingstaken die u gebruikt, worden bijgewerkt ter ondersteuning van federatie van workloadidentiteiten.

Een nieuwe federatieve serviceverbinding voor workloadidentiteit maken

  1. Ga in het Azure DevOps-project naar Project settings>Service-verbindingen.

    Zie Projectinstellingen openen voor meer informatie.

  2. Selecteer Nieuwe serviceverbinding en selecteer vervolgens Azure Resource Manager.

    Schermopname van het kiezen van een verbindingstype voor de identiteitsservice voor workloads.

  3. Selecteer Workloadidentiteitsfederatie (automatisch).

    Schermopname van het selecteren van een verbindingstype voor de identiteitsservice van een workload.

  4. Geef de volgende parameters op:

    Parameter Description
    Abonnement Selecteer een bestaand Azure-abonnement. Zie Problemen met Azure Resource Manager-serviceverbindingen oplossen als er geen Azure-abonnementen of -exemplaren worden weergegeven.
    Resourcegroep Laat leeg om gebruikers toegang te geven tot alle resources die zijn gedefinieerd in het abonnement. Als u de gebruikerstoegang tot resources wilt beperken, voert u de naam van een resourcegroep in. Gebruikers hebben vervolgens alleen toegang tot de resources die zijn gedefinieerd voor die resourcegroep.
    Serviceverbindingsnaam Vereist. De naam die u gebruikt om te verwijzen naar deze serviceverbinding in taakeigenschappen. Niet de naam van uw Azure-abonnement.
  5. Nadat de nieuwe serviceverbinding is gemaakt, kopieert u de naam van de verbinding en plakt u deze in uw code als waarde voor azureSubscription.

  6. Als u wilt implementeren naar een specifieke Azure-resource, heeft de taak meer gegevens over die resource nodig. Ga naar de resource in Azure Portal en kopieer de gegevens vervolgens naar uw code. Als u bijvoorbeeld een web-app wilt implementeren, kopieert u de naam van de Azure-app Service-app en plakt u deze in uw code als waarde voorWebAppName.

Een bestaande Azure Resource Manager-serviceverbinding converteren om gebruik te maken van federatie van workloadidentiteit

U kunt snel een bestaande Azure Resource Manager-serviceverbinding converteren om federatie van workloadidentiteit te gebruiken voor verificatie in plaats van een service-principal. U kunt het hulpprogramma voor serviceverbindingsconversie in Azure DevOps gebruiken als uw serviceverbinding aan deze vereisten voldoet:

  • Azure DevOps heeft oorspronkelijk de serviceverbinding gemaakt. Als u uw serviceverbinding handmatig maakt, kunt u de serviceverbinding niet converteren met behulp van het hulpprogramma voor serviceverbindingsconversie omdat Azure DevOps geen machtigingen heeft om zijn eigen referenties te wijzigen.
  • Slechts één project maakt gebruik van de serviceverbinding. U kunt geen cross-projectservice-verbindingen converteren.

Een serviceverbinding converteren:

  1. Ga in het Azure DevOps-project naar Project settings>Service-verbindingen.

    Zie Projectinstellingen openen voor meer informatie.

  2. Selecteer de serviceverbinding die u wilt converteren om de workloadidentiteit te gebruiken.

  3. Selecteer Converteren.

    Schermopname van het selecteren van converteren voor federatieve referenties.

    Als u een bestaande service-principalreferentie hebt met een verlopen geheim, ziet u een andere optie om te converteren.

    Schermopname van de optie voor converteren om federatieve referenties te gebruiken wanneer u een verlopen certificaat hebt.

  4. Selecteer Opnieuw converteren om te bevestigen dat u een nieuwe serviceverbinding wilt maken.

    De conversie kan enkele minuten duren. Als u de verbinding wilt herstellen, moet u deze binnen zeven dagen terugzetten.

Meerdere Azure Resource Manager-serviceverbindingen converteren met een script

Gebruik een script om meerdere serviceverbindingen tegelijk bij te werken om nu workloadidentiteitsfederatie te gebruiken voor verificatie.

Voor dit PowerShell-voorbeeldscript zijn twee parameters vereist: Azure DevOps-organisatie (voorbeeld: https://dev.azure.com/fabrikam-tailspin) en Azure DevOps-project (voorbeeld: Space game web agent). Met het script worden vervolgens de bijbehorende serviceverbindingen opgehaald voor uw Azure DevOps-project en -organisatie. U wordt gevraagd te bevestigen dat u elke gekoppelde serviceverbinding wilt converteren die geen federatie van workloadidentiteit gebruikt. Als u dit bevestigt, gebruikt het script de Azure DevOps REST API om elke serviceverbinding bij te werken om nu gebruik te maken van federatie van workloadidentiteiten. Voor het script is PowerShell 7.3 of hoger vereist en Azure CLI moet worden uitgevoerd. Sla het script op in een PS1-bestand en voer het uit met 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)'"
}

Een bestaande Azure Resource Manager-serviceverbinding herstellen die gebruikmaakt van een service-principalgeheim

U kunt een geconverteerde automatische serviceverbinding met het bijbehorende geheim gedurende zeven dagen terugzetten. Maak na zeven dagen handmatig een nieuw geheim.

Als u uw serviceverbinding handmatig maakt en converteert, kunt u de serviceverbinding niet herstellen met behulp van het hulpprogramma voor serviceverbindingsconversie omdat Azure DevOps geen machtigingen heeft om zijn eigen referenties te wijzigen.

Ga als volgt te werk om een serviceverbinding te herstellen:

  1. Ga in het Azure DevOps-project naar Pipelines>Service-verbindingen.

  2. Selecteer een bestaande serviceverbinding om terug te keren.

  3. Selecteer Conversie herstellen naar het oorspronkelijke schema.

    Schermopname van het selecteren van terugkeren voor een federatieve referentie.

  4. Selecteer Opnieuw instellen om uw keuze te bevestigen.

Een Azure Resource Manager-serviceverbinding maken die gebruikmaakt van een service-principalgeheim

U wordt aangeraden deze methode te gebruiken als alle volgende items waar zijn voor uw scenario:

  • U bent aangemeld als de eigenaar van de Azure Pipelines-organisatie en het Azure-abonnement.
  • U hoeft geen machtigingen verder te beperken voor Azure-resources waartoe gebruikers toegang hebben via de serviceverbinding.
  • U maakt geen verbinding met Azure Stack of met een Azure Government Cloud.
  • U maakt geen verbinding vanuit Azure DevOps Server 2019 of eerdere versies van Team Foundation Server.

De serviceverbinding maken:

  1. Ga in het Azure DevOps-project naar Project settings>Service-verbindingen.

    Selecteer in Team Foundation Server het pictogram Instellingen in de bovenste menubalk om naar de pagina Services te gaan.

    Zie Projectinstellingen openen voor meer informatie.

  2. Selecteer Nieuwe serviceverbinding en selecteer vervolgens Azure Resource Manager.

    Schermopname van het kiezen van een serviceverbindingstype.

  3. Voer de volgende parameters in of selecteer deze:

    Parameter Description
    Naam verbinding Vereist. De naam die u gebruikt om te verwijzen naar deze serviceverbinding in taakeigenschappen. Niet de naam van uw Azure-abonnement.
    Bereikniveau Selecteer Abonnement of beheergroep. Beheergroepen zijn containers die u helpen bij het beheren van toegang, beleid en naleving voor meerdere abonnementen.
    Abonnement Als u Abonnement voor het bereik selecteert, selecteert u een bestaand Azure-abonnement. Zie Problemen met Azure Resource Manager-serviceverbindingen oplossen als er geen Azure-abonnementen of -exemplaren worden weergegeven.
    Beheergroep Als u Beheergroep voor het bereik selecteert, selecteert u een bestaande Azure-beheergroep. Zie Beheergroepen maken voor meer informatie.
    Resourcegroep Laat leeg om gebruikers toegang te geven tot alle resources die zijn gedefinieerd in het abonnement. Als u de gebruikerstoegang tot resources wilt beperken, voert u de naam van een resourcegroep in. Gebruikers hebben vervolgens alleen toegang tot de resources die zijn gedefinieerd voor die resourcegroep.
  4. Nadat de nieuwe serviceverbinding is gemaakt:

    • Als u de klassieke editor gebruikt, selecteert u de verbindingsnaam die u hebt toegewezen in de azure-abonnementsinstelling van uw pijplijn.
    • Als u een YAML-bestand gebruikt, kopieert u de verbindingsnaam in uw code als de waarde voor azureSubscription.
  5. Als u wilt implementeren naar een specifieke Azure-resource, voegt u meer informatie over de resource toe aan de taak:

    • Als u de klassieke editor gebruikt, selecteert u gegevens die u aan de taak wilt toevoegen. Selecteer bijvoorbeeld de App Service-naam.
    • Als u een YAML-bestand gebruikt, gaat u naar de resource in Azure Portal. Kopieer de gegevens die u nodig hebt en plak deze in uw taakcode. Als u bijvoorbeeld een web-app wilt implementeren, kopieert u de naam van de App Service-app en plakt u deze als de waarde voor WebAppName in de YAML-taak.

Notitie

Wanneer u deze aanpak volgt, maakt Azure DevOps verbinding met Microsoft Entra ID en maakt u een app-registratie met een geheim dat drie maanden geldig is. Wanneer de serviceverbinding bijna verloopt, wordt deze prompt weergegeven in Microsoft Entra-id: een certificaat of geheim verloopt binnenkort. Maak een nieuwe. In dit scenario moet u de serviceverbinding vernieuwen.

Als u een serviceverbinding wilt vernieuwen, bewerkt u de verbinding in de Azure DevOps-portal en selecteert u Verifiëren. Nadat u de bewerking hebt opgeslagen, is de serviceverbinding nog drie maanden geldig.

We raden u aan om workloadidentiteitsfederatie te gebruiken in plaats van een geheim te maken. Als u workloadidentiteitsfederatie gebruikt, hoeft u geen geheimen te roteren en behoudt de app-registratie het beoogde doel. Als u workloadidentiteitsfederatie wilt gaan gebruiken, gaat u naar de pagina met serviceverbindingsgegevens en selecteert u Converteren. De serviceverbinding wordt geconverteerd om workloadidentiteitsfederatie te gebruiken in plaats van een geheim. Zie Een bestaande Azure Resource Manager-serviceverbinding converteren om federatie van workloadidentiteit te gebruiken voor meer informatie.

Zie Problemen met een Azure Resource Manager-serviceverbinding oplossen voor meer informatie.

Als u problemen ondervindt met het gebruik van deze methode (zoals geen abonnementen die worden weergegeven in de vervolgkeuzelijst) of als u gebruikersmachtigingen verder wilt beperken, kunt u in plaats daarvan een service-principal of een virtuele machine met een beheerde service-id gebruiken.

Een Azure Resource Manager-serviceverbinding maken die gebruikmaakt van een bestaande service-principal

  1. Als u een vooraf gedefinieerde set toegangsmachtigingen wilt gebruiken en u nog geen service-principal hebt gedefinieerd voor dit doel, volgt u een van deze zelfstudies om een nieuwe service-principal te maken:

  2. Ga in het Azure DevOps-project naar Project settings>Service-verbindingen.

    Selecteer in Team Foundation Server het pictogram Instellingen in de bovenste menubalk om naar de pagina Services te gaan.

    Zie Projectinstellingen openen voor meer informatie.

  3. Selecteer Nieuwe serviceverbinding en selecteer vervolgens Azure Resource Manager.

    Schermopname van het kiezen van een serviceverbindingstype.

  4. Selecteer de optie Service-principal (handmatig) en voer vervolgens de details van de service-principal in.

    Schermopname van het openen van de volledige versie van het servicedialoogvenster.

  5. Voer voor Verbinding maken ionnaam een weergavenaam in die u wilt gebruiken om naar deze serviceverbinding te verwijzen.

  6. Selecteer voor Omgeving de naam van de omgeving (Azure Cloud, Azure Stack of Azure Government Cloud).

  7. Als u Azure Cloud niet selecteert, voert u de URL van de omgeving in. Voor Azure Stack is de omgevings-URL ongeveer als https://management.local.azurestack.externalvolgt.

  8. Selecteer voor bereikniveau het bereik voor de verbinding:

    • Als u Abonnement selecteert, selecteert u een bestaand Azure-abonnement. Zie Problemen met Azure Resource Manager-serviceverbindingen oplossen als er geen Azure-abonnementen of -exemplaren worden weergegeven.
    • Als u Beheergroep selecteert, selecteert u een bestaande Azure-beheergroep. Zie Beheergroepen maken voor meer informatie.
  9. Voer in het dialoogvenster Azure-abonnement de volgende informatie over uw service-principal in:

    • Abonnements-id
    • Abonnementsnaam
    • Service-principal-id
    • De clientsleutel van de service-principal of, als u Certificaat hebt geselecteerd, voert u de inhoud van zowel het certificaat als de persoonlijke sleutelsecties van het bestand *.pem in.
    • Tenant-id

    U kunt deze informatie ophalen door een Azure PowerShell-script te downloaden en uit te voeren. Wanneer u hierom wordt gevraagd, voert u uw abonnementsnaam, wachtwoord, rol (optioneel) en het type cloud in, zoals Azure Cloud (de standaardinstelling), Azure Stack of een Azure Government Cloud.

  10. Selecteer Verbinding verifiëren om de instellingen te valideren die u hebt ingevoerd.

  11. Nadat de nieuwe serviceverbinding is gemaakt:

    • Als u de serviceverbinding in de gebruikersinterface gebruikt, selecteert u de verbindingsnaam die u hebt toegewezen in de Azure-abonnementsinstelling van uw pijplijn.
    • Als u de serviceverbinding in een YAML-bestand gebruikt, kopieert u de naam van de verbinding en plakt u deze in uw code als de waarde voor azureSubscription.
  12. Wijzig zo nodig de service-principal om de juiste machtigingen beschikbaar te maken.

    Zie Op rollen gebaseerd toegangsbeheer gebruiken om de toegang tot uw Azure-abonnementsresources te beheren of het blogbericht Een implementatie van een Azure-resourcegroep automatiseren met behulp van een service-principal in Visual Studio voor meer informatie over verificatie met behulp van een service-principal.

Zie Problemen met azure Resource Manager-serviceverbindingen oplossen voor meer informatie.

Een Azure Resource Manager-serviceverbinding maken met een VIRTUELE machine die gebruikmaakt van een beheerde service-identiteit

Notitie

Als u een beheerde service-identiteit wilt gebruiken om te verifiëren, moet u een zelf-hostende agent gebruiken op een virtuele Azure-machine (VM).

U kunt azure VM-agents configureren voor het gebruik van een Azure Managed Service Identity in Microsoft Entra-id. In dit scenario gebruikt u de door het systeem toegewezen identiteit (service-principal) om de azure-VM-agents toegang te verlenen tot elke Azure-resource die ondersteuning biedt voor Microsoft Entra-id, zoals een exemplaar van Azure Key Vault, in plaats van referenties in Azure DevOps te behouden voor de verbinding.

  1. Ga in het Azure DevOps-project naar Project settings>Service-verbindingen.

    Selecteer in Team Foundation Server het pictogram Instellingen in de bovenste menubalk om naar de pagina Services te gaan.

    Zie Projectinstellingen openen voor meer informatie.

  2. Selecteer Nieuwe serviceverbinding en selecteer vervolgens Azure Resource Manager.

    Schermopname van het kiezen van een serviceverbindingstype.

  3. Selecteer de optie Verificatie van beheerde identiteit.

    Schermopname van het gaan naar de instellingen voor beheerde service-identiteiten.

  4. Voer voor Verbinding maken naam een weergavenaam in die u wilt gebruiken wanneer u naar deze serviceverbinding verwijst.

  5. Selecteer voor Omgeving de naam van de omgeving (Azure Cloud, Azure Stack of Azure Government Cloud).

  6. Voer in het dialoogvenster Verbindingen de volgende waarden uit uw abonnement in:

    • Abonnements-id
    • Abonnementsnaam
    • Tenant-id
  7. Nadat de nieuwe serviceverbinding is gemaakt:

    • Als u de serviceverbinding in de gebruikersinterface gebruikt, selecteert u de verbindingsnaam die u hebt toegewezen in de Azure-abonnementsinstelling van uw pijplijn.
    • Als u de serviceverbinding in een YAML-bestand gebruikt, kopieert u de naam van de verbinding naar uw code als de waarde voor azureSubscription.
  8. Zorg ervoor dat de VM (agent) de juiste machtigingen heeft.

    Als uw code bijvoorbeeld Azure Resource Manager moet aanroepen, wijst u de juiste rol toe aan de VIRTUELE machine met behulp van op rollen gebaseerd toegangsbeheer (RBAC) in Microsoft Entra-id.

    Zie Hoe kan ik beheerde identiteiten gebruiken voor Azure-resources? en op rollen gebaseerd toegangsbeheer gebruiken om de toegang tot uw Azure-abonnementsresources te beheren.

Zie Problemen met azure Resource Manager-serviceverbindingen oplossen voor meer informatie over het proces.

Verbinding maken naar een Azure Government-cloud

Zie Verbinding maken van Azure Pipelines (Azure Government Cloud) voor informatie over het maken van verbinding met een Azure Government-cloud.

Verbinding maken met Azure Stack

Zie de volgende artikelen voor meer informatie over het maken van verbinding met Azure Stack:

Help en ondersteuning