Verbinding maken met Azure met een Azure Resource Manager-serviceverbinding
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Met een Azure Resource Manager-serviceverbinding kunt u verbinding maken met Azure-resources, zoals Azure Key Vault vanuit uw pijplijn. Met deze verbinding kunt u een pijplijn gebruiken om te implementeren naar Azure-resources, zoals een Azure-app Service-app, zonder dat u elke keer hoeft te verifiëren.
U hebt meerdere verificatieopties voor het maken van verbinding met Azure met een Azure Resource Manager-serviceverbinding. De aanbevolen opties zijn om workloadidentiteitsfederatie te gebruiken met een app-registratie of beheerde identiteit.
De aanbevolen verbindingsopties voor de Azure Resource Manager-service zijn:
- App-registratie (automatisch) met een workloadidentiteitsfederatie of een geheim
- Beheerde identiteit die een federatiereferentie voor de workloadidentiteit maakt en verbinding maakt met een bestaande door de gebruiker toegewezen beheerde identiteit. Gebruik deze optie als u niet gemachtigd bent om een app-registratie te maken.
Er zijn andere verificatieopties voor azure Resource Manager-serviceverbindingen die niet zijn opgenomen in dit artikel:
Een Azure Resource Manager-app-registratie maken (automatisch)
Wanneer u een Azure Resource Manager-serviceverbinding maakt, kiest u tussen twee verschillende referentietypen: workloadidentiteitsfederatie of een geheim.
Een Azure Resource Manager-app-registratie maken met workloadidentiteitsfederatie (automatisch)
U kunt deze methode gebruiken als alle volgende items waar zijn voor uw scenario:
- U hebt de rol Eigenaar voor het Azure-abonnement.
- U maakt geen verbinding met de Azure Stack of de Azure US Government-omgevingen .
- Alle Marketplace-uitbreidingstaken die u gebruikt, worden bijgewerkt ter ondersteuning van federatie van workloadidentiteiten.
Met deze selectie voert Azure DevOps automatisch een query uit voor het abonnement, de beheergroep of de Machine Learning-werkruimte waarmee u verbinding wilt maken en maakt u een federatie van workloadidentiteit voor verificatie.
Ga in het Azure DevOps-project naar Project settings>Service-verbindingen.
Zie Projectinstellingen openen voor meer informatie.
Selecteer Nieuwe serviceverbinding en selecteer vervolgens Azure Resource Manager en Volgende.
Selecteer App-registratie (automatisch) met de federatie van de referentieworkloadidentiteit.
Selecteer een bereikniveau. Selecteer Abonnement, beheergroep of Machine Learning-werkruimte. Beheergroepen zijn containers die u helpen bij het beheren van toegang, beleid en naleving voor meerdere abonnementen. Een Machine Learning-werkruimte is een plek om machine learning-artefacten te maken.
Voer voor het abonnementsbereik de volgende parameters in:
Parameter Description Abonnement Vereist. Selecteer het Azure-abonnement. Resourcegroep Vereist. Selecteer de Azure-resourcegroep. Selecteer de Azure-beheergroep voor het bereik van de beheergroep.
Voer voor het bereik van de Machine Learning-werkruimte de volgende parameters in:
Parameter Description Abonnement Vereist. Selecteer het Azure-abonnement. Resourcegroep Vereist. Selecteer de resourcegroep met de werkruimte. Machine Learning-werkruimte Vereist. Selecteer de Azure Machine Learning-werkruimte.
Voer een serviceverbindingsnaam in.
Voer desgewenst een beschrijving in voor de serviceverbinding.
Selecteer Toegang verlenen aan alle pijplijnen om toe te staan dat alle pijplijnen deze serviceverbinding gebruiken. Als u deze optie niet selecteert, moet u handmatig toegang verlenen aan elke pijplijn die gebruikmaakt van deze serviceverbinding.
Selecteer Opslaan.
Nadat de nieuwe serviceverbinding is gemaakt, kopieert u de naam van de verbinding en plakt u deze in uw code als waarde voor azureSubscription
.
Een Azure Resource Manager-app-registratie maken met een geheim (automatisch)
Met deze selectie voert Azure DevOps automatisch query's uit voor het abonnement, de beheergroep of de Machine Learning-werkruimte waarmee u verbinding wilt maken en maakt u een geheim voor verificatie.
Waarschuwing
Het gebruik van een geheim vereist handmatige rotatie en beheer en wordt niet aanbevolen. Federatie van workloadidentiteit is het voorkeursreferentietype.
U kunt deze methode 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 de Azure Stack of de Azure US Government-omgevingen .
- U maakt geen verbinding vanuit Azure DevOps Server 2019 of eerdere versies van Team Foundation Server.
Ga in het Azure DevOps-project naar Project settings>Service-verbindingen.
Zie Projectinstellingen openen voor meer informatie.
Selecteer Nieuwe serviceverbinding en selecteer vervolgens Azure Resource Manager en Volgende.
Selecteer App-registratie (automatisch) met het referentiegeheim.
Selecteer een bereikniveau. Selecteer Abonnement, beheergroep of Machine Learning-werkruimte. Beheergroepen zijn containers die u helpen bij het beheren van toegang, beleid en naleving voor meerdere abonnementen. Een Machine Learning-werkruimte is een plek om machine learning-artefacten te maken.
Voer voor het abonnementsbereik de volgende parameters in:
Parameter Description Abonnement Vereist. Selecteer het Azure-abonnement. Resourcegroep Vereist. Selecteer de Azure-resourcegroep. Selecteer de Azure-beheergroep voor het bereik van de beheergroep.
Voer voor het bereik van de Machine Learning-werkruimte de volgende parameters in:
Parameter Description Abonnement Vereist. Selecteer het Azure-abonnement. Resourcegroep Vereist. Selecteer de resourcegroep met de werkruimte. Machine Learning-werkruimte Vereist. Selecteer de Azure Machine Learning-werkruimte.
Voer een serviceverbindingsnaam in.
Voer desgewenst een beschrijving in voor de serviceverbinding.
Selecteer Toegang verlenen aan alle pijplijnen om toe te staan dat alle pijplijnen deze serviceverbinding gebruiken. Als u deze optie niet selecteert, moet u handmatig toegang verlenen aan elke pijplijn die gebruikmaakt van deze serviceverbinding.
Selecteer Opslaan.
Nadat de nieuwe serviceverbinding is gemaakt, kopieert u de naam van de verbinding en plakt u deze in uw code als waarde voor azureSubscription
.
Een Azure Resource Manager-serviceverbinding maken voor een bestaande door de gebruiker toegewezen beheerde identiteit
Gebruik deze optie om automatisch een workloadidentiteitsreferentie te maken voor een bestaande door de gebruiker toegewezen beheerde identiteit. U moet een bestaande door de gebruiker toegewezen beheerde identiteit hebben voordat u begint.
Ga in het Azure DevOps-project naar Project settings>Service-verbindingen.
Zie Projectinstellingen openen voor meer informatie.
Selecteer Nieuwe serviceverbinding en selecteer vervolgens Azure Resource Manager en Volgende.
Selecteer Beheerde identiteit.
In stap 1: Details van beheerde identiteit:
- Selecteer Abonnement voor beheerde identiteit. Dit is het Azure-abonnement dat uw beheerde identiteit bevat.
- Selecteer De resourcegroep voor beheerde identiteit. Dit is de resourcegroep die uw beheerde identiteit bevat.
- Selecteer Beheerde identiteit. Dit is de beheerde identiteit binnen uw resourcegroep die u gebruikt voor toegang tot resources.
In stap 2: Azure-bereik:
Selecteer het bereikniveau. Selecteer Abonnement, beheergroep of Machine Learning-werkruimte. Beheergroepen zijn containers die u helpen bij het beheren van toegang, beleid en naleving voor meerdere abonnementen. Een Machine Learning-werkruimte is een plek om machine learning-artefacten te maken.
Voer voor het abonnementsbereik de volgende parameters in:
Parameter Description Abonnement voor serviceverbinding Vereist. Selecteer de naam van het Azure-abonnement waartoe uw beheerde identiteit toegang heeft. Resourcegroep voor serviceverbinding Optioneel. Voer in om de toegang tot een beheerde identiteit tot één resourcegroep te beperken. Voer voor het bereik van de beheergroep de volgende parameters in:
Parameter Description Beheergroep Vereist. Selecteer de Azure-beheergroep. Voer voor het bereik van de Machine Learning-werkruimte de volgende parameters in:
Parameter Description Abonnement Vereist. Selecteer de naam van het Azure-abonnement. Resourcegroep voor serviceverbinding Optioneel. Selecteer de resourcegroep met de werkruimte. WERKRUIMTE ML-werkruimte Vereist. Voer de naam in van de bestaande Azure Machine Learning-werkruimte.
Voer in stap 3: Serviceverbindingsgegevens: sectie de volgende parameters in of selecteer deze:
Parameter Description Serviceverbindingsnaam Vereist. De naam die u gebruikt om te verwijzen naar deze serviceverbinding in taakeigenschappen. Niet de naam van uw Azure-abonnement. Naslaginformatie over servicebeheer Optioneel. Contextinformatie van een ITSM-database. Beschrijving Optioneel. Voer een beschrijving in van de serviceverbinding. Selecteer in de sectie Beveiliging de optie Toegang verlenen aan alle pijplijnen om toe te staan dat alle pijplijnen deze serviceverbinding gebruiken. Als u deze optie niet selecteert, moet u handmatig toegang verlenen aan elke pijplijn die gebruikmaakt van deze serviceverbinding.
Selecteer Opslaan om de serviceverbinding te valideren en te maken.
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 workloadidentiteitsfederatie te gebruiken voor verificatie in plaats van een geheim. 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:
Ga in het Azure DevOps-project naar Project settings>Service-verbindingen.
Zie Projectinstellingen openen voor meer informatie.
Selecteer de serviceverbinding die u wilt converteren om de workloadidentiteit te gebruiken.
Selecteer Converteren.
Als u een bestaande referentie met een verlopen geheim hebt, ziet u een andere optie om te converteren.
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.
Wanneer u serviceverbindingen converteert om gebruik te maken van workloadidentiteitsfederatie, wordt u gevraagd om de update te bevestigen voor elke verbinding die deze nog niet gebruikt. Na bevestiging worden deze serviceverbindingen bijgewerkt via de Azure DevOps REST API om gebruik te maken van federatie van workloadidentiteit.
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 behulp van 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 geheim
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:
Ga in het Azure DevOps-project naar Pipelines>Service-verbindingen.
Selecteer een bestaande serviceverbinding om terug te keren.
Selecteer Conversie herstellen naar het oorspronkelijke schema.
Selecteer Opnieuw instellen om uw keuze te bevestigen.
Een Azure Resource Manager-serviceverbinding maken die gebruikmaakt van een bestaande service-principal
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:
- Gebruik de portal om een Microsoft Entra-toepassing en een service-principal te maken die toegang heeft tot resources
- Azure PowerShell gebruiken om een Azure-service-principal te maken met een certificaat
Een serviceverbinding maken die gebruikmaakt van een bestaande service-principal:
Ga in het Azure DevOps-project naar Project settings>Service-verbindingen.
Zie Projectinstellingen openen voor meer informatie.
Selecteer Nieuwe serviceverbinding en selecteer vervolgens Azure Resource Manager en Volgende.
Selecteer Service-principal (handmatig) en Volgende.
Selecteer in het dialoogvenster Nieuwe Azure-serviceverbinding de omgeving. Als u Azure Stack selecteert, voert u de omgevings-URL in. Dit is iets als
https://management.local.azurestack.external
.Selecteer het bereikniveau. Selecteer Abonnement of beheergroep. Beheergroepen zijn containers die u helpen bij het beheren van toegang, beleid en naleving voor meerdere abonnementen.
Voer voor het abonnementsbereik de volgende parameters in:
Parameter Description Abonnements-id Vereist. Voer de Azure-abonnements-id in. Abonnementsnaam Vereist. Voer de naam van het Azure-abonnement in. Voer voor het bereik van de beheergroep de volgende parameters in:
Parameter Description Beheergroep-id Vereist. Voer de azure-beheergroep-id in. Naam van beheergroep Vereist. Voer de naam van de Azure-beheergroep in.
Voer in de sectie Verificatie de volgende parameters in of selecteer deze:
Parameter Description Service-principal-id Vereist. Voer de service-principal-id in. Geloofsbrief Selecteer De sleutel of het certificaat van de service-principal. Als u service-principalsleutel hebt geselecteerd, voert u de sleutel (wachtwoord) in. Als u Certificaat hebt geselecteerd, voert u het certificaat in. Tenant-id Vereist. Voer de Tenant-id in. Verifiëren Selecteer deze optie om de instellingen te valideren die u hebt ingevoerd. Voer in de sectie Details de volgende parameters in:
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. Beschrijving Optioneel. Voer een beschrijving in van de serviceverbinding. Beveiliging Selecteer Toegang verlenen aan alle pijplijnen om toe te staan dat alle pijplijnen deze serviceverbinding gebruiken. Als u deze optie niet selecteert, moet u handmatig toegang verlenen aan elke pijplijn die gebruikmaakt van deze serviceverbinding. Selecteer Verifiëren en opslaan om de serviceverbinding te valideren en te maken.
Ga in het Azure DevOps-project naar Project settings>Service-verbindingen.
Zie Projectinstellingen openen voor meer informatie.
Selecteer Nieuwe serviceverbinding en selecteer vervolgens Azure Resource Manager.
Vul in het dialoogvenster Een Azure Resource Manager-serviceverbinding toevoegen de velden als volgt in:
Voer de naam van de verbinding in.
Selecteer de omgeving. Als u Azure Stack selecteert, voert u de omgevings-URL in. Dit is iets als
https://management.local.azurestack.external
.Selecteer het bereikniveau, **Abonnement of beheergroep. Beheergroepen zijn containers die u helpen bij het beheren van toegang, beleid en naleving voor meerdere abonnementen.
Voer voor het abonnementsbereik de volgende parameters in:
Parameter Description Abonnements-id Vereist. Voer de Azure-abonnements-id in. Abonnementsnaam Vereist. Voer de naam van het Azure-abonnement in. Voer voor het bereik van de beheergroep de volgende parameters in:
Parameter Description Beheergroep-id Vereist. Voer de azure-beheergroep-id in. Naam van beheergroep Vereist. Voer de naam van de Azure-beheergroep in.
Voer de service-principal-id in.
Selecteer het referentietype:
- Service-principalsleutel: voer de sleutel (wachtwoord) van de service-principal in.
- Certificaat: Voer de inhoud van het .perm-bestand in, inclusief zowel het certificaat als de secties met persoonlijke sleutels.
Voer de tenant-id in.
Selecteer Verbinding verifiëren om de serviceverbinding te valideren.
Selecteer desgewenst Alle pijplijnen toestaan om deze verbinding te gebruiken. Als u deze optie niet selecteert, moet u handmatig toegang verlenen aan elke pijplijn die gebruikmaakt van deze serviceverbinding.
Selecteer Opslaan om de serviceverbinding te maken.
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
.
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.
Help en ondersteuning
- Verken tips voor probleemoplossing.
- Krijg advies over Stack Overflow.
- Stel uw vragen, zoek naar antwoorden of stel een functie voor in de Azure DevOps Developer Community.
- Ondersteuning krijgen voor Azure DevOps.