Tanúsítvánnyal rendelkező szolgáltatásnév létrehozása az Azure PowerShell használatával

Ha olyan alkalmazása van, amelynek erőforrásokhoz kell hozzáférnie, létrehozhat egy identitást az alkalmazásnak, és hitelesítheti az alkalmazást annak saját hitelesítő adataival. Ezt az identitást szolgáltatásnévnek nevezzük. Ez a megközelítés lehetővé teszi az alábbiakat:

  • A saját engedélyeitől eltérő engedélyek hozzárendelése az alkalmazásidentitáshoz. Ezek az engedélyek jellemzően csak azt engedélyezik, amire az alkalmazásnak szüksége van.
  • Tanúsítvány használata hitelesítéshez szkriptek felügyelet nélküli futtatásakor.

Fontos

Szolgáltatásnév létrehozása helyett érdemes lehet felügyelt identitásokat használni az Azure-erőforrásokhoz az alkalmazás-identitáshoz. Ha a kód olyan szolgáltatáson fut, amely támogatja a felügyelt identitásokat, és olyan erőforrásokhoz fér hozzá, amelyek támogatják a Microsoft Entra-hitelesítést, a felügyelt identitások jobb választásnak számítanak. Ha többet szeretne megtudni az Azure-erőforrások felügyelt identitásairól, beleértve azt is, hogy mely szolgáltatások támogatják azt, olvassa el az Azure-erőforrások felügyelt identitásainak ismertetése című témakört.

Ez a cikk bemutatja, hogy hogyan hozhat létre egy szolgáltatásnevet tanúsítvánnyal történő hitelesítéshez. To set up a service principal with password, see Create an Azure service principal with Azure PowerShell.

A cikk lépéseinek követéséhez a PowerShell legújabb verzióját kell használnia.

Megjegyzés:

We recommend that you use the Azure Az PowerShell module to interact with Azure. See Install Azure PowerShell to get started. To learn how to migrate to the Az PowerShell module, see Migrate Azure PowerShell from AzureRM to Az.

Szükséges engedélyek

A cikk elvégzéséhez a Microsoft Entra-azonosítóban és az Azure-előfizetésben is megfelelő engedélyekkel kell rendelkeznie. Pontosabban létre kell tudnia hozni egy alkalmazást a Microsoft Entra-azonosítóban, és hozzárendelni a szolgáltatásnevet egy szerepkörhöz.

A legegyszerűbben a portálon ellenőrizheti, hogy rendelkezik-e megfelelő jogosultságokkal. Lásd: Szükséges engedélyek ellenőrzése.

Az alkalmazás hozzárendelése egy szerepkörhöz

Az előfizetés erőforrásainak eléréséhez hozzá kell rendelnie az alkalmazást egy szerepkörhöz. Döntse el, hogy melyik szerepkör nyújtja a megfelelő engedélyeket az alkalmazáshoz. Az elérhető szerepkörökről az Azure beépített szerepköreiből tájékozódhat.

A hatókört az előfizetés, az erőforráscsoport vagy az erőforrás szintjén állíthatja be. Az engedélyek a hatókör alacsonyabb szintjeire öröklődnek. Ha például hozzáad egy alkalmazást egy erőforráscsoport Olvasó szerepköréhez, az azt jelenti, hogy beolvassa az erőforráscsoportot és a benne lévő erőforrásokat. Ha engedélyezni szeretné az alkalmazás számára az újraindításhoz, a példányok elindításához és leállításához hasonló műveletek végrehajtását, válassza ki a Közreműködő szerepkört.

Szolgáltatásnév létrehozása önaláírt tanúsítvánnyal

Az alábbi példa egy egyszerű forgatókönyvet követ. A New-AzADServicePrincipal használatával önaláírt tanúsítvánnyal rendelkező szolgáltatásnevet hoz létre, és a New-AzRoleAssignment használatával rendeli hozzá az Olvasó szerepkört a szolgáltatásnévhez. A szerepkör-hozzárendelés hatóköre az aktuális Azure-előfizetés. Másik előfizetés kiválasztásához használja a Set-AzContext parancsot.

Megjegyzés:

A New-SelfSignedCertificate parancsmag és a PKI modul jelenleg nem támogatott a PowerShell Core-ban.

$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

A példa 20 másodpercig alszik, hogy az új szolgáltatásnév propagálási ideje a Microsoft Entra-azonosítón keresztül legyen. Ha a szkript nem vár elég sokáig, hibaüzenet jelenik meg: "{ID} főnév nem létezik a(z) {DIR-ID} könyvtárban." A hiba megoldásához várjon egy percet, majd futtassa újra a New-AzRoleAssignment parancsot.

