Vytvoření prostředků Azure RBAC pomocí Bicep
Azure má výkonný systém řízení přístupu na základě role (RBAC). Další informace o Azure RBAC najdete v tématu Co je řízení přístupu na základě role v Azure (Azure RBAC)? Pomocí Bicep můžete programově definovat přiřazení rolí RBAC a definice rolí.
Přiřazení rolí
Přiřazení rolí umožňují udělit instančnímu objektu (například uživateli, skupině nebo instančnímu objektu) přístup ke konkrétnímu prostředku Azure.
Pokud chcete definovat přiřazení role, vytvořte prostředek s typem Microsoft.Authorization/roleAssignments
. Definice role má více vlastností, včetně oboru, názvu, ID definice role, ID objektu zabezpečení a typu objektu zabezpečení.
Obor
Přiřazení rolí se vztahují na konkrétní obor, který definuje prostředek nebo sadu prostředků, kterým udělujete přístup. Další informace najdete v tématu Vysvětlení rozsahu azure RBAC.
Přiřazení rolí jsou rozšiřující prostředky, což znamená, že se vztahují na jiný zdroj. Následující příklad ukazuje, jak vytvořit účet úložiště a přiřazení role s vymezeným na tento účet úložiště:
param location string = resourceGroup().location
param storageAccountName string = 'stor${uniqueString(resourceGroup().id)}'
param storageSkuName string = 'Standard_LRS'
param roleDefinitionResourceId string
param principalId string
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: storageAccountName
location: location
kind: 'StorageV2'
sku: {
name: storageSkuName
}
}
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
scope: storageAccount
name: guid(storageAccount.id, principalId, roleDefinitionResourceId)
properties: {
roleDefinitionId: roleDefinitionResourceId
principalId: principalId
principalType: 'ServicePrincipal'
}
}
Pokud explicitně nezadáte obor, Použije Bicep soubor targetScope
. V následujícím příkladu není zadána žádná scope
vlastnost, takže přiřazení role je vymezeno na předplatné:
param roleDefinitionResourceId string
param principalId string
targetScope = 'subscription'
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(subscription().id, principalId, roleDefinitionResourceId)
properties: {
roleDefinitionId: roleDefinitionResourceId
principalId: principalId
principalType: 'ServicePrincipal'
}
}
Tip
Použijte nejmenší rozsah, který potřebujete ke splnění svých požadavků.
Pokud například potřebujete udělit spravované identitě přístup k jednomu účtu úložiště, je vhodné vytvořit přiřazení role v oboru účtu úložiště, ne v oboru skupiny prostředků nebo předplatného.
Název
Název prostředku přiřazení role musí být globálně jedinečný identifikátor (GUID).
Názvy prostředků přiřazení rolí musí být v rámci tenanta Microsoft Entra jedinečné, i když je obor užší.
Aby bylo možné nasazení Bicep opakovat, je důležité, aby byl název deterministický – jinými slovy, aby při každém nasazení používal stejný název. Je vhodné vytvořit identifikátor GUID, který společně používá obor, ID objektu zabezpečení a ID role. Je vhodné použít guid()
funkci, která vám pomůže vytvořit deterministický identifikátor GUID pro názvy přiřazení rolí, například v tomto příkladu:
name: guid(subscription().id, principalId, roleDefinitionResourceId)
ID definice role
Přiřazenou rolí může být předdefinovaná definice role nebo vlastní definice role. Pokud chcete použít předdefinované definice role, vyhledejte odpovídající ID definice role. Například role Přispěvatel má ID b24988ac-6180-42a0-ab88-20f7382dd24c
definice role .
Při vytváření prostředku přiřazení role musíte zadat plně kvalifikované ID prostředku. Předdefinované ID definic rolí jsou prostředky v oboru předplatného. Osvědčeným postupem je použít existing
prostředek k odkazování na předdefinované role a přístup k plně kvalifikovanému ID prostředku pomocí .id
vlastnosti:
param principalId string
@description('This is the built-in Contributor role. See https://docs.microsoft.com/azure/role-based-access-control/built-in-roles#contributor')
resource contributorRoleDefinition 'Microsoft.Authorization/roleDefinitions@2022-04-01' existing = {
scope: subscription()
name: 'b24988ac-6180-42a0-ab88-20f7382dd24c'
}
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(resourceGroup().id, principalId, contributorRoleDefinition.id)
properties: {
roleDefinitionId: contributorRoleDefinition.id
principalId: principalId
principalType: 'ServicePrincipal'
}
}
Objekt zabezpečení
Vlastnost principalId
musí být nastavena na identifikátor GUID, který představuje identifikátor Microsoft Entra pro objekt zabezpečení. V Microsoft Entra ID, to je někdy označováno jako ID objektu.
Vlastnost principalType
určuje, zda je instanční objekt uživatelem, skupinou nebo instančním objektem. Spravované identity jsou formou instančního objektu.
Tip
Při vytváření přiřazení role v Bicep je důležité nastavit principalType
vlastnost. Jinak může dojít k přerušovaným chybám nasazení, zejména při práci s instančními objekty a spravovanými identitami.
Následující příklad ukazuje, jak vytvořit spravovanou identitu přiřazenou uživatelem a přiřazení role:
param location string = resourceGroup().location
param roleDefinitionResourceId string
var managedIdentityName = 'MyManagedIdentity'
resource managedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: managedIdentityName
location: location
}
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(resourceGroup().id, managedIdentity.id, roleDefinitionResourceId)
properties: {
roleDefinitionId: roleDefinitionResourceId
principalId: managedIdentity.properties.principalId
principalType: 'ServicePrincipal'
}
}
Chování při odstraňování prostředků
Když odstraníte uživatele, skupinu, instanční objekt nebo spravovanou identitu z ID Microsoft Entra, je vhodné odstranit všechna přiřazení rolí. Neodstraní se automaticky.
Všechna přiřazení rolí, která odkazují na odstraněné ID objektu zabezpečení, budou neplatná. Pokud se pokusíte znovu použít název přiřazení role pro jiné přiřazení role, nasazení selže. Pokud chcete toto chování obejít, měli byste před opětovným vytvořením odebrat staré přiřazení role nebo zajistit, abyste při nasazení nového přiřazení role použili jedinečný název. Tato šablona rychlého startu ukazuje, jak můžete definovat přiřazení role v modulu Bicep a jako počáteční hodnotu pro název přiřazení role použít ID objektu zabezpečení.
Vlastní definice rolí
Definice vlastních rolí umožňují definovat sadu oprávnění, která se pak dají přiřadit k objektu zabezpečení pomocí přiřazení role. Další informace o definicích rolí najdete v tématu Vysvětlení definic rolí Azure.
Chcete-li vytvořit vlastní definici role, definujte prostředek typu Microsoft.Authorization/roleDefinitions
. Příklad najdete v rychlém startu vytvoření nové role prostřednictvím rychlého startu nasazení na úrovni předplatného.
Názvy prostředků definice role musí být jedinečné v rámci tenanta Microsoft Entra, i když jsou přiřaditelné obory užší.
Poznámka:
Některé služby spravují vlastní definice rolí a přiřazení. Azure Cosmos DB například udržuje své vlastní Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments
prostředky a Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions
prostředky. Další informace najdete v dokumentaci ke konkrétní službě.
Související prostředky
- Dokumentace k prostředkům
- Prostředky rozšíření
- Obory
- Šablony pro rychlý start
- Příspěvky na blogu komunity
- Vytváření přiřazení rolí pro různé obory pomocí Bicep, autor: Barbara Forbes