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ásidentitáshoz. Ha a kód olyan szolgáltatáson fut, amely támogatja a felügyelt identitásokat, és hozzáfér az Azure Active Directory- (Azure AD-) hitelesítést támogató erőforrásokhoz, a felügyelt identitások használata jobb megoldás az Ön számára. További információ az Azure-erőforrások felügyelt identitásiról, beleértve a jelenleg támogatott szolgáltatásokat: Mi az Azure-erőforrások felügyelt identitása?.

Ez a cikk bemutatja, hogy hogyan hozhat létre egy szolgáltatásnevet tanúsítvánnyal történő hitelesítéshez. A jelszót használó szolgáltatásnevek beállításáról a következő témakörben tájékozódhat: Azure-beli szolgáltatásnév létrehozása az Azure PowerShell használatával.

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

Megjegyzés

Ez a cikk frissült az Azure Az PowerShell-moduljának használatával. Mostantól az Az PowerShell-modul használatát javasoljuk az Azure-ral folytatott interakciókhoz. Az Az PowerShell-modul használatának megkezdéséhez lásd az Azure PowerShell telepítését ismertető szakaszt. Az Az PowerShell-modulra történő migrálás részleteiről lásd: Az Azure PowerShell migrálása az AzureRM modulból az Az modulba.

Szükséges engedélyek

A cikk befejezéséhez megfelelő engedélyekkel kell rendelkeznie az Azure AD-ban és az Azure-előfizetésben is. Pontosabban létre kell hoznia egy alkalmazást az Azure AD-ban, és hozzá kell rendelnie a szolgáltatásnévt 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 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 biztosít megfelelő engedélyeket az alkalmazás számára. Az elérhető szerepkörökkel kapcsolatos további információkért lásd az Azure beépített szerepköreit.

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ődik. Ha például hozzáad egy alkalmazást egy erőforráscsoport Olvasó szerepkörhöz, az azt jelenti, hogy be tudja olvasni az erőforráscsoportot és az abban található összes erőforrást. Ha engedélyezni szeretné, hogy az alkalmazás olyan műveleteket hajtson végre, mint a példányok újraindítása, újraindítása és leállítása, válassza 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 önaírt tanúsítvánnyal hoz létre egyszerű szolgáltatást, az Olvasó szerepkört pedig a New-AzRoleAssignment használatával rendeli hozzá 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 függvényt.

Megjegyzés

A New-SelfSignedCertificate parancsmag és a PKI modul jelenleg nem támogatott a 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.ApplicationId

A példa 20 másodpercig alvó üzemmódban van, hogy az új szolgáltatásnév propagálható lesz az Azure AD-ben. Ha a szkriptje nem vár eleget, akkor a következő hibát fogja látni: „A(z) {ID} résztvevő nem létezik a(z) {DIR-ID} címtárban”. A hiba elhárításához várjon egy kicsit, 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 nem Windows 10 vagy Windows Server 2016, töltse le a New-SelfSignedCertificateEx parancsmagot a PKI-megoldásokbó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ő az Azure AD egy példánya.

$TenantId = (Get-AzSubscription -SubscriptionName "Contoso Default").TenantId
$ApplicationId = (Get-AzADApplication -DisplayNameStartWith exampleapp).ApplicationId

$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 az egyszerű szolgáltatást 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.ApplicationId | 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ő az Azure AD 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}).ApplicationId

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

Az AD-alkalmazások hitelesítő adatainak biztonsági hiba vagy a hitelesítő adatok lejárata miatt történő megadásához 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 „No subscription found in the context.” (Nem található 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 az Azure AD-ban. Ez a hiba általában akkor jelenik meg, ha csak a Azure Active Directory felhasználói regisztrálnak alkalmazásokat, és a fiókja nem rendszergazda. Kérje meg a rendszergazdát, hogy rendeljen Hozzá egy rendszergazdai szerepkört, vagy engedélyezze a felhasználóknak az alkalmazások regisztrálását.

  • A fiókja "nem rendelkezik a "Microsoft.Authorization/roleAssignments/write" művelet végrehajtásához szükséges engedéllyel a/subscriptions/{guid}" hatókörben." – 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.

Következő lépések