Vytvoření instančního objektu s certifikátem pomocí Azure PowerShellu
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 instanč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í instančního objektu zvažte použití spravovaných identit pro prostředky Azure pro vaši identitu 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ýchidentitch
Tento článek vám ukazuje, jak vytvořit instanční objekt, 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 instanč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 může číst skupinu prostředků 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:
Rutina New-SelfSignedCertificate a modul PKI se v PowerShellu Core v současné době nepodporují.
$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
Příklad spí po dobu 20 sekund, aby se nový instanční objekt rozšířil do celého ID Microsoft Entra. 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. Rozbalte jeho obsah a importujte potřebnou rutinu.
# 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 instanční objekt, zadejte ID tenanta adresáře pro vaši aplikaci AD. 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í instančního objektu pomocí certifikátu z certifikační autority
Následující příklad používá k vytvoření instančního objektu certifikát vydaný certifikační autoritou. Přiřazení je vymezené na zadané předplatné Azure. Přidá instanční objekt do role Čtenář . Pokud dojde k chybě při přiřazení role, dojde k dalšímu pokusu 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 instanční objekt, zadejte ID tenanta adresáře pro vaši aplikaci AD. 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í instanční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í .