Freigeben über


Verwenden von Bicep zum Erstellen von Azure-Ressourcen für die rollenbasierte Zugriffssteuerung (Azure RBAC)

Azure verfügt über ein leistungsfähiges rollenbasiertes Zugriffssteuerungssystem (RBAC). Weitere Informationen zu Azure RBAC finden Sie unter Was ist azure Role-based access control (Azure RBAC)? Mithilfe von Bicep können Sie Ihre RBAC-Rollenzuweisungen und Rollendefinitionen programmgesteuert definieren.

Rollenzuweisungen

Rollenzuweisungen ermöglichen es Ihnen, einem Prinzipal wie einem Benutzer, einer Gruppe oder einem Dienstprinzipalzugriff auf eine bestimmte Azure-Ressource zu gewähren.

Um eine Rollenzuweisung zu definieren, erstellen Sie eine Ressource mit Typ Microsoft.Authorization/roleAssignments. Eine Rollendefinition verfügt über mehrere Eigenschaften, einschließlich eines Bereichs, eines Namens, einer Rollendefinitions-ID, einer Prinzipal-ID und eines Prinzipaltyps.

Geltungsbereich

Rollenzuweisungen gelten für einen bestimmten Bereich, der die Ressource oder den Satz von Ressourcen definiert, auf die Sie Zugriff gewähren. Weitere Informationen finden Sie in der Grundlegendes zum Bereich von Azure RBAC.

Rollenzuweisungen sind Erweiterungsressourcen, d. h., sie gelten für eine andere Ressource. Das folgende Beispiel zeigt, wie Sie ein Speicherkonto und eine Rollenzuweisung für dieses Speicherkonto erstellen:

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@2025-06-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'
  }
}

Wenn Sie den Bereich nicht explizit angeben, verwendet Bicep die Datei targetScope. Im folgenden Beispiel wird keine scope Eigenschaft angegeben, sodass die Rollenzuweisung auf das Abonnement beschränkt ist.

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

Verwenden Sie den kleinsten Bereich, den Sie benötigen, um Ihre Anforderungen zu erfüllen.

Wenn Sie beispielsweise einem einzelnen Speicherkonto einen verwalteten Identitätszugriff gewähren müssen, empfiehlt es sich, die Rollenzuweisung im Bereich des Speicherkontos und nicht im Bereich der Ressourcengruppe oder des Abonnements zu erstellen.

Name

Der Ressourcenname einer Rollenzuweisung muss eine GUID (Globally Unique Identifier) sein.

Die Ressourcennamen von Rollenzuweisungen müssen innerhalb des Microsoft Entra-Mandanten eindeutig sein, auch wenn der Gültigkeitsbereich kleiner ist.

Damit Ihre Bicep-Bereitstellung wiederholt werden kann, ist es wichtig, dass der Name deterministisch ist, d. h. bei jeder Bereitstellung muss derselbe Namen verwendet werden. Es ist sinnvoll, eine GUID mit einer Kombination aus Bereich, Prinzipal-ID und Rollen-ID zu erstellen. Es wird empfohlen, die Funktion guid() zu verwenden, um eine deterministische GUID für Ihre Rollenzuweisungsnamen zu erstellen, wie in diesem Beispiel:

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

Rollendefinitions-ID

Die von Ihnen zugewiesene Rolle kann eine integrierte Rollendefinition oder eine benutzerdefinierte Rollendefinition sein. Um eine integrierte Rollendefinition zu verwenden, suchen Sie die entsprechende Rollendefinitions-ID. Beispielsweise verfügt die Rolle "Mitwirkender" über eine Rollendefinitions-ID von b24988ac-6180-42a0-ab88-20f7382dd24c.

Wenn Sie die Rollenzuweisungsressource erstellen, müssen Sie eine vollqualifizierte Ressourcen-ID angeben. Integrierte Rollendefinitions-IDs sind Ressourcen mit Abonnementbereich. Es wird empfohlen, mithilfe einer existing-Ressource auf die integrierte Rolle zu verweisen, und die .id-Eigenschaft zu verwenden, um auf die voll qualifizierte Ressourcen-ID zuzugreifen:

param principalId string

@description('This is the built-in Contributor role. See https://learn.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'
  }
}

Schulleiter

Die Eigenschaft principalId muss auf eine GUID festgelegt werden, die den Microsoft Entra-Bezeichner für den Prinzipal repräsentiert. In Microsoft Entra-ID wird dies manchmal als Objekt-ID bezeichnet.

Die principalType Eigenschaft gibt an, ob der Prinzipal ein Benutzer, eine Gruppe oder ein Dienstprinzipal ist. Verwaltete Identitäten sind eine Form von Dienstprinzipal.

Tipp

Es ist wichtig, die principalType Eigenschaft festzulegen, wenn Sie eine Rollenzuweisung in Bicep erstellen. Andernfalls kann es zu zeitweiligen Bereitstellungsfehlern kommen, insbesondere wenn Sie mit Dienstprinzipalen und verwalteten Identitäten arbeiten.

Das folgende Beispiel zeigt, wie Sie eine vom Benutzer zugewiesene verwaltete Identität und eine Rollenzuweisung erstellen:

param location string = resourceGroup().location
param roleDefinitionResourceId string

var managedIdentityName = 'MyManagedIdentity'

resource managedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2025-01-31-preview' = {
  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'
  }
}

Verhalten beim Löschen von Ressourcen

Wenn Sie einen Benutzer, eine Gruppe, einen Dienstprinzipal oder eine verwaltete Identität aus der Microsoft Entra-ID löschen, empfiehlt es sich, alle Rollenzuweisungen zu löschen. Sie werden nicht automatisch gelöscht.

Alle Rollenzuweisungen, die auf eine gelöschte Prinzipal-ID verweisen, werden ungültig. Wenn Sie versuchen, den Namen einer Rollenzuweisung für eine andere Rollenzuweisung wiederzuverwenden, schlägt die Bereitstellung fehl. Um dieses Verhalten zu umgehen, sollten Sie entweder die alte Rollenzuweisung entfernen, bevor Sie es neu erstellen oder sicherstellen, dass Sie einen eindeutigen Namen verwenden, wenn Sie eine neue Rollenzuweisung bereitstellen. Diese Schnellstartvorlage veranschaulicht, wie Sie eine Rollenzuweisung in einem Bicep-Modul definieren und eine Prinzipal-ID als Ausgangswert für den Rollenzuweisungsnamen verwenden können.

Benutzerdefinierte Rollendefinitionen

Mit benutzerdefinierten Rollendefinitionen können Sie einen Satz von Berechtigungen definieren, die dann mithilfe einer Rollenzuweisung einem Prinzipal zugewiesen werden können. Weitere Informationen zu Rollendefinitionen finden Sie unter "Grundlegendes zu Azure-Rollendefinitionen".

Um eine benutzerdefinierte Rollendefinition zu erstellen, definieren Sie eine Ressource vom Typ Microsoft.Authorization/roleDefinitions. Im Schnellstart Erstellen einer neuen Rolle über eine Bereitstellung auf Abonnementebene finden Sie ein Beispiel.

Ressourcennamen für Rollendefinitionen müssen innerhalb des Microsoft Entra-Mandanten eindeutig sein, selbst wenn die zuordnungsfähigen Bereiche enger gefasst sind.

Hinweis

Einige Dienste verwalten ihre eigenen Rollendefinitionen und Zuordnungen. Beispielsweise verwaltet Azure Cosmos DB eigene Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments- und Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions-Ressourcen. Weitere Informationen finden Sie in der Dokumentation des jeweiligen Diensts.