Tworzenie jednostki usługi platformy Azure za pomocą programu Azure PowerShell

Zautomatyzowane narzędzia, które korzystają z usług platformy Azure, powinny zawsze mieć ograniczone uprawnienia. Zamiast logowania się do aplikacji jako w pełni uprzywilejowany użytkownik, platforma Azure oferuje nazwy głównej usługi.

Jednostka usługi platformy Azure to tożsamość przeznaczona do użycia z aplikacjami, usługami hostowanymi i zautomatyzowanymi narzędziami w celu uzyskiwania dostępu do zasobów platformy Azure. Ten dostęp jest ograniczony przez role przypisane do jednostki usługi, dzięki czemu możesz kontrolować, do których zasobów jest uzyskiwany dostęp i na jakim poziomie. Ze względów bezpieczeństwa zawsze zaleca się używanie jednostek usługi ze zautomatyzowanymi narzędziami, zamiast zezwalać im na logowanie za pomocą tożsamości użytkownika.

W tym artykule przedstawiono kroki tworzenia i resetowania jednostki usługi oraz uzyskiwania informacji o niej przy użyciu programu Azure PowerShell.

Uwaga

Gdy tworzysz jednostkę usługi za pomocą polecenia New-AzADServicePrincipal, dane wyjściowe zawierają poświadczenia, które należy chronić. Alternatywnie rozważ użycie tożsamości zarządzanych, aby uniknąć konieczności używania poświadczeń.

Wymagania wstępne

Tworzenie jednostki usługi

Utwórz jednostkę usługi za pomocą polecenia cmdlet New-AzADServicePrincipal. Podczas tworzenia jednostki usługi wybierz używany przez nią typ uwierzytelniania logowania.

Ważne

Począwszy od modułu Az programu PowerShell w wersji 7.x, polecenie New-AzADServicePrincipal nie przypisuje już roli Współautor do jednostki usługi. Aby przypisać określoną rolę do jednostki usługi, zobacz Kroki dodawania przypisania roli.

Uwaga

Jeśli Twoje konto nie ma uprawnień do tworzenia jednostki usługi, New-AzADServicePrincipal zwraca komunikat o błędzie zawierający komunikat "Niewystarczające uprawnienia do ukończenia operacji". Skontaktuj się z administratorem firmy Microsoft Entra, aby utworzyć jednostkę usługi.

W katalogu Microsoft Entra ID, w którym ustawienie użytkownika Użytkownicy mogą rejestrować aplikacje zostało ustawione na Nie, musisz być członkiem jednej z następujących wbudowanych ról microsoft Entra ID (które mają akcję: microsoft.directory/applications/createAsOwner lub microsoft.directory/applications/create):

Aby uzyskać więcej informacji na temat ustawień użytkownika w usłudze Microsoft Entra ID, zobacz Ograniczanie, kto może tworzyć aplikacje.

Istnieją dwa typy uwierzytelniania dostępne dla jednostek usługi: uwierzytelnianie oparte na hasłach i uwierzytelnianie oparte na certyfikatach.

Uwierzytelnianie oparte na hasłach

Ważne

Domyślna rola jednostki usługi uwierzytelniania opartego na hasłach to Współautor. Ta rola ma pełne uprawnienia do odczytu i zapisu dla konta platformy Azure. Aby uzyskać informacje na temat zarządzania przypisaniami ról, zobacz Zarządzanie rolami jednostki usługi.

Jeśli żadne inne parametry uwierzytelniania nie istnieją, jest używane uwierzytelnianie oparte na hasłach i otrzymujesz hasło utworzone losowo. Jeśli chcesz używać uwierzytelniania opartego na hasłach, ta metoda jest zalecana.

$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

Zwrócony obiekt zawiera PasswordCredentials.SecretText właściwość zawierającą wygenerowane hasło. Upewnij się, że ta wartość jest przechowywana w bezpiecznym miejscu, aby przeprowadzać uwierzytelnianie za pomocą jednostki usługi. Wartość nie będzie wyświetlana w danych wyjściowych konsoli. W przypadku utraty hasła zresetuj poświadczenia jednostki usługi.

