Vytvoření služebního principála Azure pomocí Azure PowerShell

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

Služební účet Azure je identita určená pro použití s aplikacemi, hostovanými službami a automatizovanými nástroji pro přístup k prostředkům Azure. Tento přístup je omezen rolemi přiřazenými k service principal, což vám dává kontrolu nad tím, k jakým prostředkům lze přistupovat a na jaké úrovni. Z bezpečnostních důvodů se vždy doporučuje používat služební identity s automatizovanými nástroji, než umožnit jejich přihlášení jako uživatel.

V tomto článku se dozvíte, jak vytvořit, získat informace o instančním objektu a resetovat ho pomocí Azure PowerShell.

Upozornění

Při vytváření objektu služby pomocí příkazu New-AzADServicePrincipal, výstup obsahuje pověření, která musíte chránit. Jako alternativu zvažte použití spravovaných identit , abyste se vyhnuli nutnosti používat přihlašovací údaje.

Předpoklady

Vytvořte služebního principála

Vytvořte služební objekt pomocí příkazového modulu New-AzADServicePrincipal. Při vytváření služebního principálu zvolíte typ ověřování, které používá.

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í ke vytvoření služebního principálu, New-AzADServicePrincipal vrátí chybovou zprávu obsahující "Nedostatečná oprávnění k dokončení operace." Požádejte správce Microsoft Entra o vytvoření klíčového objektu služby.

V adresáři Microsoft Entra ID, ve kterém je nastavení uživatele Uživatelé můžou registrovat aplikace byl nastaven na No, 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 najdete v tématu Restrict, kdo může vytvářet aplikace.

K dispozici jsou dva typy ověřování pro služební identity: ověřování založené na hesle a ověřování založené na certifikátu.

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á úplná oprávnění ke čtení a zápisu do účtu Azure. Informace o správě přiřazení rolí najdete v tématu Správa rolí služebního principála.

Bez jakýchkoli dalších parametrů ověřování se použije ověřování na základě hesla a vytvoří se pro vás náhodné heslo. Pokud chcete ověřování založené na heslech, doporučuje se tato metoda.

$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

Vrácený objekt obsahuje PasswordCredentials.SecretText vlastnost obsahující vygenerované heslo. Ujistěte se, že tuto hodnotu ukládáte na bezpečné místo pro ověření pomocí servisního účtu. Jeho hodnota se nezobrazí ve výstupu konzoly. Pokud heslo ztratíte, obnovte přihlašovací údaje entity služby.

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

$sp.PasswordCredentials.SecretText

Vrácený objekt New-AzADServicePrincipal obsahuje členy Id a DisplayName, z nichž lze některý použít pro přihlášení pomocí hlavního objektu služby.

Důležité

Přihlášení pomocí aplikační identity vyžaduje ID tenanta, pod kterým byla aplikační identita vytvořena. Pokud chcete získat aktivního tenanta při vytvoření instančního objektu, spusťte následující příkaz ihned po vytvoření instančního objektu:

(Get-AzContext).Tenant.Id

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

Důležité

Při vytváření hlavní služby pro ověřování na základě certifikátů není přiřazena žádná výchozí role. Informace o správě přiřazení rolí najdete v tématu Správa rolí servisního principálu.

Hlavní objekty služby používající ověřování založené na certifikátech se vytvoří s parametrem CertValue. Tento parametr přebírá řetězec ASCII s kódováním base64 veřejného certifikátu. Toto je reprezentováno souborem PEM nebo textovým kódem CRT nebo CER. Binární kódování veřejného certifikátu se nepodporuje. 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 z New-AzADServicePrincipal obsahuje vlastnosti Id a DisplayName, z nichž kteroukoliv lze použít pro přihlášení pomocí služebního principálu. Klienti, kteří se přihlašují pomocí služby principal, potřebují také přístup k soukromému klíči certifikátu.

Důležité

Přihlášení pomocí aplikačního objektu vyžaduje ID tenanta, pod kterým byl aplikační objekt vytvořen. Pokud chcete získat aktivního tenanta při vytvoření instančního objektu, spusťte následující příkaz ihned po vytvoření instančního objektu:

(Get-AzContext).Tenant.Id

Získání existujícího provozního účtu

Seznam zástupců služeb pro aktivního tenanta je možné načíst pomocí cmdletu 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 delší dobu. Místo toho se doporučuje použít jeden z volitelných argumentů filtrování na straně serveru:

  • DisplayNameBeginsWith požaduje instanční objekty, které mají předponu odpovídající zadané hodnotě. Zobrazovaný název servisního principála je hodnota nastavená DisplayName během vytváření.
  • DisplayName požaduje přesnou shodu názvu hlavního účtu služby.

Správa rolí aplikačního objektu

Azure PowerShell má následující rutiny pro správu přiřazení rolí:

Další informace o Role-Based Access Control (RBAC) a rolích najdete v tématu RBAC: 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řazení rolí nepřijímají ID objektu hlavní služby. Převezmou přidružené ID aplikace, které se vygeneruje při vytváření. K získání ID aplikace pro služební účet použijte 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í role neomezuje dříve přiřazená oprávnění. Při omezení oprávnění služebního principu 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í servisního principála

Otestujte přihlašovací údaje a oprávnění nové hlavní služby 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í služebního účtu pomocí 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í založené na certifikátech vyžaduje, aby Azure PowerShell mohl načíst informace z místního úložiště certifikátů na základě kryptografického otisku certifikátu.

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 aplikační objekt, přidejte pomocí New-AzADSpCredential 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ů možná budete chtít odebrat existující přihlašovací údaje, abyste se s nimi nemohli přihlásit. K tomu použijte rutinu Remove-AzADSpCredential :

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

Troubleshooting

Pokud se zobrazí chyba "New-AzADServicePrincipal: Jiný objekt se stejnou hodnotou pro identifikátorUris vlastnosti již existuje.", ověřte, že hlavní služba se stejným názvem už neexistuje.

Get-AzAdServicePrincipal -DisplayName ServicePrincipalName

Pokud už existující servisní principal nepotřebujete, můžete jej odstranit 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 Azure Active Directory. Pokud odeberete zástupce služby, aplikace bude stále dostupná. Tato aplikace zabraňuje vytvoření dalšího služebního principálu 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ž ji nepotřebujete, můžete ji odebrat pomocí následujícího příkladu.

Remove-AzADApplication -DisplayName ServicePrincipalName

Jinak zvolte alternativní název nového služebního principálu, který se pokoušíte vytvořit.