A szerepkör-hozzárendelés hatókörét beállíthatja egy adott erőforráscsoportra a ResourceGroupName paraméter használatával. Egy adott erőforrásra is beállíthatja a hatókört a ResourceType és a ResourceName paraméter együttes használatával.

Ha nincs Windows 10 vagy Windows Server 2016, töltse le a New-SelfSignedCertificateEx parancsmagot a PKI Solutionsből. Bontsa ki a fájl tartalmát, és importálja a szükséges parancsmagot.

# Only run if you could not use New-SelfSignedCertificate
Import-Module -Name c:\ExtractedModule\New-SelfSignedCertificateEx.ps1

A szkriptben helyettesítse be az alábbi két sort a tanúsítvány generálásához.

New-SelfSignedCertificateEx -StoreLocation CurrentUser `
  -Subject "CN=exampleapp" `
  -KeySpec "Exchange" `
  -FriendlyName "exampleapp"
$cert = Get-ChildItem -path Cert:\CurrentUser\my | where {$PSitem.Subject -eq 'CN=exampleapp' }

Tanúsítvány biztosítása automatizált PowerShell-szkripttel

Amikor szolgáltatásnévként jelentkezik be, adja meg az AD-alkalmazás címtárának bérlőazonosítóját. A bérlő a Microsoft Entra-azonosító egy példánya.

$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

Szolgáltatásnév létrehozása hitelesítésszolgáltatótól származó tanúsítvánnyal

Az alábbi példa egy hitelesítésszolgáltatótól származó tanúsítvánnyal hoz létre egy szolgáltatásnevet. A hozzárendelés hatóköre a megadott Azure-előfizetés. Hozzáadja a szolgáltatásnevet az Olvasó szerepkörhöz. Ha hiba történik a szerepkör-hozzárendelés során, a szkript megismétli a hozzárendelést.

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

Tanúsítvány biztosítása automatizált PowerShell-szkripttel

Amikor szolgáltatásnévként jelentkezik be, adja meg az AD-alkalmazás címtárának bérlőazonosítóját. A bérlő a Microsoft Entra-azonosító egy példánya.

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

Az alkalmazásazonosító és a bérlőazonosító nem bizalmas adat, ezért beágyazhatja közvetlenül a szkriptjébe. A bérlőazonosító megállapításához használja a következőt:

(Get-AzSubscription -SubscriptionName "Contoso Default").TenantId

Az alkalmazásazonosító megállapításához használja a következőt:

(Get-AzADApplication -DisplayNameStartWith {display-name}).AppId

Hitelesítő adatok módosítása

Az AD-alkalmazások hitelesítő adatainak módosításához biztonsági sérülés vagy hitelesítő adatok lejárata miatt használja a Remove-AzADAppCredential és a New-AzADAppCredential parancsmagokat.

Ha egy alkalmazás összes hitelesítő adatát szeretné eltávolítani, használja a következőt:

Get-AzADApplication -DisplayName exampleapp | Remove-AzADAppCredential

Ha tanúsítványértéket kíván hozzáadni, hozzon létre egy önaláírt tanúsítványt a cikkben ismertetett módon. Ezután használja a következőt:

Get-AzADApplication -DisplayName exampleapp | New-AzADAppCredential `
  -CertValue $keyValue `
  -EndDate $cert.NotAfter `
  -StartDate $cert.NotBefore

Hibakeresés

A szolgáltatásnév létrehozásakor az alábbi hibákba ütközhet:

  • "Authentication_Unauthorized" vagy "Nincs előfizetés a környezetben" . – Ez a hiba akkor jelenik meg, ha a fiókja nem rendelkezik az alkalmazás regisztrálásához szükséges engedélyekkel a Microsoft Entra-azonosítóhoz. Ez a hiba általában akkor jelenik meg, ha csak a Microsoft Entra-azonosítójában szereplő rendszergazdai felhasználók regisztrálhatnak alkalmazásokat, és a fiókja nem rendszergazda. Kérje meg a rendszergazdát, hogy rendelje hozzá Önt egy rendszergazdai szerepkörhöz, vagy engedélyezze a felhasználók számára az alkalmazások regisztrálását.

  • A fiókja "nem rendelkezik engedéllyel a "Microsoft.Authorization/roleAssignments/write" művelet végrehajtásához a(z) "/subscriptions/{guid}" hatókörön keresztül." – Ez a hiba akkor jelenik meg, ha a fiókja nem rendelkezik megfelelő engedélyekkel ahhoz, hogy szerepkört rendeljen egy identitáshoz. Kérje meg az előfizetés-rendszergazdáját, hogy adja hozzá Önt a Felhasználói hozzáférés rendszergazdája szerepkörhöz.

További lépések