Zautomatyzowane narzędzia korzystające z usług platformy Azure powinny zawsze mieć ograniczone uprawnienia. Zamiast logowania się aplikacji jako w pełni uprzywilejowany użytkownik, platforma Azure oferuje zasady usługi.
Podmiot usługi Microsoft Azure to tożsamość utworzona do użycia z aplikacjami, hostowanymi usługami i zautomatyzowanymi narzędziami w celu uzyskania dostępu do zasobów Microsoft 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 z zautomatyzowanymi narzędziami, a nie zezwalanie im na logowanie się przy użyciu tożsamości użytkownika.
W tym artykule przedstawiono kroki tworzenia, uzyskiwania informacji oraz resetowania zasad usługi przy użyciu programu Azure PowerShell.
Przestroga
Podczas tworzenia obiektu głównego usługi przy użyciu polecenia New-AzADServicePrincipal wynik zawiera poświadczenia, które należy chronić. Alternatywnie rozważ użycie tożsamości zarządzanych, aby uniknąć konieczności używania poświadczeń.
- Jeśli zdecydujesz się używać programu Azure PowerShell lokalnie:
- Jeśli zdecydujesz się używać usługi Azure Cloud Shell:
Utwórz jednostkę usługi przy użyciu polecenia cmdlet New-AzADServicePrincipal. Podczas tworzenia jednostki usługi wybierz używany przez nią typ uwierzytelniania logowania.
Uwaga
Jeśli Twoje konto nie ma uprawnień do tworzenia głównego użytkownika usługi, New-AzADServicePrincipal
zwraca komunikat o błędzie zawierający "Niewystarczające uprawnienia do ukończenia operacji". Skontaktuj się z administratorem Microsoft Entra, aby utworzyć główny element 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ółtwórca. Ta rola ma pełne uprawnienia do odczytu i zapisu na koncie 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żyć uwierzytelniania opartego na hasłach, zalecana jest ta metoda.
$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName
Zwrócony obiekt zawiera właściwość PasswordCredentials.SecretText
zawierającą wygenerowane hasło. Upewnij się, że przechowujesz tę wartość w bezpiecznym miejscu, aby uwierzytelnić się za pomocą głównej aplikacji usługi. Jego wartość nie będzie wyświetlana w danych wyjściowych konsoli. Jeśli zgubisz hasło, zresetuj dane uwierzytelniające elementu głównego usługi.
Poniższy kod umożliwia wyeksportowanie wpisu tajnego:
$sp.PasswordCredentials.SecretText
Obiekt zwrócony z New-AzADServicePrincipal
zawiera elementy członkowskie Id
i DisplayName
, z których każdy można wykorzystać do uwierzytelniania za pomocą głównego programu (service principal).
Ważne
Zalogowanie się przy użyciu jednostki usługi wymaga identyfikatora dzierżawy, w ramach którego została utworzona jednostka usługi. Aby uzyskać aktywnego dzierżawcę podczas 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 opartej na uwierzytelnianiu certyfikatami nie jest przypisywana żadna domyślna rola. 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. Reprezentuje to plik PEM lub kodowany tekstowo plik CRT lub CER. Kodowanie binarne certyfikatu publicznego nie jest obsługiwane. W tych 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 właściwości Id
i DisplayName
, z których każda może być użyta do logowania się przy użyciu głównego konta usługi. Klienci, którzy logują się przy użyciu jednostki usługi, również potrzebują dostępu do klucza prywatnego certyfikatu.
Ważne
Zalogowanie się przy użyciu jednostki usługi wymaga identyfikatora dzierżawy, w ramach którego została utworzona jednostka usługi. Aby uzyskać aktywnego dzierżawcę podczas tworzenia jednostki usługi, uruchom następujące polecenie natychmiast po utworzeniu jednostki usługi:
(Get-AzContext).Tenant.Id
Uzyskaj istniejącą jednostkę usługi
Listę podmiotów zabezpieczeń usługi dla aktywnego najemcy można pobrać przy użyciu polecenia Get-AzADServicePrincipal. Domyślnie to polecenie zwraca wszystkie zasady usług u dzierżawcy. W przypadku dużych organizacji uzyskanie wyników 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 to wartość ustawiona przy użyciu DisplayName
podczas tworzenia.
-
DisplayName
żąda dokładnego dopasowania nazwy głównej usługi.
Zarządzanie rolami głównej usługi
Program Azure PowerShell posiada 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 głównego serwisowego. Przyjmują identyfikator skojarzonej aplikacji, który jest generowany w momencie jej tworzenia. Aby uzyskać identyfikator aplikacji dla głównego użytkownika 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 przy użyciu usługi głównej
Przetestuj poświadczenia i uprawnienia nowej jednostki usługi poprzez logowanie się. Aby zalogować się przy użyciu obiektu usługi, potrzebna jest wartość applicationId
skojarzona z tym obiektem oraz dzierżawca, w ramach którego został on utworzony.
Aby zalogować się za pomocą podmiotu usługi używającego 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 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
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. Cmdlet nie obsługuje poświadczeń użytkownika 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
Jeśli zostanie wyświetlony błąd: "New-AzADServicePrincipal: Inny obiekt o tej samej wartości dla property identifierUris już istnieje"., sprawdź, czy obiekt 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ąć, korzystając z poniższego przykładu.
Remove-AzAdServicePrincipal -DisplayName ServicePrincipalName
Ten błąd może wystąpić również wtedy, gdy wcześniej utworzono obiekt główny usługi dla aplikacji 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żna ją usunąć, korzystając z poniższego przykładu.
Remove-AzADApplication -DisplayName ServicePrincipalName
W przeciwnym razie wybierz alternatywną nazwę nowej jednostki usługi, którą próbujesz utworzyć.