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@2022-09-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-20f7382dd24cdefinice 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@2018-01-01-preview' 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ě.