Azure RBAC-erőforrások létrehozása a Bicep használatával

Az Azure hatékony szerepköralapú hozzáférés-vezérlési (RBAC) rendszerrel rendelkezik. További információ az Azure RBAC-ről: Mi az Az Azure szerepköralapú hozzáférés-vezérlése (Azure RBAC)? A Bicep használatával programozott módon definiálhatja RBAC-szerepkör-hozzárendeléseit és szerepkördefinícióit.

Szerepkör-hozzárendelések

A szerepkör-hozzárendelések lehetővé teszik, hogy egy egyszerű (például felhasználó, csoport vagy szolgáltatásnév) hozzáférést adjon egy adott Azure-erőforráshoz.

Szerepkör-hozzárendelés definiálásához hozzon létre egy erőforrást típussal Microsoft.Authorization/roleAssignments. A szerepkördefiníciók több tulajdonsággal rendelkeznek, beleértve a hatókört, a nevet, a szerepkördefiníció azonosítóját, az egyszerű azonosítót és az egyszerű típust.

Scope

A szerepkör-hozzárendelések egy adott hatókörre vonatkoznak, amely meghatározza azt az erőforrást vagy erőforráskészletet, amelyhez hozzáférést ad. További információ: Az Azure RBAC hatókörének ismertetése.

A szerepkör-hozzárendelések bővítményerőforrások, ami azt jelenti, hogy egy másik erőforrásra vonatkoznak. Az alábbi példa bemutatja, hogyan hozhat létre tárfiókot és szerepkör-hozzárendelést az adott tárfiókra:

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'
  }
}

Ha nem adja meg explicit módon a hatókört, a Bicep a fájl targetScope. Az alábbi példában nincs scope megadva tulajdonság, így a szerepkör-hozzárendelés hatóköre az előfizetésre terjed ki:

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'
  }
}

Tipp.

A követelményeknek való megfeleléshez használja a legkisebb hatókört.

Ha például egy felügyelt identitáshoz hozzáférést kell adnia egyetlen tárfiókhoz, érdemes biztonsági eljárásként létrehozni a szerepkör-hozzárendelést a tárfiók hatókörében, nem az erőforráscsoportban vagy az előfizetés hatókörében.

Name

A szerepkör-hozzárendelés erőforrásnevének globálisan egyedi azonosítónak (GUID) kell lennie.

A szerepkör-hozzárendelési erőforrásneveknek egyedinek kell lenniük a Microsoft Entra-bérlőn belül, még akkor is, ha a hatókör szűkebb.

Ahhoz, hogy a Bicep-üzemelő példány megismételhető legyen, fontos, hogy a név determinisztikus legyen , vagyis minden üzembe helyezéskor ugyanazt a nevet használja. Célszerű olyan GUID-t létrehozni, amely együtt használja a hatókört, az egyszerű azonosítót és a szerepkör-azonosítót. Érdemes a guid() függvény használatával determinisztikus GUID-t létrehozni a szerepkör-hozzárendelések neveihez, például ebben a példában:

name: guid(subscription().id, principalId, roleDefinitionResourceId)

Szerepkördefiníció azonosítója

A hozzárendelt szerepkör lehet beépített szerepkördefiníció vagy egyéni szerepkördefiníció. Beépített szerepkördefiníció használatához keresse meg a megfelelő szerepkördefiníció-azonosítót. A Közreműködő szerepkör például rendelkezik a szerepkördefiníció azonosítójávalb24988ac-6180-42a0-ab88-20f7382dd24c.

A szerepkör-hozzárendelési erőforrás létrehozásakor meg kell adnia egy teljes erőforrás-azonosítót. A beépített szerepkördefiníciós azonosítók előfizetés-hatókörű erőforrások. Célszerű egy erőforrást használni existing a beépített szerepkörre való hivatkozáshoz, és a tulajdonság használatával elérni a .id teljes erőforrás-azonosítót:

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'
  }
}

Rendszerbiztonsági tag

A principalId tulajdonságot guid értékre kell állítani, amely az egyszerű Microsoft Entra-azonosítót jelöli. A Microsoft Entra ID-ban ezt néha objektumazonosítónak is nevezik.

A principalType tulajdonság azt határozza meg, hogy az egyszerű felhasználó, csoport vagy szolgáltatásnév. A felügyelt identitások a szolgáltatásnév egyik formája.

Tipp.

Fontos beállítani a tulajdonságot, principalType amikor szerepkör-hozzárendelést hoz létre a Bicepben. Ellenkező esetben időnként üzembehelyezési hibák merülhetnek fel, különösen akkor, ha szolgáltatásnevek és felügyelt identitások használatával dolgozik.

Az alábbi példa bemutatja, hogyan hozhat létre felhasználó által hozzárendelt felügyelt identitást és szerepkör-hozzárendelést:

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'
  }
}

Erőforrás-törlési viselkedés

Amikor töröl egy felhasználót, csoportot, szolgáltatásnevet vagy felügyelt identitást a Microsoft Entra-azonosítóból, érdemes törölnie a szerepkör-hozzárendeléseket. A rendszer nem törli őket automatikusan.

A törölt egyszerű azonosítóra hivatkozó szerepkör-hozzárendelések érvénytelenek lesznek. Ha megpróbálja újból felhasználni egy szerepkör-hozzárendelés nevét egy másik szerepkör-hozzárendeléshez, az üzembe helyezés sikertelen lesz. Ennek a viselkedésnek a megkerüléséhez távolítsa el a régi szerepkör-hozzárendelést, mielőtt újra létrehozza, vagy győződjön meg arról, hogy egyedi nevet használ egy új szerepkör-hozzárendelés üzembe helyezésekor. Ez a rövid útmutatósablon bemutatja, hogyan definiálhat szerepkör-hozzárendelést egy Bicep-modulban, és hogyan használhat egyszerű azonosítót a szerepkör-hozzárendelés nevének kezdőértékeként.

Egyéni szerepkör-definíciók

Az egyéni szerepkör-definíciók lehetővé teszik, hogy meghatározzon egy engedélykészletet, amelyet aztán hozzárendelhet egy taghoz egy szerepkör-hozzárendelés használatával. A szerepkördefiníciókról további információt az Azure-szerepkördefiníciók ismertetése című témakörben talál.

Egyéni szerepkördefiníció létrehozásához definiáljon egy típusú Microsoft.Authorization/roleDefinitionserőforrást. Példaként tekintse meg az előfizetési szintű üzembe helyezési gyorsútmutatón keresztüli új szerepkör-def létrehozását.

A szerepkördefiníciós erőforrásneveknek egyedinek kell lenniük a Microsoft Entra-bérlőn belül, még akkor is, ha a hozzárendelhető hatókörök szűkebbek.

Megjegyzés:

Egyes szolgáltatások saját szerepkördefiníciókat és hozzárendeléseket kezelnek. Az Azure Cosmos DB például fenntartja a saját Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments és Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions az erőforrásait. További információkért tekintse meg az adott szolgáltatás dokumentációját.