Udostępnij za pośrednictwem


Nawiązywanie połączenia z platformą Azure przy użyciu połączenia usługi Azure Resource Manager

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

Uwaga

Wprowadzamy nowe środowisko tworzenia połączenia z usługą platformy Azure. Otrzymanie tego w organizacji zależy od różnych czynników, a Ty możesz nadal zauważyć starszy interfejs użytkownika.

Połączenie do usługi Azure Resource Manager pozwala na łączenie się z zasobami platformy Azure, takimi jak Azure Key Vault, z poziomu potoku. To połączenie umożliwia użycie potoku do wdrożenia w zasobach Azure, takich jak aplikacja usługi Azure App Service, bez potrzeby każdorazowego uwierzytelniania.

Istnieje wiele opcji uwierzytelniania na potrzeby nawiązywania połączenia z platformą Azure przy użyciu połączenia usługi Azure Resource Manager. Zalecamy używanie federacji tożsamości dla obciążeń z rejestracją aplikacji lub tożsamością zarządzaną. Federacja tożsamości dla obciążeń eliminuje konieczność używania oraz zarządzania tajnymi danymi.

Zalecane opcje:

Uwaga

Istnieją inne opcje uwierzytelniania połączenia z usługą Azure Resource Manager, które nie używają federacji tożsamości roboczej. Te opcje są dostępne w przypadku zgodności z poprzednimi wersjami i przypadków brzegowych i nie są zalecane. Jeśli konfigurujesz połączenie z usługą po raz pierwszy, użyj federacji tożsamości dla obciążeń. Jeśli masz istniejące połączenie z usługą, spróbuj najpierw przekonwertować je na użycie federacji tożsamości dla obciążeń.

Utwórz rejestrację aplikacji przy użyciu federacji tożsamości roboczej (automatycznie)

Tego podejścia można użyć, jeśli wszystkie następujące elementy są prawdziwe w danym scenariuszu:

  • Masz rolę Właściciela dla subskrypcji Azure.
  • Nie łączysz się z usługą Azure Stack ani środowiskami platformy Azure US Government .
  • Wszystkie zadania rozszerzeń Marketplace, których używasz, są aktualizowane, aby wspierać federację tożsamości obciążeń administracyjnych.

Po wybraniu tej opcji usługa Azure DevOps automatycznie wysyła zapytania dotyczące subskrypcji, grupy zarządzania lub obszaru roboczego usługi Machine Learning, z którym chcesz nawiązać połączenie i tworzy federację tożsamości obciążenia na potrzeby uwierzytelniania.

  1. W projekcie Azure DevOps przejdź do Ustawienia projektu>Połączenia usługi.

    Aby uzyskać więcej informacji, zobacz Otwieranie ustawień projektu.

  2. Wybierz pozycję Nowe połączenie z usługą, a następnie wybierz pozycję Azure Resource Manager i Dalej.

    Zrzut ekranu przedstawiający wybieranie wyboru usługi Azure Resource Manager.

  3. Wybierz pozycję Rejestracja aplikacji (automatyczna) z poświadczeniami federacja tożsamości obciążeniowej.

    Zrzut ekranu przedstawiający wybór automatycznej metody uwierzytelniania przy rejestracji aplikacji z wybraną tożsamością obciążenia roboczego.

  4. Wybierz poziom zakresu. Wybierz Subskrypcja, Grupa zarządzania lub Obszar roboczy uczenia maszynowego. Grupy zarządzania to kontenery, które ułatwiają zarządzanie dostępem, zasadami i zgodnością w wielu subskrypcjach. Obszar roboczy usługi Machine Learning to miejsce do tworzenia artefaktów uczenia maszynowego.

    • W polu Zakres subskrypcji wprowadź następujące parametry:

      Parametr Opis
      Subskrypcja Wymagany. Wybierz subskrypcję platformy Azure.
      Grupa zasobów: Opcjonalny. Wybierz grupę zasobów platformy Azure.
    • W zakresie Grupy zarządzania wybierz grupę zarządzania Azure.

    • W zakresie obszaru roboczego usługi Machine Learning wprowadź następujące parametry:

      Parametr Opis
      Subskrypcja Wymagany. Wybierz subskrypcję platformy Azure.
      Grupa zasobów Wymagany. Wybierz grupę zasobów zawierającą obszar roboczy.
      Obszar roboczy uczenia maszynowego Wymagany. Wybierz obszar roboczy usługi Azure Machine Learning.
  5. Wprowadź nazwę połączenia z usługą.

  6. Opcjonalnie wprowadź opis połączenia z usługą.

  7. Wybierz pozycję Udziel uprawnień dostępu do wszystkich potoków , aby zezwolić wszystkim potokom na korzystanie z tego połączenia z usługą. Jeśli nie wybierzesz tej opcji, musisz ręcznie udzielić dostępu do każdego potoku korzystającego z tego połączenia usługowego.

  8. Wybierz pozycję Zapisz.

