Verbinding maken met Azure met een Azure Resource Manager-serviceverbinding
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Notitie
We implementeren de nieuwe ervaring voor het maken van een Azure-serviceverbinding. Het ontvangen ervan in uw organisatie is afhankelijk van verschillende factoren en u ziet mogelijk nog steeds de oudere gebruikerservaring.
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. We raden aan om workload identiteitsfederatie te gebruiken met een app-registratie of beheerde identiteit. Workload-identiteitsfederatie elimineert de behoefte aan geheime informatie en geheimbeheer.
Aanbevolen opties:
- App-registratie (automatisch) met federatie van werklastidentiteit
- 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.
- app-registratie of beheerde identiteit (handmatig) met workloadidentiteitsfederatie of een geheime. Handmatige configuratie kost meer tijd dan de automatische configuratie en moet alleen worden gebruikt als u al een automatische optie hebt geprobeerd.
Notitie
Er zijn andere verificatieopties voor azure Resource Manager-serviceverbindingen die geen federatie van workloadidentiteit gebruiken. Deze opties zijn beschikbaar voor achterwaartse compatibiliteit en edge-gevallen en niet aanbevolen. Als u voor het eerst een serviceverbinding instelt, gebruik dan workloadidentiteitfederatie. Als u een bestaande serviceverbinding hebt, probeer uw serviceverbinding te converteren om de federatie van workload-identiteit eerst te gebruiken.
Een app-registratie maken met workload-identiteitsfederatie (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 Optioneel. 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.
Een 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 serviceverbinding converteren om workloadidentiteitsfederatie te gebruiken
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 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 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 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
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
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.