Freigeben über


Herstellen einer Verbindung mit Azure mit einer Azure Resource Manager-Dienstverbindung

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

Hinweis

Wir führen die neue Erstellung von Azure-Diensten aus. Der Empfang in Ihrer Organisation hängt von verschiedenen Faktoren ab, und Möglicherweise wird die ältere Benutzererfahrung weiterhin angezeigt.

Eine Azure Resource Manager-Dienstverbindung ermöglicht es Ihnen, in Ihrer Pipeline eine Verbindung mit Azure-Ressourcen wie Azure Key Vault herzustellen. Mit dieser Verbindung können Sie eine Pipeline verwenden, um Azure-Ressourcen bereitzustellen (z. B. eine Azure App Service-App), ohne sich jedes Mal authentifizieren zu müssen.

Für die Herstellung einer Verbindung mit Azure mit einer Azure Resource Manager-Dienstverbindung stehen Ihnen mehrere Authentifizierungsoptionen zur Auswahl: Wir empfehlen die Verwendung des Workload-Identitätsverbunds mit einer App-Registrierung oder verwalteter Identität. Der Workload-Identitätsverbund beseitigt die Notwendigkeit für Geheimnisse und Geheimnisverwaltung.

Empfohlene Optionen:

Hinweis

Es gibt weitere Azure Resource Manager-Dienstverbindungsauthentifizierungsoptionen, die keinen Workload-Identitätsverbund verwenden. Diese Optionen stehen für Abwärtskompatibilität und Edgefälle zur Verfügung und werden nicht empfohlen. Wenn Sie zum ersten Mal eine Dienstverbindung einrichten, verwenden Sie den Workload-Identitätsverbund. Wenn Sie über eine vorhandene Dienstverbindung verfügen, versuchen Sie zuerst, Ihre Dienstverbindung in die Verwendung des Workload-Identitätsverbunds zu konvertieren .

Erstellen einer App-Registrierung mit Workload-Identitätsverbund (automatisch)

Sie können diesen Ansatz verwenden, wenn alle der folgenden Punkte auf Ihr Szenario zutreffen:

  • Sie die Rolle „Besitzer“ für Ihr Azure-Abonnement haben.
  • Sie stellen keine Verbindung mit der Azure Stack - oder der Azure US Government-Umgebung her.
  • Alle Marketplace-Erweiterungsaufgaben, die Sie verwenden, werden aktualisiert, um den Workload-Identitätsverbund zu unterstützen.

Mit dieser Auswahl fragt Azure DevOps automatisch nach dem Abonnement, der Verwaltungsgruppe oder dem Machine Learning-Arbeitsbereich ab, mit dem Sie eine Verbindung herstellen möchten, und erstellt einen Workload-Identitätsverbund für die Authentifizierung.

  1. Gehen Sie im Azure DevOps-Projekt auf Projekteinstellungen>Dienstverbindungen.

    Weitere Informationen finden Sie unter Projekteinstellungen öffnen.

  2. Wählen Sie Neue Dienstverbindung, dann Azure Resource Manager und anschließend Weiter aus.

    Screenshot, der die Auswahl des Azure Resource Managers zeigt.

  3. Wählen Sie App-Registrierung (automatisch) mit dem Anmeldeinformationstyp Workload-Identitätsverbund aus.

    Screenshot: Auswahl der Authentifizierungsmethode „App-Registrierung (automatisch)” mit dem Anmeldeinformationstyp „Workload-Identitätsverbund”

  4. Wählen Sie eine Bereichsebene aus. Wählen Sie Abonnement, Verwaltungsgruppe oder Machine Learning-Arbeitsbereich aus. Bei Verwaltungsgruppen handelt es sich um Container, mit denen Sie Zugriff, Richtlinien und Konformität abonnementübergreifend verwalten können. Ein Machine Learning-Arbeitsbereich ist ein Ort zum Erstellen von Machine Learning-Artefakten.

    • Geben Sie für den Abonnementbereich die folgenden Parameter ein:

      Parameter BESCHREIBUNG
      Abonnement Erforderlich. Wählen Sie das Azure-Abonnement aus.
      Ressourcengruppe Wahlfrei. Wählen Sie die Azure-Ressourcengruppe aus.
    • Wählen Sie für den Bereich Verwaltungsgruppe die Azure-Verwaltungsgruppe aus.

    • Geben Sie für den Bereich Machine Learning-Arbeitsbereich die folgenden Parameter ein:

      Parameter BESCHREIBUNG
      Abonnement Erforderlich. Wählen Sie das Azure-Abonnement aus.
      Ressourcengruppe Erforderlich. Wählen Sie die Ressourcengruppe aus, die den Arbeitsbereich enthält.
      Machine Learning-Arbeitsbereich Erforderlich. Wählen Sie den Azure Machine Learning-Arbeitsbereich aus.
  5. Geben Sie einen Dienstverbindungsnamen ein.

  6. Geben Sie optional eine Beschreibung für die Dienstverbindung ein.

  7. Wenn Sie "Zugriffsberechtigung für alle Pipelines erteilen " auswählen, können alle Pipelines diese Verbindung verwenden. Von der Verwendung dieser Option wird abgeraten. Autorisieren Sie stattdessen jede Pipeline einzeln, um die Dienstverbindung zu verwenden.

  8. Wählen Sie Speichern.