Utwórz połączenie z usługą dla istniejącej tożsamości zarządzanej przypisanej przez użytkownika.

Użyj tej opcji, aby automatycznie utworzyć poświadczenia tożsamości dla obciążeń dla istniejącej tożsamości zarządzanej przypisanej przez użytkownika. Przed rozpoczęciem musisz mieć istniejącą zarządzaną tożsamość przypisaną przez użytkownika.

  1. W projekcie Azure DevOps przejdź do Ustawienia projektu>Połączenia usługi.

    Aby uzyskać więcej informacji, zobacz Otwieranie ustawień projektu.

  2. Wybierz pozycję Nowe połączenie z usługą, a następnie wybierz pozycję Azure Resource Manager i Dalej.

    Zrzut ekranu przedstawiający wybieranie wyboru usługi Azure Resource Manager.

  3. Wybierz pozycję Tożsamość zarządzana.

    Zrzut ekranu przedstawiający wybór tożsamości zarządzanej przy pomocy Azure Resource Manager z przypisaną tożsamością użytkownika.

  4. W kroku 1: Szczegóły tożsamości zarządzanej:

    1. Wybierz Subskrypcję Tożsamości Zarządzanej. Jest to subskrypcja platformy Azure zawierająca tożsamość zarządzaną.
    2. Wybierz Grupę zasobów dla zarządzanej tożsamości. Jest to grupa zasobów zawierająca twoją tożsamość zarządzaną.
    3. Wybierz pozycję Zarządzana tożsamość. Jest to tożsamość zarządzana w grupie zasobów, której będziesz używać do uzyskiwania dostępu do zasobów.
  5. W kroku 2. Zakres platformy Azure:

    1. Wybierz poziom zakresu. Wybierz Subskrypcja, Grupa zarządzania lub Obszar roboczy uczenia maszynowego. Grupy zarządzania to kontenery, które ułatwiają zarządzanie dostępem, zasadami i zgodnością w wielu subskrypcjach. Obszar roboczy usługi Machine Learning to miejsce do tworzenia artefaktów uczenia maszynowego.

      • W polu Zakres subskrypcji wprowadź następujące parametry:

        Parametr Opis
        Subskrypcja połączenia z usługą Wymagany. Wybierz nazwę subskrypcji platformy Azure, do której będzie miała dostęp tożsamość zarządzana.
        Grupa zasobów dla połączenia z usługą Opcjonalny. Wprowadź, aby ograniczyć dostęp tożsamości zarządzanej do jednej grupy zasobów.
      • Zakres grupy zarządzania, wprowadź następujące parametry:

        Parametr Opis
        Grupa zarządzania Wymagany. Wybierz grupę zarządzania platformy Azure.
      • W zakresie obszaru roboczego usługi Machine Learning wprowadź następujące parametry:

        Parametr Opis
        Subskrypcja Wymagany. Wybierz nazwę subskrypcji platformy Azure.
        Grupa zasobów dla połączenia z usługą Opcjonalny. Wybierz grupę zasobów zawierającą obszar roboczy.
        Obszar roboczy ML Wymagany. Wprowadź nazwę istniejącego obszaru roboczego usługi Azure Machine Learning.
    2. W sekcji Krok 3: Szczegóły połączenia z usługą: wprowadź lub wybierz następujące parametry:

      Parametr Opis
      Nazwa połączenia usługi Wymagany. Nazwa, której używasz, aby odwoływać się do tego połączenia usługi we właściwościach zadania. Nie jest to nazwa subskrypcji platformy Azure.
      Dokumentacja zarządzania usługami Opcjonalny. Informacje kontekstowe z bazy danych ITSM.
      Opis Opcjonalny. Wprowadź opis połączenia z usługą.
    3. W sekcji Zabezpieczenia wybierz pozycję Udziel uprawnień dostępu do wszystkich potoków, aby zezwolić wszystkim potokom na korzystanie z tego połączenia z usługą. Jeśli nie wybierzesz tej opcji, musisz ręcznie udzielić dostępu do każdego potoku korzystającego z tego połączenia usługowego.

    4. Wybierz pozycję Zapisz , aby zweryfikować i utworzyć połączenie usługi.

