Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pokud máte aplikaci nebo skript, který potřebuje přístup k prostředkům, můžete pro aplikaci nastavit identitu a ověřit tuto aplikaci jejími vlastními přihlašovacími údaji. Tato identita se označuje jako aplikační objekt. Tento přístup vám umožní:
- Přiřadit identitě aplikace oprávnění, která se budou lišit od vašich vlastních oprávnění. Tato oprávnění jsou obvykle omezená přesně na to, co aplikace potřebuje dělat.
- Při provádění bezobslužného skriptu použít k ověření certifikát.
Důležité
Místo vytváření principálu služby zvažte použití spravovaných identit pro prostředky Azure pro identitu vaší aplikace. Pokud váš kód běží ve službě, která podporuje spravované identity a přistupuje k prostředkům, které podporují ověřování Microsoft Entra, jsou spravované identity pro vás lepší volbou. Další informace o spravovaných identitách pro prostředky Azure, včetně toho, které služby ji aktuálně podporují, naleznete v Co jsou spravované identity pro prostředky Azure?.
Tento článek vám ukáže, jak vytvořit hlavní službu, která se ověřuje certifikátem. Pokud chcete nastavit instanční objekt s heslem, podívejte se na článek věnovaný vytvoření instančního objektu Azure s použitím prostředí Azure PowerShell.
K tomuto článku musíte mít nejnovější verzi PowerShellu.
Poznámka:
Při práci s Azure doporučujeme používat modul Azure Az PowerShellu. Začněte tím, že si projdete téma Instalace Azure PowerShellu. Informace o tom, jak migrovat na modul Az PowerShell, najdete v tématu Migrace Azure PowerShellu z AzureRM na Az.
Požadována oprávnění
K dokončení tohoto článku musíte mít dostatečná oprávnění v předplatném Microsoft Entra i v předplatném Azure. Konkrétně musíte být schopni vytvořit aplikaci v Microsoft Entra ID a přiřadit aplikační objekt k roli.
Nejjednodušší způsob, jak zjistit, jestli má váš účet odpovídající oprávnění, je prostřednictvím Centra pro správu Microsoft Entra.
Přiřazení aplikace k roli
Pokud chcete získat přístup k prostředkům ve vašem předplatném, musíte aplikaci přiřadit k roli. Rozhodněte se, která role nabízí správná oprávnění pro aplikaci. Informace o dostupných rolích najdete v tématu Předdefinované role Azure.
Obor můžete nastavit na úrovni předplatného, skupiny prostředků nebo prostředku. Oprávnění se dědí do nižších úrovní oboru. Například přidání aplikace do role Čtenář pro skupinu prostředků znamená, že aplikace může číst tuto skupinu a všechny prostředky, které obsahuje. Pokud chcete aplikaci povolit provádění akcí, jako je restartování, spuštění a zastavení instancí, vyberte roli Přispěvatel .
Vytvoření instančního objektu s certifikátem podepsaným svým držitelem
Následující příklad popisuje jednoduchou situaci. Pomocí rutiny New-AzADServicePrincipal vytvoří instanční objekt s certifikátem podepsaným svým držitelem a pomocí rutiny New-AzRoleAssignment přiřadí k instančnímu objektu roli Čtenář. Přiřazení role je vymezené vaším aktuálně vybraným předplatným Azure. Pokud chcete vybrat jiné předplatné, použijte Set-AzContext.
Poznámka:
Cmdlet New-SelfSignedCertificate a modul PKI nejsou v PowerShell Core v současné době podporovány.
$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
Ukázkový program čeká po dobu 20 sekund, aby měl dostatek času na to, aby se nový služební účet projevil v celém systému Microsoft Entra ID. Pokud váš skript dostatečně dlouho nečeká, zobrazí se chyba typu Instanční objekt {ID} v adresáři {DIR-ID}. Pokud chcete tuto chybu vyřešit, chvíli počkejte a pak znovu spusťte příkaz New-AzRoleAssignment .
Přiřazení role můžete vymezit na konkrétní skupinu prostředků pomocí parametru ResourceGroupName. Vymezit konkrétní rozsah můžete také pomocí parametrů ResourceType a ResourceName.
Pokud nemáte Windows 10 nebo Windows Server 2016, stáhněte si rutinu New-SelfSignedCertificateEx z řešení PKI. Získejte jeho obsah a importujte potřebný cmdlet.
# Only run if you could not use New-SelfSignedCertificate
Import-Module -Name c:\ExtractedModule\New-SelfSignedCertificateEx.ps1
Ve skriptu nahraďte následující dva řádky, aby se vygeneroval certifikát.
New-SelfSignedCertificateEx -StoreLocation CurrentUser `
-Subject "CN=exampleapp" `
-KeySpec "Exchange" `
-FriendlyName "exampleapp"
$cert = Get-ChildItem -path Cert:\CurrentUser\my | where {$PSitem.Subject -eq 'CN=exampleapp' }
Poskytnutí certifikátu pomocí automatizovaného skriptu PowerShellu
Pokaždé, když se přihlásíte jako služební objekt, zadejte ID tenanta adresáře pro vaši AD aplikaci. Tenant je instance Microsoft Entra ID.
$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
Vytvoření principálu služby pomocí certifikátu z certifikační autority
Následující příklad používá k vytvoření principálu služby certifikát vydaný certifikační autoritou. Přiřazení je omezené na zadané předplatné Azure. Přidá identitu služby do role Čtenář. Pokud dojde k chybě při přiřazení role, pokusí se znovu o přiřazení.
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
Poskytnutí certifikátu pomocí automatizovaného skriptu PowerShellu
Pokaždé, když se přihlásíte jako služební objekt, zadejte ID tenanta adresáře pro vaši AD aplikaci. Tenant je instance Microsoft Entra ID.
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
ID aplikace a ID tenanta nejsou důvěrná, takže je můžete vložit přímo do skriptu. Pokud potřebujete načíst ID tenanta, použijte tento kód:
(Get-AzSubscription -SubscriptionName "Contoso Default").TenantId
Pokud potřebujete načíst ID aplikace, použijte tento kód:
(Get-AzADApplication -DisplayNameStartWith {display-name}).AppId
Změna přihlašovacích údajů
Pokud chcete změnit přihlašovací údaje pro aplikaci AD z důvodu ohrožení zabezpečení nebo vypršení platnosti přihlašovacích údajů, použijte rutiny Remove-AzADAppCredential a New-AzADAppCredential .
Pokud chcete odebrat všechny přihlašovací údaje pro aplikaci, použijte tento kód:
Get-AzADApplication -DisplayName exampleapp | Remove-AzADAppCredential
Pokud chcete přidat hodnotu certifikátu, vytvořte certifikát podepsaný svým držitelem, jak je znázorněno v tomto článku. Potom použijte:
Get-AzADApplication -DisplayName exampleapp | New-AzADAppCredential `
-CertValue $keyValue `
-EndDate $cert.NotAfter `
-StartDate $cert.NotBefore
Ladění
Při vytváření služebního hlavního objektu může dojít k následujícím chybám:
"Authentication_Unauthorized" nebo "V kontextu se nenašlo žádné předplatné". – Tato chyba se zobrazí, když váš účet nemá požadovaná oprávnění k registraci aplikace v ID Microsoft Entra. Tato chyba se obvykle zobrazí, když aplikace můžou registrovat jenom uživatelé správce ve vašem ID Microsoft Entra a váš účet není správcem. Požádejte správce, aby vás buď přiřadil k roli správce, nebo aby uživatelé mohli registrovat aplikace.
Váš účet nemá autorizaci k provedení akce Microsoft.Authorization/roleAssignments/write nad oborem /subscriptions/{guid}. – Tato chyba se zobrazí, když váš účet nemá dostatečná oprávnění k přiřazení role k identitě. Požádejte správce předplatného, aby vás přidal do role Správce přístupu uživatelů.
Další kroky
- Pokud chcete nastavit instanční objekt s heslem, přečtěte si téma Vytvoření instančního objektu Azure pomocí Azure PowerShellu nebo vytvoření instančního objektu Azure pomocí Azure CLI.
- Podrobnější vysvětlení aplikací a instančních objektů najdete v článku Objekty aplikací a instanční objekty.
- Další informace o ověřování Microsoft Entra naleznete v tématu Scénáře ověřování pro Microsoft Entra ID.
- Informace o práci s registracemi aplikací pomocí Microsoft Graphu najdete v referenčních informacích k rozhraní API aplikací .