Erstellen einer Dienstverbindung für eine vorhandene vom Benutzer zugewiesene verwaltete Identität

Verwenden Sie diese Option, um automatisch Anmeldeinformationen für eine Workloadidentität für eine vorhandene benutzerseitig zugewiesene verwaltete Identität zu erstellen. Sie müssen über eine vorhandene benutzerseitig zugewiesene verwaltete Identität verfügen, bevor Sie beginnen.

  1. Gehen Sie im Azure DevOps-Projekt auf Projekteinstellungen>Dienstverbindungen.

    Weitere Informationen finden Sie unter Projekteinstellungen öffnen.

  2. Wählen Sie Neue Dienstverbindung, dann Azure Resource Manager und anschließend Weiter aus.

    Screenshot, der die Auswahl des Azure Resource Managers zeigt.

  3. Wählen Sie Verwaltete Identität aus.

    Screenshot: Auswahl der Azure Resource Manager-Option „Verwaltete Identität” mit einer benutzerseitig zugewiesenen Identität

  4. In Schritt 1: Details zur verwalteten Identität:

    1. Wählen Sie Abonnement für verwaltete Identität aus. Dies ist das Azure-Abonnement, das Ihre verwaltete Identität enthält.
    2. Wählen Sie Ressourcengruppe für verwaltete Identität aus. Dies ist die Ressourcengruppe, die Ihre verwaltete Identität enthält.
    3. Wählen Sie Verwaltete Identität aus. Dies ist die verwaltete Identität innerhalb Ihrer Ressourcengruppe, die Sie für den Zugriff auf Ressourcen verwenden.
  5. In Schritt 2: Azure-Bereich:

    1. Wählen Sie die Bereichsebene aus. Wählen Sie Abonnement, Verwaltungsgruppe oder Machine Learning-Arbeitsbereich aus. Bei Verwaltungsgruppen handelt es sich um Container, mit denen Sie Zugriff, Richtlinien und Konformität abonnementübergreifend verwalten können. Ein Machine Learning-Arbeitsbereich ist ein Ort zum Erstellen von Machine Learning-Artefakten.

      • Geben Sie für den Abonnementbereich die folgenden Parameter ein:

        Parameter BESCHREIBUNG
        Abonnement für Dienstverbindung Erforderlich. Wählen Sie den Namen des Azure-Abonnements aus, auf das Ihre verwaltete Identität zugreift.
        Ressourcengruppe für Dienstverbindung Wahlfrei. Geben Sie eine Ressourcengruppe ein, um den Zugriff der verwalteten Identität auf eine einzige Ressourcengruppe zu beschränken.
      • Geben Sie für den Bereich Verwaltungsgruppe die folgenden Parameter ein:

        Parameter BESCHREIBUNG
        Verwaltungsgruppe Erforderlich. Wählen Sie die Azure-Verwaltungsgruppe aus.
      • Geben Sie für den Bereich Machine Learning-Arbeitsbereich die folgenden Parameter ein:

        Parameter BESCHREIBUNG
        Abonnement Erforderlich. Wählen Sie den Namen des Azure-Abonnements aus.
        Ressourcengruppe für Dienstverbindung Wahlfrei. Wählen Sie die Ressourcengruppe aus, die den Arbeitsbereich enthält.
        ML-Arbeitsbereich Erforderlich. Geben Sie den Namen des vorhandenen Azure Machine Learning-Arbeitsbereichs ein.
    2. Geben Sie im Abschnitt Schritt 3: Dienstverbindungsdetails die folgenden Parameter ein, oder wählen Sie sie aus:

      Parameter BESCHREIBUNG
      Name der Dienstverbindung Erforderlich. Der Name, mit dem Sie in den Aufgabeneigenschaften auf diese Dienstverbindung verweisen. Nicht der Name Ihres Azure-Abonnements.
      Dienstverwaltungsreferenz Wahlfrei. Kontextinformationen aus einer ITSM-Datenbank.
      Beschreibung Wahlfrei. Geben Sie eine Beschreibung der Dienstverbindung ein.
    3. Wählen Sie im Abschnitt Sicherheit die Option „Zugriffsberechtigung für alle Pipelines erteilen” aus, um allen Pipelines die Verwendung dieser Dienstverbindung zu ermöglichen. Wenn Sie diese Option nicht auswählen, müssen Sie manuell Zugriff auf jede Pipeline gewähren, die diese Dienstverbindung verwendet.

    4. Wählen Sie Speichern aus, um die Dienstverbindung zu überprüfen und zu erstellen.

