Tworzenie jednostki usługi platformy Azure za pomocą programu Azure PowerShell
Ostrzeżenie
Moduł AzureRM PowerShell został oficjalnie przestarzały od 29 lutego 2024 r. Zaleca się migrowanie użytkowników z modułu AzureRM do modułu Az programu PowerShell w celu zapewnienia ciągłej obsługi i aktualizacji.
Mimo że moduł AzureRM może nadal działać, nie jest już utrzymywany ani obsługiwany, umieszczając wszelkie dalsze zastosowania według uznania i ryzyka użytkownika. Zapoznaj się z naszymi zasobami migracji, aby uzyskać wskazówki dotyczące przejścia do modułu Az.
Jeśli planujesz zarządzać aplikacją lub usługą za pomocą programu Azure PowerShell, uruchom ją w ramach jednostki usługi Microsoft Entra platformy Azure, a nie własnych poświadczeń. W tym artykule przedstawiono kroki umożliwiające utworzenie podmiotu zabezpieczeń za pomocą programu Azure PowerShell.
Uwaga
Za pośrednictwem witryny Azure Portal możesz również utworzyć jednostkę usługi. Aby uzyskać więcej szczegółów, przeczytaj artykuł Use portal to create Active Directory application and service principal that can access resources (Używanie witryny Portal do tworzenia aplikacji i jednostki usługi Active Directory używanych do uzyskiwania dostępu do zasobów).
Co to jest „jednostka usługi”?
Jednostka usługi platformy Azure to tożsamość zabezpieczeń używana przez aplikacje, usługi i narzędzia automatyzacji utworzone przez użytkownika w celu uzyskania dostępu do określonych zasobów platformy Azure. Można ją traktować jako „tożsamość użytkownika” (nazwa logowania i hasło lub certyfikat) z określoną rolą i ściśle kontrolowanymi uprawnieniami. W odróżnieniu od ogólnej tożsamości użytkownika, jednostka usługi powinna wykonywać tylko określone czynności. Poprawia to bezpieczeństwo, jeśli tylko przyznasz jej minimalny poziom uprawnień potrzebny do wykonywania zadań zarządzania.
Sprawdzenie własnego poziomu uprawnień
Najpierw musisz mieć wystarczające uprawnienia zarówno w identyfikatorze Entra firmy Microsoft, jak i subskrypcji platformy Azure. Musisz mieć możliwość tworzenia aplikacji w usłudze Active Directory i przypisywania roli do jednostki usługi.
Najłatwiejszym sposobem sprawdzenia, czy Twoje konto ma odpowiednie uprawnienia, jest skorzystanie z portalu. Zobacz Sprawdzanie wymaganego uprawnienia w portalu.
Tworzenie jednostki usługi dla aplikacji
Po zalogowaniu się na koncie platformy Azure można utworzyć jednostkę usługi. Aby zidentyfikować wdrożoną aplikację, musisz użyć jednej z następujących metod:
- Unikatowa nazwa wdrożonej aplikacji, na przykład „MyDemoWebApp” w poniższych przykładach, lub
- Identyfikator aplikacji, unikatowy identyfikator GUID skojarzony z wdrożoną aplikacją, usługą lub obiektem
Pobieranie informacji o aplikacji
Aby uzyskać informacje o aplikacji, można użyć polecenia cmdlet Get-AzureRmADApplication
.
Get-AzureRmADApplication -DisplayNameStartWith MyDemoWebApp
DisplayName : MyDemoWebApp
ObjectId : 00001111-aaaa-2222-bbbb-3333cccc4444
IdentifierUris : {http://MyDemoWebApp}
HomePage : http://www.contoso.com
Type : Application
ApplicationId : 00001111-aaaa-2222-bbbb-3333cccc4444
AvailableToOtherTenants : False
AppPermissions :
ReplyUrls : {}
Tworzenie jednostki usługi dla swojej aplikacji
Do utworzenia jednostki usługi służy polecenie cmdlet New-AzureRmADServicePrincipal
.
$servicePrincipal = New-AzureRmADServicePrincipal -ApplicationId 00001111-aaaa-2222-bbbb-3333cccc4444
Secret : System.Security.SecureString
ServicePrincipalNames : {00001111-aaaa-2222-bbbb-3333cccc4444, http://MyDemoWebApp}
ApplicationId : 00001111-aaaa-2222-bbbb-3333cccc4444
DisplayName : MyDemoWebApp
Id : 698138e7-d7b6-4738-a866-b4e3081a69e4
AdfsId :
Type : ServicePrincipal
W tym momencie możesz bezpośrednio użyć właściwości $servicePrincipal.Secret polecenia Connect-AzureRmAccount (zobacz „Logowanie za pomocą jednostki usługi” poniżej) lub przekonwertować ten ciąg SecureString na ciąg w postaci zwykłego tekstu do późniejszego użycia:
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($servicePrincipal.Secret)
$password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($BSTR)
Logowanie za pomocą jednostki usługi
Możesz teraz zalogować się jako nowa jednostka usługi dla swojej aplikacji przy użyciu podanego przez Ciebie identyfikatora appId i automatycznie wygenerowanego hasła. Potrzebujesz także identyfikatora dzierżawy dla jednostki usługi. Identyfikator dzierżawy jest wyświetlany po zalogowaniu się do platformy Azure przy użyciu osobistych poświadczeń. Aby zalogować się przy użyciu jednostki usługi, użyj następujących poleceń:
$cred = New-Object System.Management.Automation.PSCredential ("00001111-aaaa-2222-bbbb-3333cccc4444", $servicePrincipal.Secret)
Connect-AzureRmAccount -Credential $cred -ServicePrincipal -TenantId 00000000-0000-0000-0000-000000000000
Po pomyślnym zalogowaniu się zostaną wyświetlone dane wyjściowe, takie jak:
Environment : AzureCloud
Account : 00001111-aaaa-2222-bbbb-3333cccc4444
TenantId : 00000000-0000-0000-0000-000000000000
SubscriptionId :
SubscriptionName :
CurrentStorageAccount :
Gratulacje! Możesz użyć tych poświadczeń do uruchomienia aplikacji. Następnie musisz dostosować uprawnienia jednostki usługi.
Zarządzanie rolami
Uwaga
Kontrola dostępu oparta na rolach (RBAC) platformy Azure to model definiowania ról użytkowników i jednostek usługi oraz zarządzania nimi. Role mają skojarzone ze sobą zestawy uprawnień umożliwiające wskazanie zasobów, które nazwa główna może odczytywać, zapisywać, do których może uzyskać dostęp lub którymi może zarządzać. Aby uzyskać więcej informacji o kontroli dostępu opartej na rolach i samych rolach, zobacz RBAC: Built-in roles (Kontrola dostępu oparta na rolach [RBAC]: wbudowane role).
Program Azure PowerShell udostępnia następujące polecenia cmdlet do zarządzania przypisaniami ról:
Rolą domyślną dla jednostki usługi jest Współautor. Biorąc pod uwagę szerokie uprawnienia tej roli, jej użycie może nie być najlepszą opcją, w zależności od zakresu interakcji aplikacji z usługami platformy Azure. Rola Czytelnik jest bardziej restrykcyjna i jest dobrym wyborem dla aplikacji potrzebujących dostępu tylko do odczytu. Za pomocą witryny Azure Portal możesz wyświetlić szczegóły dotyczące uprawnień specyficznych dla ról lub utworzyć role niestandardowe.
Zmienimy teraz poprzedni przykład — dodamy rolę Czytelnik i usuniemy rolę Współautor:
New-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4 -RoleDefinitionName Reader
RoleAssignmentId : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG/providers/Microsoft.Authorization/roleAssignments/818892f2-d075-46a1-a3a2-3a4e1a12fcd5
Scope : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG
DisplayName : MyDemoWebApp
SignInName :
RoleDefinitionName : Reader
RoleDefinitionId : 00001111-aaaa-2222-bbbb-3333cccc4444
ObjectId : 698138e7-d7b6-4738-a866-b4e3081a69e4
ObjectType : ServicePrincipal
Remove-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4 -RoleDefinitionName Contributor
Aby wyświetlić obecnie przypisane role:
Get-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4
RoleAssignmentId : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG/providers/Microsoft.Authorization/roleAssignments/0906bbd8-9982-4c03-8dae-aeaae8b13f9e
Scope : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG
DisplayName : MyDemoWebApp
SignInName :
RoleDefinitionName : Reader
RoleDefinitionId : 00001111-aaaa-2222-bbbb-3333cccc4444
ObjectId : 698138e7-d7b6-4738-a866-b4e3081a69e4
ObjectType : ServicePrincipal
Inne polecenia cmdlet programu Azure PowerShell umożliwiające zarządzania rolami:
- Get-AzureRmRoleDefinition
- New-AzureRmRoleDefinition
- Remove-AzureRmRoleDefinition
- Set-AzureRmRoleDefinition
Zmienianie poświadczeń podmiotu zabezpieczeń
Dobrą praktyką w zakresie zabezpieczeń jest regularne sprawdzanie uprawnień i aktualizowanie haseł. Warto też zarządzać poświadczeniami zabezpieczeń i modyfikować je w miarę wprowadzania zmian w aplikacji. Można na przykład zmienić hasło jednostki usługi, tworząc nowe hasło i usuwając stare.
Dodawanie nowego hasła dla jednostki usługi
New-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
Secret : System.Security.SecureString
StartDate : 11/16/2018 12:38:23 AM
EndDate : 11/16/2019 12:38:23 AM
KeyId : 00001111-aaaa-2222-bbbb-3333cccc4444
Type : Password
Pobieranie listy poświadczeń dla jednostki usługi
Get-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
StartDate EndDate KeyId Type
--------- ------- ----- ----
3/8/2017 5:58:24 PM 3/8/2018 5:58:24 PM 00001111-aaaa-2222-bbbb-3333cccc4444 Password
5/5/2016 4:55:27 PM 5/5/2017 4:55:27 PM 00001111-aaaa-2222-bbbb-3333cccc4444 Password
Usuwanie starego hasła dla jednostki usługi
Remove-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp -KeyId 00001111-aaaa-2222-bbbb-3333cccc4444
Confirm
Are you sure you want to remove credential with keyId '00001111-aaaa-2222-bbbb-3333cccc4444' for
service principal objectId '698138e7-d7b6-4738-a866-b4e3081a69e4'.
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y
Sprawdzanie listy poświadczeń dla jednostki usługi
Get-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
StartDate EndDate KeyId Type
--------- ------- ----- ----
3/8/2017 5:58:24 PM 3/8/2018 5:58:24 PM 00001111-aaaa-2222-bbbb-3333cccc4444 Password
Pobieranie informacji o jednostce usługi
$svcprincipal = Get-AzureRmADServicePrincipal -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4
$svcprincipal | Select-Object -Property *
ServicePrincipalNames : {http://MyDemoWebApp, 00001111-aaaa-2222-bbbb-3333cccc4444}
ApplicationId : 00001111-aaaa-2222-bbbb-3333cccc4444
DisplayName : MyDemoWebApp
Id : 698138e7-d7b6-4738-a866-b4e3081a69e4
Type : ServicePrincipal