Udělení přístupu instančního objektu k Azure
Instanční objekt sám o sobě nemůže ve vašem prostředí Azure nic dělat. Je to stejně jako to, jak uživatel nemůže pracovat s vašimi prostředky Azure, pokud k tomu nemá oprávnění. V této lekci se dozvíte, jak autorizovat instanční objekty k nasazení a konfiguraci prostředků Azure a zároveň se vyhnout udělení nepotřebných oprávnění.
Poznámka:
Příkazy v této lekci jsou znázorněny pro ilustraci konceptů. Zatím nespouštět příkazy. Brzy si procvičíte, co se tady naučíte.
Autorizace instančního objektu
Doteď jste se zaměřili na to, co jsou instanční objekty a jak se dají použít k prokázání identity kanálu v Microsoft Entra ID. Toto je vše o ověřování.
Jakmile microsoft Entra ID ověří instanční objekt, stane se další otázka: co může tento instanční objekt dělat? Toto je koncept autorizace. Je zodpovědností systému řízení přístupu na základě role (RBAC) Azure, který se někdy označuje jako správa identit a přístupu (IAM). Pomocí Azure RBAC můžete instančnímu objektu udělit přístup ke konkrétní skupině prostředků, předplatnému nebo skupině pro správu.
Poznámka:
Všechno, co tady děláte, používá systém Azure RBAC k udělení přístupu k vytváření a správě prostředků Azure, jako jsou účty úložiště, plán služby App Service a virtuální sítě. Microsoft Entra ID má také svůj vlastní systém rolí, který se někdy označuje jako role adresáře. Pomocí těchto rolí udělíte oprávnění instančním objektům ke správě ID Microsoft Entra. Tento modul podrobně neprobírá toto téma, ale mějte na paměti, že termínovou roli je možné použít pro obě situace v některé dokumentaci.
Výběr správného přiřazení role pro váš kanál
Přiřazení role má tři klíčové části: komu je role přiřazená ( přiřazené uživateli), co může dělat ( role) a na jaký zdroj nebo zdroje se přiřazení role vztahuje ( obor).
Pověřená osoba
Při práci s instančním objektem přiřadíte role pro tento instanční objekt. ID aplikace instančního objektu použijete k identifikaci správného instančního objektu pro daného přiřazeného objektu.
Role
Může to být o něco víc práce, než zjistit, jakou roli přiřadit. V Azure existuje několik běžných rolí:
- Čtenář, který umožňuje správci číst informace o prostředcích, ale ne upravovat nebo odstraňovat.
- Přispěvatel, který umožňuje přiřazovat prostředky a číst a upravovat existující prostředky. Přispěvatelé ale nemůžou ostatním objektům zabezpečení udělit přístup k prostředkům.
- Vlastník, který umožňuje úplnou kontrolu nad prostředky, včetně udělení přístupu k jiným objektům zabezpečení.
Upozornění
Instančním objektům byste měli udělit pouze minimální oprávnění, která potřebují k práci. Ve většině případů je role Vlastník příliš přesvědčivá pro kanál nasazení.
Existuje také spousta konkrétních rolí, které poskytují přístup pouze k podmnožině funkcí. Můžete také vytvořit vlastní definici role a určit přesný seznam oprávnění, která chcete přiřadit.
Poznámka:
Definice vlastních rolí můžou být účinným způsobem, jak udělit oprávnění k prostředkům Azure, ale může být obtížné s jejich pomocí pracovat. Není vždy snadné přesně určit, která oprávnění potřebujete přidat do vlastní definice role, a můžete omylem nastavit, aby definice rolí byly příliš omezující nebo příliš omezující. Pokud si nejste jistí, co dělat, je nejlepší místo toho použít některou z předdefinovaných definic rolí. Definice vlastních rolí jsou nad rámec tohoto modulu.
Obor
Potřebujete určit, jak široce přiřadíte roli. Toto rozhodnutí ovlivňuje počet prostředků, které může instanční objekt upravit. Mezi běžné obory patří:
- Jeden prostředek: Přístup můžete udělit pouze ke konkrétnímu prostředku. Kanály nasazení tento obor obvykle nepoužívají, protože kanál vytváří prostředky, které ještě neexistují, nebo překonfiguruje více prostředků.
- Skupina prostředků: Přístup ke všem prostředkům v rámci skupiny prostředků můžete udělit. Přispěvatelé a vlastníci můžou také vytvářet prostředky v rámci skupiny. Tato možnost je vhodná pro mnoho kanálů nasazení.
- Předplatné: Přístup ke všem prostředkům v rámci předplatného můžete udělit. Pokud máte v jednom předplatném více aplikací, úloh nebo prostředí, můžete udělit oprávnění k rozsahu předplatného. Obvykle je to ale pro kanál nasazení příliš permisivní. Místo toho byste měli zvážit určení rozsahu přiřazení rolí ke skupinám prostředků, pokud pracovní postup nasazení sám nepotřebuje vytvářet skupiny prostředků.
Nezapomeňte, že přiřazení rolí se dědí. Pokud přiřadíte roli v předplatném, bude mít přiřazený přístup ke každé skupině prostředků a prostředku v rámci daného předplatného.
Výběr správného přiřazení role
Teď, když rozumíte komponentám přiřazení role, můžete rozhodnout o vhodných hodnotách pro vaše scénáře. Tady je několik obecných pokynů, které je potřeba vzít v úvahu:
- Použijte nejméně permisivní roli, kterou můžete použít. Pokud váš kanál nasadí jenom základní šablony Bicep a nebude spravovat přiřazení rolí, nepoužívejte roli Vlastník.
- Použijte nejužší rozsah, který můžete použít. Většina kanálů potřebuje nasadit prostředky jenom do skupiny prostředků, takže by nemělo být přiděleno přiřazení rolí v oboru předplatného.
- Pro mnoho kanálů je dobrou výchozí možností pro přiřazení role role v oboru skupiny prostředků.
- Vezměte v úvahu všechno, co váš kanál dělá, a všechno, co může v budoucnu dělat. Můžete například zvážit vytvoření vlastní definice role pro kanál nasazení vašeho webu a udělit oprávnění pouze pro App Service a Application Insights. Příští měsíc možná budete muset do souboru Bicep přidat účet služby Azure Cosmos DB, ale vlastní role zablokuje vytváření prostředků Azure Cosmos DB. Místo toho je často lepší použít předdefinované role nebo kombinaci předdefinovaných rolí, abyste nemuseli opakovaně měnit definice rolí. Zvažte použití služby Azure Policy k vynucení požadavků na zásady správného řízení pro povolené služby, skladové položky a umístění.
- Otestujte kanál a ověřte, že přiřazení role funguje.
Kombinování a porovnávání přiřazení rolí
Můžete vytvořit více přiřazení rolí, která poskytují různá oprávnění v různých oborech. Můžete například přiřadit instanční objekt roli čtenáře s oborem celého předplatného a pak samostatně přiřadit stejný instanční objekt roli přispěvatele pro konkrétní skupinu prostředků. Když se instanční objekt pokusí pracovat se skupinou prostředků, použije se více permisivní přiřazení.
Práce v různých prostředích
Pravděpodobně pracujete s několika prostředími, jako je vývoj, testování a produkční prostředí pro vaše aplikace. Prostředky pro každé prostředí by se měly nasadit do různých skupin prostředků nebo předplatných.
Pro každé prostředí byste měli vytvořit samostatné instanční objekty a každému instančnímu objektu udělit minimální sadu oprávnění, která potřebuje pro svá nasazení. Dávejte pozor, abyste se vyhnuli kombinování oprávnění pro produkční nasazení s nasazeními do neprodukčního prostředí.
Vytvoření přiřazení role pro instanční objekt
K vytvoření přiřazení role pro instanční objekt použijte az role assignment create
příkaz. Potřebujete zadat přiřazení, roli a obor:
az role assignment create \
--assignee 00001111-aaaa-2222-bbbb-3333cccc4444 \
--role Contributor \
--scope "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ToyWebsite" \
--description "The deployment pipeline for the company's website needs to be able to create resources within the resource group."
Pojďme se podívat na jednotlivé argumenty:
-
--assignee
určuje instanční objekt. Abyste se vyhnuli nejednoznačnosti, je vhodné použít ID aplikace. -
--role
určuje roli. Pokud používáte předdefinované role, můžete ji zadat podle názvu. Pokud používáte vlastní definici role, zadejte úplné ID definice role. -
--scope
určuje rozsah. Obvykle se jedná o ID prostředku pro jeden prostředek, skupinu prostředků nebo předplatné. -
--description
je čitelný popis přiřazení role.
K vytvoření přiřazení role pro instanční objekt použijte rutinu New-AzRoleAssignment
. Potřebujete zadat přiřazení, roli a obor:
New-AzRoleAssignment `
-ApplicationId 00001111-aaaa-2222-bbbb-3333cccc4444 `
-RoleDefinitionName Contributor `
-Scope '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ToyWebsite' `
-Description "The deployment pipeline for the company's website needs to be able to create resources within the resource group."
Pojďme se podívat na jednotlivé argumenty:
-
-ApplicationId
určuje ID registrace aplikace instančního objektu. -
-RoleDefinitionName
určuje název předdefinované role. Pokud použijete vlastní definici role, zadejte úplné ID definice role pomocí argumentu-RoleDefinitionId
. -
-Scope
určuje rozsah. Obvykle se jedná o ID prostředku pro jeden prostředek, skupinu prostředků nebo předplatné. -
-Description
je čitelný popis přiřazení role.
Tip
Osvědčeným postupem je poskytnout odůvodnění přiřazení rolí zadáním popisu. Popis pomáhá každému, kdo později zkontroluje přiřazení rolí, pochopit jejich účel a pochopit, jak jste se rozhodli o přiřazení, roli a oboru.
Poznámka:
Aktivní přiřazení rolí může trvat několik minut.
Vytvoření instančního objektu a přiřazení role v jedné operaci
Můžete také vytvořit přiřazení role ve stejnou dobu, kdy vytvoříte instanční objekt. Kód se podobá příkazu, který jste použili k vytvoření instančního objektu v předchozích lekcích, ale s některými dalšími argumenty:
az ad sp create-for-rbac \
--name MyPipeline \
--role Contributor \
--scopes "/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/ToyWebsite"
$servicePrincipal = New-AzADServicePrincipal `
-DisplayName MyPipeline `
-Role Contributor `
-Scope '/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/ToyWebsite'
Udělení přístupu pomocí Bicep
Přiřazení rolí jsou prostředky Azure. To znamená, že pomocí Bicep můžete vytvořit přiřazení role. Můžete to udělat, pokud inicializujete skupiny prostředků pomocí Bicep a pak nasadíte prostředky do skupiny prostředků pomocí instančního objektu. Tady je příklad definice Bicep pro výše uvedené přiřazení role:
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2023-04-01-preview' = {
name: guid(principalId, roleDefinitionId, resourceGroup().id)
properties: {
principalType: 'ServicePrincipal'
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', roleDefinitionId)
principalId: principalId
description: 'The deployment pipeline for the company\'s website needs to be able to create resources within the resource group.'
}
}
Pojďme se podívat na jednotlivé argumenty:
-
name
je jedinečný identifikátor přiřazení role. Musí to být ve formě globálně jedinečného identifikátoru (GUID). Je vhodné použítguid()
funkci v Bicep k vytvoření identifikátoru GUID a použití ID objektu zabezpečení, ID definice role a oboru jako počátečních argumentů funkce, abyste zajistili, že vytvoříte jedinečný název pro každé přiřazení role. -
principalType
by měla být nastavena naServicePrincipal
hodnotu . -
roleDefinitionId
je plně kvalifikované ID prostředku pro definici role, kterou přiřazujete. Většinou budete pracovat s předdefinovanými rolemi a ID definice role najdete v dokumentaci k předdefinovaným rolím Azure. Například role Přispěvatel má IDb24988ac-6180-42a0-ab88-20f7382dd24c
definice role . Když ho zadáte v souboru Bicep, vyjadřujete ho pomocí plně kvalifikovaného ID prostředku, například/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c
. -
principalId
je ID objektu instančního objektu. Ujistěte se, že nepoužíváte ID aplikace ani ID objektu registrace aplikace. -
description
je čitelný popis přiřazení role.