Poniższy kod umożliwia wyeksportowanie wpisu tajnego:

$sp.PasswordCredentials.SecretText

Obiekt zwrócony przez polecenie New-AzADServicePrincipal zawiera elementy członkowskie Id i DisplayName. Każdego z nich można użyć do logowania przy użyciu jednostki usługi.

Ważne

Logowanie za pomocą jednostki usługi wymaga identyfikatora dzierżawy, w ramach którego utworzono jednostkę usługi. Aby pobrać dzierżawę aktywną w trakcie tworzenia jednostki usługi, uruchom następujące polecenie natychmiast po utworzeniu jednostki usługi:

(Get-AzContext).Tenant.Id

Uwierzytelnianie oparte na certyfikatach

Ważne

Podczas tworzenia jednostki usługi uwierzytelniania opartego na certyfikacie nie jest przypisywana rola domyślna. Aby uzyskać informacje na temat zarządzania przypisaniami ról, zobacz Zarządzanie rolami jednostki usługi.

Jednostki usługi używające uwierzytelniania opartego na certyfikatach są tworzone za pomocą parametru CertValue. Ten parametr przyjmuje ciąg ASCII szyfrowany przy użyciu algorytmu base64 z certyfikatu publicznego. Jest on reprezentowany przez plik PEM lub plik CRT lub CER zakodowany jako tekst. Kodowania plików binarnych certyfikatu publicznego nie są obsługiwane. W instrukcjach założono, że masz już dostępny certyfikat.

$cert = <public certificate as base64-encoded string>
$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName -CertValue $cert

Obiekt zwrócony z New-AzADServicePrincipal zawiera Id właściwości i DisplayName , których można użyć do logowania się przy użyciu jednostki usługi. Klienci logujący się przy użyciu jednostki usługi potrzebują również dostępu do klucza prywatnego certyfikatu.

Ważne

Logowanie za pomocą jednostki usługi wymaga identyfikatora dzierżawy, w ramach którego utworzono jednostkę usługi. Aby pobrać dzierżawę aktywną w trakcie tworzenia jednostki usługi, uruchom następujące polecenie natychmiast po utworzeniu jednostki usługi:

(Get-AzContext).Tenant.Id

Uzyskiwanie istniejącej jednostki usługi

Listę jednostek usługi dla aktywnej dzierżawy można pobrać przy użyciu polecenia Get AzADServicePrincipal. Domyślnie to polecenie zwraca wszystkie jednostki usługi w dzierżawie. Zwrócenie wyników w przypadku dużych organizacji może zająć dużo czasu. Zamiast tego zaleca się użycie jednego z opcjonalnych argumentów filtrowania po stronie serwera:

  • DisplayNameBeginsWith żąda jednostek usługi, które mają prefiks odpowiadający podanej wartości. Nazwa wyświetlana jednostki usługi jest wartością ustawioną przy użyciu opcji DisplayName podczas tworzenia.
  • DisplayName żąda dokładnego dopasowania nazwy jednostki usługi.

Zarządzanie rolami jednostki usługi

Program Azure PowerShell oferuje następujące polecenia cmdlet do zarządzania przypisaniami ról:

Aby uzyskać więcej informacji o rolach i kontroli dostępu opartej na rolach (RBAC), zobacz RBAC: Built-in roles (Kontrola dostępu oparta na rolach (RBAC): role wbudowane).

Poniższy przykład dodaje rolę Czytelnik i usuwa rolę Współautor :

New-AzRoleAssignment -ApplicationId <service principal application ID> -RoleDefinitionName 'Reader'
Remove-AzRoleAssignment -ObjectId <service principal object ID> -RoleDefinitionName 'Contributor'

Ważne

Polecenia cmdlet przypisania roli nie przyjmują identyfikatora obiektu jednostki usługi. Przyjmują one identyfikator skojarzonej aplikacji, który jest generowany podczas tworzenia. Aby uzyskać identyfikator aplikacji dla jednostki usługi, użyj polecenia Get-AzADServicePrincipal.

