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:
- Rejestracja aplikacji (automatyczna) z federacją tożsamości obciążeń
- Tożsamość zarządzana, która tworzy poświadczenia federacji tożsamości obciążenia i łączy się z istniejącą tożsamością zarządzaną przypisaną przez użytkownika. Użyj tej opcji, jeśli nie masz uprawnień do tworzenia rejestracji aplikacji.
- pl-PL: Rejestracja aplikacji lub zarządzana tożsamość (ręczna) z federacją tożsamości obciążeń roboczych lub sekretem. Konfiguracja ręczna jest bardziej czasochłonna niż konfiguracja automatyczna i powinna być używana tylko wtedy, gdy podjęto już próbę użycia opcji automatycznej.
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.
W projekcie usługi Azure DevOps przejdź do pozycji Połączenia usługi Ustawienia>projektu.
Aby uzyskać więcej informacji, zobacz Otwieranie ustawień projektu.
Wybierz pozycję Nowe połączenie z usługą, a następnie wybierz pozycję Azure Resource Manager i Dalej.
Wybierz pozycję Rejestracja aplikacji (automatyczna) z federacją tożsamości obciążenia poświadczeń.
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.
Wprowadź nazwę połączenia z usługą.
Opcjonalnie wprowadź opis połączenia z usługą.
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ą.
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.
W projekcie usługi Azure DevOps przejdź do pozycji Połączenia usługi Ustawienia>projektu.
Aby uzyskać więcej informacji, zobacz Otwieranie ustawień projektu.
Wybierz pozycję Nowe połączenie z usługą, a następnie wybierz pozycję Azure Resource Manager i Dalej.
Wybierz pozycję Tożsamość zarządzana.
W kroku 1. Szczegóły tożsamości zarządzanej:
- Wybierz pozycję Subskrypcja dla pozycji Tożsamość zarządzana. Jest to subskrypcja platformy Azure zawierająca tożsamość zarządzaną.
- Wybierz pozycję Grupa zasobów dla pozycji Tożsamość zarządzana. Jest to grupa zasobów zawierająca tożsamość zarządzaną.
- 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.
W kroku 2. Zakres platformy Azure:
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.
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ą. 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ą.
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:
W projekcie usługi Azure DevOps przejdź do pozycji Połączenia usługi Ustawienia>projektu.
Aby uzyskać więcej informacji, zobacz Otwieranie ustawień projektu.
Wybierz połączenie z usługą, które chcesz przekonwertować, aby używać tożsamości obciążenia.
Wybierz pozycję Konwertuj.
Jeśli masz istniejące poświadczenia z wygasłym wpisem tajnym, zobaczysz inną opcję konwersji.
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ą:
W projekcie usługi Azure DevOps przejdź do pozycji >Service.
Wybierz istniejące połączenie usługi, aby przywrócić.
Wybierz pozycję Przywróć konwersję do oryginalnego schematu.
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:
- Użyj portalu, aby utworzyć aplikację Firmy Microsoft Entra i jednostkę usługi, która może uzyskiwać dostęp do zasobów
- Tworzenie jednostki usługi platformy Azure z certyfikatem przy użyciu programu Azure PowerShell
Aby utworzyć połączenie usługi korzystające z istniejącej jednostki usługi:
W projekcie usługi Azure DevOps przejdź do pozycji Połączenia usługi Ustawienia>projektu.
Aby uzyskać więcej informacji, zobacz Otwieranie ustawień projektu.
Wybierz pozycję Nowe połączenie z usługą, a następnie wybierz pozycję Azure Resource Manager i Dalej.
Wybierz pozycję Jednostka usługi (ręcznie) i Dalej.
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
.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.
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. 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ą. Wybierz pozycję Weryfikuj i zapisz , aby zweryfikować i utworzyć połączenie usługi.
W projekcie usługi Azure DevOps przejdź do pozycji Połączenia usługi Ustawienia>projektu.
Aby uzyskać więcej informacji, zobacz Otwieranie ustawień projektu.
Wybierz pozycję Nowe połączenie z usługą, a następnie wybierz pozycję Azure Resource Manager.
W oknie dialogowym Dodawanie połączenia usługi Azure Resource Manager wypełnij pola w następujący sposób:
Wprowadź nazwę połączenia.
Wybierz pozycję Środowisko. Jeśli wybierzesz usługę Azure Stack, wprowadź adres URL środowiska, który jest podobny do
https://management.local.azurestack.external
.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.
Wprowadź identyfikator jednostki usługi.
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.
Wprowadź identyfikator dzierżawy.
Wybierz pozycję Weryfikuj połączenie , aby zweryfikować połączenie usługi.
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ą.
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
- Zapoznaj się z poradami dotyczącymi rozwiązywania problemów.
- Uzyskaj porady na temat Stack Overflow.
- Opublikuj swoje pytania, wyszukaj odpowiedzi lub zasugeruj funkcję w społeczności deweloperów usługi Azure DevOps.
- Uzyskaj pomoc techniczną dotyczącą usługi Azure DevOps.