Przekształcenie istniejącego połączenia usługi, aby używać federacji tożsamości dla zadań roboczych

Możesz szybko przekonwertować istniejące połączenie usługi Azure Resource Manager, aby użyć federacji tożsamości obciążenia roboczego do uwierzytelniania zamiast tajemnicy. Jeśli połączenie usługi spełnia następujące wymagania, możesz użyć narzędzia konwersji połączenia z usługą w usłudze Azure DevOps:

  • Azure DevOps pierwotnie utworzył połączenie usługi. Jeśli ręcznie utworzysz połączenie z usługą, nie możesz przekonwertować połączenia z usługą przy użyciu narzędzia konwersji połączenia z usługą, ponieważ usługa Azure DevOps nie ma uprawnień do modyfikowania własnych poświadczeń.
  • Tylko jeden projekt używa połączenia z usługą. Nie można konwertować połączeń serwisowych między projektami.

Aby przekonwertować połączenie usługi:

  1. W projekcie Azure DevOps przejdź do Ustawienia projektu>Połączenia usługi.

    Aby uzyskać więcej informacji, zobacz Otwieranie ustawień projektu.

  2. Wybierz połączenie z usługą, które chcesz zmienić, aby używać tożsamości obciążeniowej.

  3. Wybierz pozycję Konwertuj.

    Zrzut ekranu przedstawiający wybranie opcji konwersji dla poświadczeń federacyjnych.

    Jeśli masz istniejące poświadczenie z wygasłym sekretem, zobaczysz inną opcję konwersji.

    Zrzut ekranu przedstawiający opcję konwersji na używanie poświadczeń federacyjnych w przypadku wygaśnięcia certyfikatu.

  4. Wybierz ponownie pozycję Konwertuj , aby potwierdzić, że chcesz utworzyć nowe połączenie usługi.

    Konwersja może potrwać kilka minut. Jeśli chcesz przywrócić połączenie, musisz przywrócić je w ciągu siedmiu dni.

Konwertowanie wielu połączeń usług za pomocą skryptu

Użyj skryptu, aby jednocześnie zaktualizować wiele połączeń usług, stosując teraz federację tożsamości obciążeń do uwierzytelniania.

Ten przykładowy skrypt programu PowerShell wymaga dwóch parametrów: organizacja usługi Azure DevOps (przykład: https://dev.azure.com/fabrikam-tailspin) i projekt Usługi Azure DevOps (przykład: Space game web agent). Następnie skrypt pobiera skojarzone połączenia usług dla projektu i organizacji usługi Azure DevOps.

Podczas konwertowania połączeń usług na korzystanie z federacji tożsamości obciążenia, zostanie wyświetlony monit o potwierdzenie aktualizacji dla każdego połączenia, które jeszcze z niej nie korzysta. Po potwierdzeniu, skrypt aktualizuje te połączenia z usługami za pośrednictwem interfejsu REST API Azure DevOps, aby korzystać z federacji tożsamości dla obciążenia roboczego.

Skrypt wymaga uruchomienia programu PowerShell 7.3 lub nowszego oraz interfejsu wiersza polecenia platformy Azure. Zapisz skrypt w .ps1 pliku i uruchom go przy użyciu programu 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)'"
}

Cofnij istniejące połączenie usługi, które korzysta z tajemnicy

Możesz przywrócić automatyczne połączenie usługi, które zostało przekonwertowane, z jego sekretem przez siedem dni. Po siedmiu dniach ręcznie utwórz nowy wpis tajny.

Jeśli ręcznie utworzysz i przekonwertujesz połączenie z usługą, nie możesz przywrócić połączenia z usługą przy użyciu narzędzia konwersji połączenia z usługą, ponieważ usługa Azure DevOps nie ma uprawnień do modyfikowania własnych poświadczeń.

