Tworzenie jednostki usługi z certyfikatem przy użyciu programu Azure PowerShell
Jeśli masz aplikację lub skrypt, które potrzebują dostępu do zasobów, możesz skonfigurować tożsamość aplikacji i uwierzytelnić aplikację przy użyciu jej własnych poświadczeń. Ta tożsamość jest określana jako jednostka usługi. Takie podejście umożliwia:
- Przypisywanie uprawnień do tożsamości aplikacji — są to uprawnienia inne niż Twoje. Zazwyczaj te uprawnienia są ograniczone tylko do czynności, które aplikacja musi wykonywać.
- Używanie certyfikatu do uwierzytelnienia podczas wykonywania skryptu nienadzorowanego.
Ważne
Zamiast tworzyć jednostkę usługi, rozważ użycie tożsamości zarządzanych dla zasobów platformy Azure dla tożsamości aplikacji. Jeśli kod jest uruchamiany w usłudze obsługującej tożsamości zarządzane i uzyskuje dostęp do zasobów obsługujących uwierzytelnianie firmy Microsoft Entra, tożsamości zarządzane są dla Ciebie lepszym rozwiązaniem. Aby dowiedzieć się więcej o tożsamościach zarządzanych dla zasobów platformy Azure, w tym o usługach, które obecnie obsługują, zobacz Co to są tożsamości zarządzane dla zasobów platformy Azure?.
W tym artykule przedstawiono sposób tworzenia jednostki usługi uwierzytelnianej przy użyciu certyfikatu. Aby skonfigurować jednostkę przy użyciu hasła, zobacz Tworzenie jednostki usługi platformy Azure za pomocą programu Azure PowerShell.
Aby wykonać czynności z tego artykułu, musisz mieć najnowszą wersję programu PowerShell.
Uwaga
Do interakcji z platformą Azure zalecamy używanie modułu Azure Az w programie PowerShell. Zobacz Instalowanie programu Azure PowerShell, aby rozpocząć. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.
Wymagane uprawnienia
Aby ukończyć ten artykuł, musisz mieć wystarczające uprawnienia zarówno w ramach identyfikatora Microsoft Entra ID, jak i subskrypcji platformy Azure. W szczególności musisz mieć możliwość utworzenia aplikacji w usłudze Microsoft Entra ID i przypisania jednostki usługi do roli.
Najprostszym sposobem sprawdzenia, czy twoje konto ma odpowiednie uprawnienia, jest centrum administracyjne firmy Microsoft Entra.
Przypisywanie aplikacji do roli
Aby uzyskać dostęp do zasobów w ramach subskrypcji, musisz przypisać aplikację do roli. Zdecyduj, która rola oferuje odpowiednie uprawnienia dla aplikacji. Aby dowiedzieć się więcej o dostępnych rolach, zobacz Role wbudowane platformy Azure.
Zakres można ustawić na poziomie subskrypcji, grupy zasobów lub zasobu. Uprawnienia są dziedziczone do niższych poziomów zakresu. Na przykład dodanie aplikacji do roli Czytelnik dla grupy zasobów oznacza, że może odczytać grupę zasobów i wszystkie zawarte w niej zasoby. Aby umożliwić aplikacji wykonywanie akcji, takich jak ponowne uruchomienie, uruchamianie i zatrzymywanie wystąpień, wybierz rolę Współautor .
Tworzenie jednostki usługi z certyfikatem z podpisem własnym
Poniższy przykład przedstawia prosty scenariusz. Używa polecenia New-AzADServicePrincipal do utworzenia jednostki usługi z certyfikatem z podpisem własnym i używa polecenia New-AzRoleAssignment , aby przypisać rolę Czytelnik do jednostki usługi. Zakres przypisania roli to aktualnie wybrana subskrypcja platformy Azure. Aby wybrać inną subskrypcję, użyj polecenia Set-AzContext.
Uwaga
Polecenie cmdlet New-SelfSignedCertificate i moduł PKI nie są obecnie obsługiwane w programie PowerShell Core.
$cert = New-SelfSignedCertificate -CertStoreLocation "cert:\CurrentUser\My" `
-Subject "CN=exampleappScriptCert" `
-KeySpec KeyExchange
$keyValue = [System.Convert]::ToBase64String($cert.GetRawCertData())
$sp = New-AzADServicePrincipal -DisplayName exampleapp `
-CertValue $keyValue `
-EndDate $cert.NotAfter `
-StartDate $cert.NotBefore
Sleep 20
New-AzRoleAssignment -RoleDefinitionName Reader -ServicePrincipalName $sp.AppId
Przykład jest w stanie uśpienia przez 20 sekund, aby umożliwić propagację nowej jednostki usługi przez cały identyfikator Entra firmy Microsoft. Jeśli skrypt nie czeka wystarczająco długo, zostanie wyświetlony błąd z informacją: "Podmiot zabezpieczeń {ID} nie istnieje w katalogu {DIR-ID}". Aby rozwiązać ten błąd, zaczekaj chwilę, a następnie ponownie uruchom polecenie New-AzRoleAssignment .
Zakres przypisania roli do określonej grupy zasobów można określić za pomocą parametru ResourceGroupName. Zakres konkretnego zasobu można również określić za pomocą parametrów ResourceType i ResourceName.
Jeśli nie masz systemu Windows 10 lub Windows Server 2016, pobierz polecenie cmdlet New-SelfSignedCertificateEx z usługi PKI Solutions. Wyodrębnij jego zawartość i zaimportuj potrzebne polecenie cmdlet.
# Only run if you could not use New-SelfSignedCertificate
Import-Module -Name c:\ExtractedModule\New-SelfSignedCertificateEx.ps1
W skrypcie zastąp dwa poniższe wiersze w celu wygenerowania certyfikatu.
New-SelfSignedCertificateEx -StoreLocation CurrentUser `
-Subject "CN=exampleapp" `
-KeySpec "Exchange" `
-FriendlyName "exampleapp"
$cert = Get-ChildItem -path Cert:\CurrentUser\my | where {$PSitem.Subject -eq 'CN=exampleapp' }
Udostępnianie certyfikatu za pośrednictwem zautomatyzowanego skryptu programu PowerShell
Za każdym razem, gdy logujesz się jako jednostka usługi, podaj identyfikator dzierżawy katalogu dla aplikacji usługi AD. Dzierżawa jest wystąpieniem identyfikatora Entra firmy Microsoft.
$TenantId = (Get-AzSubscription -SubscriptionName "Contoso Default").TenantId
$ApplicationId = (Get-AzADApplication -DisplayNameStartWith exampleapp).AppId
$Thumbprint = (Get-ChildItem cert:\CurrentUser\My\ | Where-Object {$_.Subject -eq "CN=exampleappScriptCert" }).Thumbprint
Connect-AzAccount -ServicePrincipal `
-CertificateThumbprint $Thumbprint `
-ApplicationId $ApplicationId `
-TenantId $TenantId
Tworzenie jednostki usługi z certyfikatem od urzędu certyfikacji
W poniższym przykładzie użyto certyfikatu wystawionego przez urząd certyfikacji w celu utworzenia jednostki usługi. Zakres przypisania obejmuje określoną subskrypcję platformy Azure. Dodaje jednostkę usługi do roli Czytelnik . Jeśli podczas przypisywania roli wystąpi błąd, zostanie ponownie podjęta próba przypisania.
Param (
[Parameter(Mandatory=$true)]
[String] $ApplicationDisplayName,
[Parameter(Mandatory=$true)]
[String] $SubscriptionId,
[Parameter(Mandatory=$true)]
[String] $CertPath,
[Parameter(Mandatory=$true)]
[String] $CertPlainPassword
)
Connect-AzAccount
Import-Module Az.Resources
Set-AzContext -Subscription $SubscriptionId
$CertPassword = ConvertTo-SecureString $CertPlainPassword -AsPlainText -Force
$PFXCert = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList @($CertPath, $CertPassword)
$KeyValue = [System.Convert]::ToBase64String($PFXCert.GetRawCertData())
$ServicePrincipal = New-AzADServicePrincipal -DisplayName $ApplicationDisplayName
New-AzADSpCredential -ObjectId $ServicePrincipal.Id -CertValue $KeyValue -StartDate $PFXCert.NotBefore -EndDate $PFXCert.NotAfter
Get-AzADServicePrincipal -ObjectId $ServicePrincipal.Id
$NewRole = $null
$Retries = 0;
While ($NewRole -eq $null -and $Retries -le 6)
{
# Sleep here for a few seconds to allow the service principal application to become active (should only take a couple of seconds normally)
Sleep 15
New-AzRoleAssignment -RoleDefinitionName Reader -ServicePrincipalName $ServicePrincipal.AppId | Write-Verbose -ErrorAction SilentlyContinue
$NewRole = Get-AzRoleAssignment -ObjectId $ServicePrincipal.Id -ErrorAction SilentlyContinue
$Retries++;
}
$NewRole
Udostępnianie certyfikatu za pośrednictwem zautomatyzowanego skryptu programu PowerShell
Za każdym razem, gdy logujesz się jako jednostka usługi, podaj identyfikator dzierżawy katalogu dla aplikacji usługi AD. Dzierżawa jest wystąpieniem identyfikatora Entra firmy Microsoft.
Param (
[Parameter(Mandatory=$true)]
[String] $CertPath,
[Parameter(Mandatory=$true)]
[String] $CertPlainPassword,
[Parameter(Mandatory=$true)]
[String] $ApplicationId,
[Parameter(Mandatory=$true)]
[String] $TenantId
)
$CertPassword = ConvertTo-SecureString $CertPlainPassword -AsPlainText -Force
$PFXCert = New-Object `
-TypeName System.Security.Cryptography.X509Certificates.X509Certificate2 `
-ArgumentList @($CertPath, $CertPassword)
$Thumbprint = $PFXCert.Thumbprint
Connect-AzAccount -ServicePrincipal `
-CertificateThumbprint $Thumbprint `
-ApplicationId $ApplicationId `
-TenantId $TenantId
W identyfikatorach aplikacji i dzierżawy nie jest uwzględniana wielkość liter, więc można je osadzać bezpośrednio w skrypcie. Jeśli musisz pobrać identyfikator dzierżawy, użyj polecenia:
(Get-AzSubscription -SubscriptionName "Contoso Default").TenantId
Jeśli musisz pobrać identyfikator aplikacji, użyj polecenia:
(Get-AzADApplication -DisplayNameStartWith {display-name}).AppId
Zmienianie poświadczeń
Aby zmienić poświadczenia aplikacji usługi AD z powodu naruszenia zabezpieczeń lub wygaśnięcia poświadczeń, użyj poleceń cmdlet Remove-AzADAppCredential i New-AzADAppCredential.
Aby usunąć wszystkie poświadczenia aplikacji, należy użyć polecenia:
Get-AzADApplication -DisplayName exampleapp | Remove-AzADAppCredential
Aby dodać wartość certyfikatu, należy utworzyć certyfikat z podpisem własnym, jak pokazano w tym artykule. Następnie należy użyć polecenia:
Get-AzADApplication -DisplayName exampleapp | New-AzADAppCredential `
-CertValue $keyValue `
-EndDate $cert.NotAfter `
-StartDate $cert.NotBefore
Debugowanie
Podczas tworzenia jednostki usługi mogą wystąpić następujące błędy:
"Authentication_Unauthorized" lub "Nie znaleziono subskrypcji w kontekście". — Ten błąd jest wyświetlany, gdy Twoje konto nie ma wymaganych uprawnień do identyfikatora Entra firmy Microsoft w celu zarejestrowania aplikacji. Zazwyczaj ten błąd występuje, gdy tylko administratorzy w identyfikatorze Entra firmy Microsoft mogą rejestrować aplikacje, a Twoje konto nie jest administratorem. Poproś administratora o przypisanie Cię do roli administratora lub umożliwienie użytkownikom rejestrowania aplikacji.
Twoje konto "nie ma autoryzacji do wykonania akcji "Microsoft.Authorization/roleAssignments/write" w zakresie "/subscriptions/{guid}". — Ten błąd jest wyświetlany, gdy twoje konto nie ma wystarczających uprawnień do przypisania roli do tożsamości. Poproś administratora subskrypcji o dodanie Cię do roli Administrator dostępu użytkowników.
Następne kroki
- Aby skonfigurować jednostkę usługi przy użyciu hasła, zobacz Tworzenie jednostki usługi platformy Azure przy użyciu programu Azure PowerShell lub Tworzenie jednostki usługi platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure.
- Aby uzyskać bardziej szczegółowy opis aplikacji i jednostek usługi, zobacz Application Objects and Service Principal Objects (Obiekty aplikacji i obiekty jednostki usługi).
- Aby uzyskać więcej informacji na temat uwierzytelniania entra firmy Microsoft, zobacz Scenariusze uwierzytelniania dla identyfikatora Entra firmy Microsoft.
- Aby uzyskać informacje na temat pracy z rejestracjami aplikacji przy użyciu programu Microsoft Graph, zobacz dokumentację interfejsu API aplikacji .