Vytvoření instančního objektu Azure s použitím prostředí Azure PowerShell

Automatizované nástroje využívající služby Azure by vždy měly mít omezená oprávnění. Místo toho, aby se aplikace přihlašovaly jako plně privilegovaný uživatel, Azure nabízí instanční objekty.

Instanční objekt Azure je identita vytvořená pro použití v aplikacích, hostovaných službách a automatizovaných nástrojích, kde umožňuje přístup k prostředkům Azure. Tento přístup je omezený rolemi přiřazenými instančnímu objektu, které poskytují kontrolu nad tím, ke kterým prostředkům je možné přistupovat a na jaké úrovni. Z bezpečnostních důvodů se v automatizovaných nástrojích vždy doporučuje používat instanční objekty, a neumožňovat jim připojení pomocí identity uživatele.

Tento článek popisuje kroky pro vytvoření instančního objektu, získání informací o instančním objektu a jeho resetování pomocí Azure PowerShellu.

Upozornění

Když vytvoříte instanční objekt pomocí příkazu New-AzADServicePrincipal, výstup zahrnuje přihlašovací údaje, které musíte chránit. Možnou alternativou je využití spravovaných identit, kdy se vyhnete nutnosti používat přihlašovací údaje.

Požadavky

Vytvoření instančního objektu služby

Instanční objekt vytvoříte pomocí rutiny New-AzADServicePrincipal. Při vytváření instančního objektu zvolíte typ ověřování při přihlašování, který bude používat.

Důležité

Počínaje modulem Az PowerShell verze 7.x už New-AzADServicePrincipal nepřiřazuje roli Přispěvatel instančnímu objektu ve výchozím nastavení. Pokud chcete přiřadit konkrétní roli instančnímu objektu, přečtěte si postup přidání přiřazení role.

Poznámka:

Pokud váš účet nemá oprávnění k vytvoření instančního objektu, New-AzADServicePrincipal vrátí chybovou zprávu s informacemi o nedostatečných oprávněních k dokončení operace. Požádejte správce Microsoft Entra o vytvoření instančního objektu.

V adresáři Microsoft Entra ID, kde uživatelské nastavení Uživatelé mohou registrovat aplikace je nastaveno na Ne, musíte být členem jedné z následujících předdefinovaných rolí Microsoft Entra ID (které mají akci: microsoft.directory/applications/createAsOwner nebo microsoft.directory/applications/create):

Další informace o uživatelských nastaveních v Microsoft Entra ID naleznete v tématu Omezení, kdo může vytvářet aplikace.

Pro instanční objekty jsou k dispozici dva typy ověřování: ověřování založené na heslech a ověřování na základě certifikátů.

Ověřování pomocí hesla

Důležité

Výchozí rolí instančního objektu ověřování založeného na heslech je Přispěvatel. Tato role má v účtu Azure úplná oprávnění ke čtení i zápisu. Informace o správě přiřazení rolí najdete v tématu Správa rolí instančních objektů.

Pokud nezadáte žádné další parametry ověřování, použije se ověřování pomocí hesla a vytvoří se pro vás náhodné heslo. Pokud chcete nastavit ověřování pomocí hesla, doporučujeme tuto metodu.

$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

Vrácený objekt obsahuje PasswordCredentials.SecretText vlastnost obsahující vygenerované heslo. Nezapomeňte tuto hodnotu uložit na bezpečném místě, abyste k ověřování mohli používat instanční objekt. Tato hodnota se nezobrazí ve výstupu konzoly. Pokud heslo ztratíte, resetujte přihlašovací údaje instančního objektu.

Následující kód umožňuje exportovat tajný kód:

$sp.PasswordCredentials.SecretText

Objekt vrácený rutinou New-AzADServicePrincipal obsahuje členy Id a DisplayName. Pro přihlášení pomocí instančního objektu je možné použít oba tyto členy.

Důležité

K přihlášení pomocí instančního objektu se vyžaduje ID tenanta, ve kterém se instanční objekt vytvořil. Pokud chcete získat aktivního tenanta v době vytvoření instančního objektu, ihned po vytvoření instančního objektu spusťte následující příkaz:

(Get-AzContext).Tenant.Id

Ověřování pomocí certifikátů

Důležité

Při vytváření instančního objektu ověřování založeného na certifikátech není přiřazená žádná výchozí role. Informace o správě přiřazení rolí najdete v tématu Správa rolí instančních objektů.

Instanční objekty využívající ověřování pomocí certifikátů se vytvářejí pomocí parametru CertValue. Tento parametr přijímá řetězec ASCII veřejného certifikátu s kódováním Base64. Tento veřejný certifikát je reprezentovaný souborem PEM nebo textovým souborem CR nebo CER. Binárně kódované veřejné certifikáty se nepodporují. Tyto pokyny předpokládají, že už máte k dispozici certifikát.

$cert = <public certificate as base64-encoded string>
$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName -CertValue $cert

Vrácený objekt New-AzADServicePrincipal obsahuje Id vlastnosti a DisplayName vlastnosti, z nichž lze použít pro přihlášení pomocí instančního objektu. Klienti, kteří se přihlašují pomocí instančního objektu, potřebují také přístup k privátnímu klíči certifikátu.

Důležité