Vorhandene Dienstverbindung zur Verwendung des Workload-Identitätsverbunds konvertieren

Sie können eine bestehende Azure Resource Manager-Dienstverbindung schnell konvertieren, um anstelle eines Geheimnisses einen Workload-Identitätsverbund für die Authentifizierung zu verwenden. Sie können das Dienstverbindungskonvertierungstool in Azure DevOps verwenden, wenn Ihre Dienstverbindung diese Anforderungen erfüllt:

  • Azure DevOps hat ursprünglich die Dienstverbindung erstellt. Wenn Sie Ihre Dienstverbindung manuell erstellen, können Sie die Dienstverbindung nicht mit dem Dienstverbindungskonvertierungstool konvertieren, da Azure DevOps keine Berechtigung hat, seine eigenen Anmeldeinformationen zu ändern.
  • Nur ein Projekt verwendet die Dienstverbindung. Sie können Projekt-Service-übergreifende Verbindungen nicht konvertieren.

So konvertieren Sie eine Dienstverbindung:

  1. Gehen Sie im Azure DevOps-Projekt auf Projekteinstellungen>Dienstverbindungen.

    Weitere Informationen finden Sie unter Projekteinstellungen öffnen.

  2. Wählen Sie die Dienstverbindung aus, die Sie in eine Workload-Identität umwandeln möchten.

  3. Wählen Sie Konvertieren aus.

    Screenshot, der die Auswahl der Konvertierung für Verbund-Anmeldeinformationen zeigt.

    Wenn Sie über vorhandene Anmeldeinformationen verfügen, deren Geheimnis abgelaufen ist, wird eine andere Option zum Konvertieren angezeigt.

    Screenshot, der die Option zur Konvertierung in Verbund-Anmeldeinformationen zeigt, wenn Sie ein abgelaufenes Zertifikat haben.

  4. Wählen Sie erneut Konvertieren aus, um zu bestätigen, dass Sie eine neue Dienstverbindung erstellen möchten.

    Die Umwandlung kann einige Minuten dauern. Wenn Sie die Verbindung rückgängig machen wollen, müssen Sie sie innerhalb von sieben Tagen rückgängig machen.

Konvertieren mehrerer Dienstverbindungen mit einem Skript

Verwenden Sie ein Skript, um mehrere Dienstverbindungen auf einmal zu aktualisieren, damit sie nun den Workload-Identitätsverbund für die Authentifizierung verwenden.

Dieses PowerShell-Beispielskript erfordert zwei Parameter: Azure DevOps Organisation (Beispiel: https://dev.azure.com/fabrikam-tailspin) und Azure DevOps-Projekt (Beispiel: Space game web agent). Das Skript ruft dann die zugehörigen Dienstverbindungen für Ihr Azure DevOps-Projekt und Ihre Organisation ab.

Wenn Sie Dienstverbindungen zur Verwendung eines Workload-Identitätsverbunds konvertieren, werden Sie aufgefordert, die Aktualisierung für jede Verbindung zu bestätigen, die diese Methode noch nicht verwendet. Nach der Bestätigung aktualisiert das Skript diese Dienstverbindungen über die Azure DevOps REST API, um den Workload-Identitätsverbund zu nutzen.

Das Skript benötigt PowerShell 7.3 oder neuer und Azure CLI zum Ausführen. Speichern Sie das Skript in einer .ps1 Datei, und führen Sie es mit PowerShell 7 aus.

#!/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)'"
}

Wiederherstellen einer vorhandenen Dienstverbindung, die einen geheimen Schlüssel verwendet

Sie können eine konvertierte automatische Dienstverbindung mit ihrem geheimen Schlüssel sieben Tage lang wiederherstellen. Erstellen Sie nach sieben Tagen manuell ein neues Geheimnis.

Wenn Sie Ihre Dienstverbindung manuell erstellen und konvertieren, können Sie die Dienstverbindung nicht mit dem Dienstverbindungskonvertierungstool rückgängig machen, da Azure DevOps keine Berechtigung hat, seine eigenen Anmeldeinformationen zu ändern.

