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šším způsobem, jak zkontrolovat, jestli má váš účet dostatečná oprávnění, je použít k tomu portál. Informace najdete v článku Kontrola požadovaných oprávnění.

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