Uwaga

Jeśli Twoje konto nie ma uprawnień do przypisania roli, zostanie wyświetlony komunikat o błędzie informujący, że twoje konto "nie ma autoryzacji do wykonania akcji "Microsoft.Authorization/roleAssignments/write". Skontaktuj się z administratorem firmy Microsoft Entra, aby zarządzać rolami.

Dodanie roli nie ogranicza wcześniej przypisanych uprawnień. Po ograniczeniu uprawnień jednostki usługi rola Współautor powinna zostać usunięta.

Zmiany można zweryfikować przez wyświetlenie listy przypisanych ról:

Get-AzRoleAssignment -ServicePrincipalName ServicePrincipalName

Logowanie za pomocą jednostki usługi

Przetestuj poświadczenia i uprawnienia nowej jednostki usługi przez zalogowanie. Aby zalogować się przy użyciu jednostki usługi, potrzebna jest applicationId skojarzona z nią wartość i dzierżawa, w ramach której została utworzona.

Aby zalogować się przy użyciu jednostki usługi używającej hasła:

# Use the application ID as the username, and the secret as password
$credentials = Get-Credential
Connect-AzAccount -ServicePrincipal -Credential $credentials -Tenant <tenant ID>

Uwierzytelnianie oparte na certyfikatach wymaga, aby program Azure PowerShell mógł pobierać informacje z lokalnego magazynu certyfikatów na podstawie na odcisku palca certyfikatu.

Connect-AzAccount -ServicePrincipal -Tenant <TenantId> -CertificateThumbprint <Thumbprint> -ApplicationId <ApplicationId>

Aby uzyskać instrukcje dotyczące importowania certyfikatu do magazynu poświadczeń dostępnego w programie PowerShell, zobacz Uwierzytelnianie oparte na certyfikatach

Resetowanie poświadczeń

Jeśli nie pamiętasz poświadczeń dla jednostki usługi, użyj polecenia New-AzADSpCredential, aby dodać nowe poświadczenie z losowym hasłem. To polecenie cmdlet nie obsługuje poświadczeń zdefiniowanych przez użytkownika podczas resetowania hasła.

Ważne

Przed przypisaniem nowych poświadczeń możesz usunąć istniejące poświadczenia, aby zapobiec logowaniu przy ich użyciu. W tym celu użyj polecenia cmdlet Remove-AzADSpCredential:

Remove-AzADSpCredential -DisplayName ServicePrincipalName
$newCredential = New-AzADSpCredential -ServicePrincipalName ServicePrincipalName

Rozwiązywanie problemów

Jeśli zostanie wyświetlony błąd: "New-AzADServicePrincipal: Inny obiekt o tej samej wartości dla identyfikatorów właściwości już istnieje"., sprawdź, czy jednostka usługi o tej samej nazwie jeszcze nie istnieje.

Get-AzAdServicePrincipal -DisplayName ServicePrincipalName

Jeśli istniejąca jednostka usługi nie jest już potrzebna, możesz ją usunąć przy użyciu poniższego przykładu.

Remove-AzAdServicePrincipal -DisplayName ServicePrincipalName

Ten błąd może wystąpić również wtedy, gdy wcześniej utworzono jednostkę usługi dla aplikacji usługi Azure Active Directory. Po usunięciu jednostki usługi aplikacja będzie nadal dostępna. Ta aplikacja uniemożliwia utworzenie innej jednostki usługi o tej samej nazwie.

Możesz użyć następującego przykładu, aby sprawdzić, czy aplikacja Firmy Microsoft Entra o tej samej nazwie nie istnieje:

Get-AzADApplication -DisplayName ServicePrincipalName

Jeśli aplikacja o tej samej nazwie istnieje i nie jest już potrzebna, możesz ją usunąć przy użyciu poniższego przykładu.

Remove-AzADApplication -DisplayName ServicePrincipalName

W przeciwnym razie wybierz alternatywną nazwę nowej jednostki usługi, którą próbujesz utworzyć.