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. Odbieranie go w organizacji zależy od różnych czynników i nadal może być widoczne starsze środowisko użytkownika.

Połączenie usługi Azure Resource Manager umożliwia łączenie się z zasobami platformy Azure, takimi jak usługa Azure Key Vault z potoku. To połączenie umożliwia użycie potoku do wdrożenia w zasobach platformy Azure, takich jak aplikacja usługi aplikacja systemu Azure Service, bez konieczności uwierzytelniania za każdym razem.

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ń.

Tworzenie rejestracji aplikacji przy użyciu federacji tożsamości obciążenia (automatyczne)

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

  • Masz rolę Właściciel dla subskrypcji platformy Azure.
  • Nie łączysz się z usługą Azure Stack ani środowiskami platformy Azure US Government .
  • Wszystkie zadania rozszerzeń witryny Marketplace, których używasz, są aktualizowane w celu obsługi federacji tożsamości obciążenia.

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 usługi Azure DevOps przejdź do pozycji Połączenia usługi Ustawienia>projektu.

    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 federacją tożsamości obciążenia poświadczeń.

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

  4. Wybierz poziom zakresu. Wybierz pozycję Subskrypcja, Grupa zarządzania lub Obszar roboczy usługi Machine Learning. 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 obszarze Zakres grupy zarządzania wybierz grupę zarządzania platformy 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 usługi Machine Learning 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 z usługą.

  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 obciążenia dla istniejącej tożsamości zarządzanej przypisanej przez użytkownika. Przed rozpoczęciem musisz mieć istniejącą tożsamość zarządzaną przypisaną przez użytkownika.

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

    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 użyciu tożsamości zarządzanej przy użyciu usługi Azure Resource Manager.

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

    1. Wybierz pozycję Subskrypcja dla pozycji Tożsamość zarządzana. Jest to subskrypcja platformy Azure zawierająca tożsamość zarządzaną.
    2. Wybierz pozycję Grupa zasobów dla pozycji Tożsamość zarządzana. Jest to grupa zasobów zawierająca tożsamość zarządzaną.
    3. Wybierz pozycję Tożsamość zarządzana. 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 pozycję Subskrypcja, Grupa zarządzania lub Obszar roboczy usługi Machine Learning. 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órych będzie uzyskiwana tożsamość zarządzana.
        Grupa zasobów dla połączenia z usługą Opcjonalny. Wprowadź wartość , aby ograniczyć dostęp tożsamości zarządzanej do jednej grupy zasobów.
      • W obszarze 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 obszaru roboczego uczenia maszynowego 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 używana do odwoływania 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 z usługą.

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

Konwertowanie istniejącego połączenia usługi w celu używania federacji tożsamości obciążenia

Możesz szybko przekonwertować istniejące połączenie usługi Azure Resource Manager, aby użyć federacji tożsamości obciążenia do uwierzytelniania zamiast wpisu tajnego. 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:

  • Usługa Azure DevOps pierwotnie utworzyła połączenie z usługą. 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ń między usługa projektów.

Aby przekonwertować połączenie usługi:

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

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

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

  3. Wybierz pozycję Konwertuj.

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

    Jeśli masz istniejące poświadczenia z wygasłym wpisem tajnym, 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 zaktualizować wiele połączeń usług jednocześnie, aby teraz używać federacji tożsamości obciążenia 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ługi w celu korzystania z federacji tożsamości obciążenia zostanie wyświetlony monit o potwierdzenie aktualizacji dla każdego połączenia, które nie jest jeszcze z niego używane. Po potwierdzeniu skrypt aktualizuje te połączenia usługi za pośrednictwem interfejsu API REST usługi Azure DevOps w celu korzystania z federacji tożsamości obciążenia.

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ć przekonwertowane automatyczne połączenie usługi z jego wpisem tajnym 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 usługi Azure DevOps przejdź do pozycji >Service.

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

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

    Zrzut ekranu przedstawiający wybór przywracania dla poświadczeń federacyjnych.

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

Tworzenie połączenia usługi korzystającego z istniejącej 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ącej jednostki usługi:

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

    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 przedstawiający wybór metody uwierzytelniania jednostki usługi (ręcznej).

  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.
    • W obszarze 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 jednostki usługi Wymagany. Wprowadź identyfikator jednostki usługi.
    Poświadczeń Wybierz pozycję Klucz jednostki usługi lub certyfikat. W przypadku wybrania klucza jednostki usługi wprowadź klucz (hasło). W przypadku wybrania opcji Certyfikat wprowadź certyfikat.
    Identyfikator dzierżawy 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 używana do odwoływania 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 z usługą.
  8. Wybierz pozycję Weryfikuj i zapisz , aby zweryfikować i utworzyć połączenie usługi.

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

    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.

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

  3. W oknie dialogowym Dodawanie połączenia usługi Azure Resource Manager wypełnij pola w następujący sposób:

    Zrzut ekranu przedstawiający dodawanie połączenia usługi Azure Resource Manager.

    1. Wprowadź nazwę połączenia.

    2. Wybierz pozycję Środowisko. Jeśli wybierzesz usługę Azure Stack, wprowadź adres URL środowiska, który jest podobny do https://management.local.azurestack.external.

    3. Wybierz poziom zakresu, **subskrypcję lub grupę 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.
      • W obszarze 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.
    4. Wprowadź identyfikator jednostki usługi.

    5. Wybierz typ poświadczeń:

      • Klucz jednostki usługi: wprowadź klucz jednostki usługi (hasło).
      • Certyfikat: wprowadź zawartość pliku perm , w tym sekcje certyfikatu i klucza prywatnego.
    6. Wprowadź identyfikator dzierżawy.

    7. Wybierz pozycję Weryfikuj połączenie , aby zweryfikować połączenie usługi.

    8. Opcjonalnie wybierz opcję Zezwalaj wszystkim potokom na korzystanie z tego połączenia. Jeśli nie wybierzesz tej opcji, musisz ręcznie udzielić dostępu do każdego potoku korzystającego z tego połączenia z usługą.

    9. Wybierz pozycję Zapisz , aby utworzyć połączenie z usługą.

Po utworzeniu nowego połączenia z usługą:

  • Jeśli używasz połączenia z usługą w interfejsie użytkownika, wybierz nazwę połączenia przypisaną w ustawieniu subskrypcji platformy Azure potoku.
  • Jeśli używasz połączenia usługi w pliku YAML, skopiuj nazwę połączenia i wklej ją w kodzie jako wartość .azureSubscription

W razie potrzeby zmodyfikuj jednostkę usługi, aby uwidocznić odpowiednie uprawnienia.

Aby uzyskać więcej informacji na temat uwierzytelniania przy użyciu jednostki usługi, zobacz Używanie kontroli dostępu opartej na rolach w celu zarządzania dostępem do zasobów subskrypcji platformy Azure lub wpis w blogu Automatyzowanie wdrożenia grupy zasobów platformy Azure przy użyciu jednostki usługi w programie Visual Studio.

Aby uzyskać więcej informacji, zobacz Rozwiązywanie problemów z połączeniami usługi Azure Resource Manager.

Pomoc i obsługa techniczna