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
- Jeśli zdecydujesz się używać programu Azure PowerShell lokalnie:
- Zainstaluj moduł Az programu PowerShell.
- Połącz się z kontem platformy Azure przy użyciu polecenia cmdlet Connect-AzAccount .
- Jeśli zdecydujesz się używać usługi Azure Cloud Shell:
- Aby uzyskać więcej informacji, zobacz Omówienie usługi Azure Cloud Shell .
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
):
- Deweloper aplikacji
- Administrator aplikacji
- Administrator aplikacji w chmurze
- Globalny administrator usługi
- Administrator tożsamości hybrydowej
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 opcjiDisplayName
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ć.