Um eine Dienstverbindung rückgängig zu machen:

  1. Gehen Sie im Azure DevOps-Projekt zu Pipelines>Service connections.

  2. Wählen Sie eine bestehende Dienstverbindung aus, die Sie wiederherstellen möchten.

  3. Wählen Sie Konvertierung in das ursprüngliche Schema zurückversetzen aus.

    Screenshot, der die Auswahl von Revert für eine Verbund-Anmeldeinformation zeigt.

  4. Wählen Sie Wiederherstellen erneut aus, um Ihre Auswahl zu bestätigen.

Erstellen einer Dienstverbindung, die einen vorhandenen Dienstprinzipal verwendet

Wenn Sie einen vordefinierten Satz von Zugriffsberechtigungen verwenden möchten und noch keinen Dienstprinzipal für diesen Zweck definiert haben, folgen Sie einem dieser Tutorials, um einen neuen Dienstprinzipal zu erstellen:

So erstellen Sie eine Dienstverbindung, die einen vorhandenen Dienstprinzipal verwendet:

  1. Gehen Sie im Azure DevOps-Projekt auf Projekteinstellungen>Dienstverbindungen.

    Weitere Informationen finden Sie unter Projekteinstellungen öffnen.

  2. Wählen Sie Neue Dienstverbindung, dann Azure Resource Manager und anschließend Weiter aus.

    Screenshot, der die Auswahl des Azure Resource Managers zeigt.

  3. Wählen Sie Dienstprinzipal (manuell) und dann Weiter aus.

    Screenshot, der die Auswahl einer Dienstprinzipal-Authentifizierungsmethode (manuell) zeigt.

  4. Wählen Sie im Dialogfeld Neue Azure-Dienstverbindung die Option Umgebung aus. Wenn Sie Azure Stack auswählen, geben Sie die Umgebungs-URL ein, die etwa wie folgt https://management.local.azurestack.external lautet.

  5. Wählen Sie die Bereichsebene aus. Wählen Sie Abonnement oder Verwaltungsgruppe. Bei Verwaltungsgruppen handelt es sich um Container, mit denen Sie Zugriff, Richtlinien und Konformität abonnementübergreifend verwalten können.

    • Geben Sie für den Abonnementbereich die folgenden Parameter ein:

      Parameter BESCHREIBUNG
      Abonnement-ID Erforderlich. Geben Sie die ID des Azure-Abonnements ein.
      Abonnementname Erforderlich. Geben Sie den Azure-Abonnementnamen ein.
    • Geben Sie für den Bereich Verwaltungsgruppe die folgenden Parameter ein:

      Parameter BESCHREIBUNG
      Verwaltungsgruppen-ID Erforderlich. Geben Sie die ID der Azure-Verwaltungsgruppe ein.
      Verwaltungsgruppenname Erforderlich. Geben Sie den Azure-Verwaltungsgruppennamen ein.
  6. Geben Sie im Abschnitt Authentifizierung die folgenden Parameter ein, oder wählen Sie sie aus:

    Parameter BESCHREIBUNG
    Dienstprinzipal-ID Erforderlich. Geben Sie die Dienstprinzipal-ID ein.
    Berechtigungsnachweis Wählen Sie Dienstprinzipalschlüssel oder Zertifikat aus. Wenn Sie den Dienstprinzipalschlüssel ausgewählt haben, geben Sie den Schlüssel (Kennwort) ein. Wenn Sie Zertifikat ausgewählt haben, geben Sie das Zertifikat ein.
    Mandanten-ID Erforderlich. Geben SIe die Mandanten-ID ein.
    Überprüfen Wählen Sie diese Option aus, um die von Ihnen eingegebenen Einstellungen zu bestätigen.
  7. Geben Sie im Abschnitt „Details” die folgenden Parameter ein:

    Parameter BESCHREIBUNG
    Verbindungsname Erforderlich. Der Name, mit dem Sie in den Aufgabeneigenschaften auf diese Dienstverbindung verweisen. Nicht der Name Ihres Azure-Abonnements.
    Beschreibung Wahlfrei. Geben Sie eine Beschreibung der Dienstverbindung ein.
    Sicherheit Wählen Sie Zugriffsberechtigung für alle Pipelines erteilen aus, damit alle Pipelines diese Dienstverbindung verwenden können. Wenn Sie diese Option nicht auswählen, müssen Sie manuell Zugriff auf jede Pipeline gewähren, die diese Dienstverbindung verwendet.
  8. Wählen Sie Überprüfen und speichern aus, um die Dienstverbindung zu überprüfen und zu erstellen.

Hilfe und Support