Vytvoření služebního účtu v Azure pomocí Azure PowerShellu
Automatizované nástroje, které používají služby Azure, 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 umožňuje přihlašování pomocí služeb tenantů.
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í účty s automatizovanými nástroji místo povolení přihlášení pomocí identity uživatele.
V tomto článku se dozvíte, jak vytvořit, získat informace o instančním objektu a resetovat ho pomocí Azure PowerShellu.
Opatrnost
Při vytvoření služebního účtu pomocí příkazu New-AzADServicePrincipal výstup obsahuje přihlašovací údaje, které musíte chránit. Jako alternativu zvažte použití spravovaných identit, abyste se vyhnuli nutnosti používat přihlašovací údaje.
Požadavky
- Pokud se rozhodnete používat Azure PowerShell místně:
- Nainstalujte modul Az PowerShell.
- Připojte se ke svému účtu Azure pomocí rutiny Connect-AzAccount.
- Pokud se rozhodnete použít Azure Cloud Shell:
- Další informace najdete v tématu Přehled služby Azure Cloud Shell.
Vytvoření principálu služby
Vytvořte aplikační objekt 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 verze 7.x už New-AzADServicePrincipal standardně nepřiřazuje roli přispěvatele službě principal. Pokud chcete přiřadit konkrétní roli službě, podívejte se na Kroky pro přidání přiřazení role.
Poznámka
Pokud váš účet nemá oprávnění k 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". Obraťte se na svého správce Microsoft Entra, aby vytvořil principála služby.
V adresáři Microsoft Entra ID, kde je uživatelské nastavení Uživatelé mohou registrovat aplikace 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
):
- Vývojář aplikací
- správce aplikace
- správce cloudových aplikací
- globálního správce
- správce hybridních identit
Další informace o uživatelských nastaveních v Microsoft Entra ID naleznete v tématu Omezit, kdo může vytvářet aplikace.
Pro služební identity jsou k dispozici dva typy ověřování: ověřování pomocí hesla a ověřování na základě certifikátů.
Ověřování založené na heslech
Důležitý
Výchozí role instančního objektu ověřování založeného na heslech jepřispěvatele
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. Jeho hodnota se ve výstupu konzoly nezobrazí. Pokud heslo ztratíte, resetovat 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ý z New-AzADServicePrincipal
obsahuje Id
a členy DisplayName
, z nichž je možné použít pro přihlášení pomocí instančního objektu.
Důležitý
Přihlášení pomocí aplikačního účtu vyžaduje ID tenanta, pod kterým byl aplikační účet 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
Ověřování na základě 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řazena žádná výchozí role. Informace o správě přiřazení rolí najdete v tématu Správa rolí objektu služby.
Instanční objekty používající ověřování založené na certifikátech se vytvářejí pomocí parametru 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
Objekt vrácený 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žebního principu, také potřebují přístup k soukromému klíči certifikátu.
Důležitý
Přihlášení pomocí služebního účtu vyžaduje ID tenanta, pod kterým byl služební účet vytvořen. Pokud chcete získat aktivního tenanta při vytvoření aplikační identity, spusťte následující příkaz ihned po vytvoření aplikační identity:
(Get-AzContext).Tenant.Id
Získat existující service principal
Seznam služebních principálů pro aktivního klienta lze načíst pomocí 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 služby, které mají předponu , jež odpovídají zadané hodnotě. Zobrazovaný název instančního objektu je hodnota nastavená sDisplayName
během vytváření. -
DisplayName
požaduje přesnou shodu názvu instančního objektu.
Správa rolí služebního principála
Azure PowerShell má následující rutiny pro správu přiřazení rolí:
Další informace o řízení přístupu Role-Based (RBAC) a rolích najdete v tématu RBAC: Předdefinované role.
Následující příklad přidá roli čtenáře
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řebírají ID instančního objektu. Převezmou přidružené ID aplikace, které se vygeneruje při jeho vytvoření. 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í role neomezuje dříve přiřazená oprávnění. Při omezení oprávnění instančního objektu služby by měla být odebrána role přispěvatele .
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ála tím, že se přihlásíte. Pokud se chcete přihlásit pomocí služebního principálu, potřebujete hodnotu applicationId
, která je k němu přidružená, a tenanta, pod kterým je vytvořený.
Přihlášení pomocí instančního objektu 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í 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átu
Resetování přihlašovacích údajů
Pokud zapomenete přihlašovací údaje pro služební účet, použijte New-AzADSpCredential k přidání nových přihlašovacích údajů 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
Řešení problémů
Pokud se zobrazí chyba: "New-AzADServicePrincipal: Jiný objekt se stejnou hodnotou pro property identifierUris již existuje.", ověřte, že instanční objekt služby se stejným názvem ještě neexistuje.
Get-AzAdServicePrincipal -DisplayName ServicePrincipalName
Pokud už služební principál nepotřebujete, můžete ho 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.
Azure PowerShell