K přihlášení pomocí instančního objektu se vyžaduje ID tenanta, ve kterém se instanční objekt vytvořil. Pokud chcete získat aktivního tenanta v době vytvoření instančního objektu, ihned po vytvoření instančního objektu spusťte následující příkaz:

(Get-AzContext).Tenant.Id

Získání existujícího instančního objektu

Seznam instančních objektů pro aktivního tenanta je možné načíst pomocí rutiny Get-AzADServicePrincipal. Ve výchozím nastavení tento příkaz vrátí všechny instanční objekty v tenantovi. U velkých organizací může vrácení výsledků trvat dlouhou dobu. Doporučujeme místo toho použít některý z volitelných argumentů pro filtrování na straně serveru:

  • Argument DisplayNameBeginsWith si vyžádá instanční objekty s předponou, která odpovídá zadané hodnotě. Zobrazovaný název instančního objektu je hodnota nastavená během vytváření pomocí argumentu DisplayName.
  • Argument DisplayName si vyžádá přesnou shodu názvu instančního objektu.

Správa rolí instančních objektů

Azure PowerShell umožňuje spravovat přiřazování rolí pomocí následujících rutin:

Další informace o řízení přístupu na základě role a rolích najdete v tématu Řízení přístupu na základě role: Předdefinované role.

Následující příklad přidá roli Čtenář a odebere roli Přispěvatel :

New-AzRoleAssignment -ApplicationId <service principal application ID> -RoleDefinitionName 'Reader'
Remove-AzRoleAssignment -ObjectId <service principal object ID> -RoleDefinitionName 'Contributor'

Důležité

Rutiny přiřazování rolí nepřijímají ID instančního objektu. Přijímají ID přidružené aplikace, které se vygeneruje při vytvoření. ID aplikace pro instanční objekt můžete získat pomocí rutiny Get-AzADServicePrincipal.

Poznámka:

Pokud váš účet nemá oprávnění k přiřazení role, zobrazí se chybová zpráva, že váš účet nemá autorizaci k provedení akce Microsoft.Authorization/roleAssignments/write. Pokud chcete spravovat role, obraťte se na správce Microsoft Entra.

Přidáním role se neomezí dříve přiřazená oprávnění. Při omezování oprávnění instančního objektu by se měla odebrat role Přispěvatel.

Změny je možné ověřit výpisem přiřazených rolí:

Get-AzRoleAssignment -ServicePrincipalName ServicePrincipalName

Přihlášení pomocí instančního objektu

Otestujte přihlašovací údaje a oprávnění nového instančního objektu tím, že se přihlásíte. Pokud se chcete přihlásit pomocí instančního objektu, potřebujete k němu přidruženou applicationId hodnotu a tenanta, pod kterým je vytvořený.

Přihlášení pomocí instančního objektu s použitím hesla:

# Use the application ID as the username, and the secret as password
$credentials = Get-Credential
Connect-AzAccount -ServicePrincipal -Credential $credentials -Tenant <tenant ID>

Ověřování pomocí certifikátů vyžaduje, aby Azure PowerShell mohl na základě kryptografického otisku certifikátu načíst informace z místního úložiště certifikátů.

Connect-AzAccount -ServicePrincipal -Tenant <TenantId> -CertificateThumbprint <Thumbprint> -ApplicationId <ApplicationId>

Pokyny k importu certifikátu do úložiště přihlašovacích údajů přístupného pomocí PowerShellu najdete v tématu Ověřování na základě certifikátů.

Resetování přihlašovacích údajů

Pokud zapomenete přihlašovací údaje pro instanční objekt, pomocí rutiny New-AzADSpCredential přidejte nové přihlašovací údaje s náhodným heslem. Tato rutina nepodporuje uživatelsky definované přihlašovací údaje při resetování hesla.

Důležité

Před přiřazením nových přihlašovacích údajů byste měli odebrat existující přihlašovací údaje, aby nebylo možné se pomocí nich přihlásit. K tomu použijte rutinu Remove-AzADSpCredential:

Remove-AzADSpCredential -DisplayName ServicePrincipalName
$newCredential = New-AzADSpCredential -ServicePrincipalName ServicePrincipalName

Řešení problému

Pokud se zobrazí chyba New-AzADServicePrincipal: Jiný objekt se stejnou hodnotou pro identifikátorUris vlastnosti již existuje.", ověřte, že instanční objekt se stejným názvem ještě neexistuje.

Get-AzAdServicePrincipal -DisplayName ServicePrincipalName

Pokud už existující instanční objekt nepotřebujete, můžete ho odebrat podle následujícího příkladu.

Remove-AzAdServicePrincipal -DisplayName ServicePrincipalName

K této chybě může dojít také v případě, že jste dříve vytvořili instanční objekt pro aplikaci služby Azure Active Directory. Pokud instanční objekt odeberete, bude aplikace stále k dispozici. Tato aplikace vám neumožní vytvořit jiný instanční objekt se stejným názvem.

Pomocí následujícího příkladu můžete ověřit, že aplikace Microsoft Entra se stejným názvem neexistuje:

Get-AzADApplication -DisplayName ServicePrincipalName

Pokud aplikace se stejným názvem existuje a už není potřebná, je možné ji odebrat podle následujícího příkladu.

Remove-AzADApplication -DisplayName ServicePrincipalName

V opačném případě vyberte alternativní název nového instančního objektu, který se pokoušíte vytvořit.