Aby przywrócić połączenie z usługą:

  1. W projekcie Azure DevOps przejdź do Pipelines>Połączenia z usługami.

  2. Wybierz istniejące połączenie usługi, aby odwrócić zmiany.

  3. Wybierz pozycję Przywróć konwersję do oryginalnego schematu.

    Zrzut ekranu przedstawiający wybranie opcji przywracania dla poświadczeń federacyjnych.

  4. Wybierz ponownie pozycję Przywróć , aby potwierdzić wybór.

Utwórz połączenie usługi, które korzysta z istniejącej głównej jednostki usługi

Jeśli chcesz użyć wstępnie zdefiniowanego zestawu uprawnień dostępu i nie masz jeszcze zdefiniowanej jednostki usługi w tym celu, wykonaj jedną z tych samouczków, aby utworzyć nową jednostkę usługi:

Aby utworzyć połączenie usługi korzystające z istniejącego podmiotu usługi:

  1. W projekcie Azure DevOps przejdź do Ustawienia projektu>Połączenia usługi.

    Aby uzyskać więcej informacji, zobacz Otwieranie ustawień projektu.

  2. Wybierz pozycję Nowe połączenie z usługą, a następnie wybierz pozycję Azure Resource Manager i Dalej.

    Zrzut ekranu przedstawiający wybór usługi Azure Resource Manager.

  3. Wybierz pozycję Jednostka usługi (ręcznie) i Dalej.

    Zrzut ekranu pokazujący wybór metody uwierzytelniania jednostki usługi metodą ręczną.

  4. W oknie dialogowym Nowe połączenie z usługą platformy Azure wybierz pozycję Środowisko. Jeśli wybierzesz usługę Azure Stack, wprowadź adres URL środowiska, który jest podobny do https://management.local.azurestack.external.

  5. Wybierz poziom zakresu. Wybierz pozycję Subskrypcja lub Grupa zarządzania. Grupy zarządzania to kontenery, które ułatwiają zarządzanie dostępem, zasadami i zgodnością w wielu subskrypcjach.

    • W polu Zakres subskrypcji wprowadź następujące parametry:

      Parametr Opis
      Identyfikator subskrypcji Wymagany. Wprowadź identyfikator subskrypcji platformy Azure.
      Nazwa subskrypcji Wymagany. Wprowadź nazwę subskrypcji platformy Azure.
    • Zakres grupy zarządzania, wprowadź następujące parametry:

      Parametr Opis
      Identyfikator grupy zarządzania Wymagany. Wprowadź identyfikator grupy zarządzania platformy Azure.
      Nazwa grupy zarządzania Wymagany. Wprowadź nazwę grupy zarządzania platformy Azure.
  6. W sekcji Uwierzytelnianie wprowadź lub wybierz następujące parametry:

    Parametr Opis
    Identyfikator głównej usługi Wymagany. Wprowadź identyfikator jednostki usługi.
    Poświadczenie Wybierz Klucz jednostki usługi lub Certyfikat. Jeśli wybrano Klucz Jednostki Usługi, wprowadź klucz (hasło). W przypadku wybrania opcji Certyfikat wprowadź certyfikat.
    Identyfikator klienta Wymagany. Wprowadź identyfikator dzierżawcy.
    Weryfikacja Wybierz, aby zweryfikować wprowadzone ustawienia.
  7. W sekcji Szczegóły wprowadź następujące parametry:

    Parametr Opis
    Nazwa połączenia Wymagany. Nazwa, której używasz, aby odwoływać się do tego połączenia usługi we właściwościach zadania. Nie jest to nazwa subskrypcji platformy Azure.
    Opis Opcjonalny. Wprowadź opis połączenia z usługą.
    Bezpieczeństwo Wybierz pozycję Udziel uprawnień dostępu do wszystkich potoków , aby zezwolić wszystkim potokom na korzystanie z tego połączenia z usługą. Jeśli nie wybierzesz tej opcji, musisz ręcznie udzielić dostępu do każdego potoku korzystającego z tego połączenia usługowego.
  8. Wybierz pozycję Weryfikuj i zapisz , aby zweryfikować i utworzyć połączenie usługi.

Pomoc i obsługa techniczna