Sdílet prostřednictvím


Vytvoření zástupce služby Azure pomocí Azure PowerShellu

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, nabízí Azure služební principály.

Azure služební principál je identita vytvořená pro použití v aplikacích, hostovaných službách a automatizovaných nástrojích pro přístup k prostředkům Azure. Tento přístup je omezen rolemi přiřazenými k hlavní službě, což vám dává kontrolu nad tím, ke který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, místo toho, aby jim bylo umožněno přihlásit se pomocí identity uživatele.

Tento článek ukazuje kroky pro vytvoření, získání informací o a resetování principálu služby pomocí Azure PowerShellu.

Upozornění

Při vytváření služebního účtu pomocí příkazu New-AzADServicePrincipal výstup obsahuje 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řte služebního principála

Vytvořte hlavní službu pomocí rutiny New-AzADServicePrincipal. Při vytváření služebního principálu zvolíte typ autentifikace přihlašování, který používá.

Důležité

Počínaje modulem Az PowerShell ve verzi 7.x už New-AzADServicePrincipal ve výchozím nastavení nepřiřazuje roli Přispěvatel služebnímu objektu. Pokud chcete přiřadit konkrétní roli instančnímu objektu, podívejte se na kroky k 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í služebního principála.

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 služební principály 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í založené na heslech

Důležité

Výchozí rolí pro službu ověřování založenou na hesle 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álu.

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 někam na bezpečné místo pro ověření pomocí služebního principála. Tato hodnota se nezobrazí ve výstupu konzoly. Pokud heslo ztratíte, resetujte přihlašovací údaje aplikační identity.

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í služebního principu se vyžaduje ID tenanta, pod kterým byl služební princip vytvořen. 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í na základě certifikátů

Důležité

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

Instanční objekty používající ověřování založené na certifikátech 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. 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 New-AzADServicePrincipal obsahuje vlastnosti Id a DisplayName, z nichž každou lze použít pro přihlášení pomocí služebního účtu. Klienti, kteří se přihlašují pomocí služebního principála, také potřebují přístup k privátnímu klíči certifikátu.

Důležité

K přihlášení pomocí služebního principu se vyžaduje ID tenanta, pod kterým byl služební princip vytvořen. 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 servisního principálu

Seznam služebních principálů pro aktivního tenanta je možné načíst příkazem 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 vyžaduje principály služby, které mají předponu, která odpovídá zadané hodnotě. Zobrazovaný název zástupce služby je hodnota nastavená pomocí DisplayName během vytváření.
  • Argument DisplayName si vyžádá přesnou shodu názvu instančního objektu.

Správa rolí aplikačního objektu

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

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é

Příkazové rutiny přiřazování rolí nepřijímají identifikátor objektu hlavní služby. Získají ID přidružené aplikace, které se vygeneruje při vytvoření aplikace. K získání ID aplikace pro služebního principála 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ím role se neomezí dříve přiřazená oprávnění. Při omezování oprávnění u instančního objektu služby by měla být odebrána 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í služebního principálu

Otestujte přihlašovací údaje a oprávnění nového služebního principálu tím, že se přihlásíte. Pokud se chcete přihlásit pomocí služby principal, potřebujete hodnotu applicationId k ní přidruženou a tenanta, pod kterým je vytvořena.

Chcete-li se přihlásit pomocí identifikátoru služby a 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í na základě certifikátů vyžaduje, aby Azure PowerShell mohl načítat 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 službu principal, příkazem 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émů

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

Get-AzAdServicePrincipal -DisplayName ServicePrincipalName

Pokud již není potřeba existující služba, můžete ji odebrat pomocí 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 principála služby, bude aplikace stále dostupná. Tato aplikace vám brání ve vytvoření jiné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 pro nového služebního principála, kterého se pokoušíte vytvořit.