Freigeben über


Hinzufügen und Bearbeiten der Bedingungen für die Azure-Rollenzuweisung mithilfe von Azure PowerShell

Eine Azure-Rollenzuweisungsbedingung ist eine zusätzliche Überprüfung, die Sie Ihrer Rollenzuweisung optional hinzufügen können, um die Zugriffssteuerung präziser zu gestalten. So können Sie beispielsweise eine Bedingung hinzufügen, die festgelegt, dass ein Objekt über ein bestimmtes Tag verfügen muss, damit das Objekt gelesen werden kann. In diesem Artikel wird beschrieben, wie Sie Bedingungen für Ihre Rollenzuweisungen mithilfe von Azure PowerShell hinzufügen, bearbeiten, auflisten und löschen.

Voraussetzungen

Informationen zu den Voraussetzungen für das Hinzufügen oder Bearbeiten von Rollenzuweisungsbedingungen finden Sie unter Voraussetzungen für Bedingungen.

Eine Bedingung hinzufügen

Verwenden Sie zum Hinzufügen einer Rollenzuweisungsbedingung den Befehl New-AzRoleAssignment. Der Befehl New-AzRoleAssignment umfasst die folgenden Parameter bezüglich Bedingungen:

Parameter Typ Beschreibung
Condition String Hierbei handelt es sich um die Bedingung, unter der dem Benutzer die Berechtigung erteilt werden kann.
ConditionVersion String Hierbei handelt es sich um die Version der Bedingungssyntax. Muss auf 2.0 festgelegt werden. Wenn Condition angegeben ist, muss auch ConditionVersion angegeben werden.

Im folgenden Beispiel wird gezeigt, wie Sie die Variablen initialisieren, um die Rolle Storage-Blobdatenleser mit einer Bedingung zuzuweisen. Die Bedingung überprüft, ob der Containername „blobs-example-container“ entspricht.

$subscriptionId = "<subscriptionId>"
$resourceGroup = "<resourceGroup>"
$roleDefinitionName = "Storage Blob Data Reader"
$roleDefinitionId = "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"
$userObjectId = "<userObjectId>"
$scope = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
$description = "Read access if container name equals blobs-example-container"
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'))"
$conditionVersion = "2.0"

Verwenden Sie New-AzRoleAssignment, um die Rolle mit einer Bedingung zuzuweisen.

New-AzRoleAssignment -ObjectId $userObjectId -Scope $scope -RoleDefinitionId $roleDefinitionId -Description $description -Condition $condition -ConditionVersion $conditionVersion

Dies ist ein Beispiel für die Ausgabe:

RoleAssignmentId   : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Authorization/roleAssignments/<roleAssignmentId>
Scope              : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>
DisplayName        : User1
SignInName         : user1@contoso.com
RoleDefinitionName : Storage Blob Data Reader
RoleDefinitionId   : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
ObjectId           : <userObjectId>
ObjectType         : User
CanDelegate        : False
Description        : Read access if container name equals blobs-example-container
ConditionVersion   : 2.0
Condition          : ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'))

Wenn Ihre Bedingung ein Dollarzeichen ($) enthält, müssen Sie ihm in PowerShell ein umgekehrtes einfaches Anführungszeichen (`) voranstellen. In der folgenden Bedingung werden beispielsweise Dollarzeichen zum Trennen der Tagschlüsselnamen verwendet. Weitere Informationen zu Regeln für Anführungszeichen in PowerShell finden Sie unter Informationen zu Regeln für Anführungszeichen.

$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>] StringEquals 'Cascade'))"

Bearbeiten einer Bedingung

Verwenden Sie Set-AzRoleAssignment, um eine vorhandene Rollenzuweisungsbedingung zu bearbeiten. Nur die Eigenschaften Condition, ConditionVersion und Description können bearbeitet werden. Der Parameter -PassThru bewirkt, dass Set-AzRoleAssignment die aktualisierte Rollenzuweisung zurückgibt. Dadurch wird die Visualisierung oder Speicherung in einer Variablen zur weiteren Verwendung ermöglicht.

Es gibt zwei Möglichkeiten zum Bearbeiten einer Bedingung: Sie können das PSRoleAssignment-Objekt oder eine JSON-Datei verwenden.

Bearbeiten einer Bedingung mithilfe des PSRoleAssignment-Objekts

  1. Verwenden Sie Get-AzRoleAssignment, um die vorhandene Rollenzuweisung mit einer Bedingung als PSRoleAssignment-Objekt abzurufen.

    $testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectId
    
  2. Bearbeiten Sie die Bedingung.

    $condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container2'))"
    
  3. Initialisieren Sie die Bedingung und Beschreibung.

    $testRa.Condition = $condition
    $testRa.Description = "Read access if container name equals blobs-example-container or blobs-example-container2"
    
  4. Aktualisieren Sie mithilfe von Set-AzRoleAssignment die Bedingung für die Rollenzuweisung.

    Set-AzRoleAssignment -InputObject $testRa -PassThru
    

    Beispiel für die Ausgabe:

    RoleAssignmentId   : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Authorization/roleAssignments/<roleAssignmentId>
    Scope              : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>
    DisplayName        : User1
    SignInName         : user1@contoso.com
    RoleDefinitionName : Storage Blob Data Reader
    RoleDefinitionId   : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
    ObjectId           : <userObjectId>
    ObjectType         : User
    CanDelegate        : False
    Description        : Read access if container name equals blobs-example-container or blobs-example-container2
    ConditionVersion   : 2.0
    Condition          : ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container2'))
    

Bearbeiten einer Bedingung mithilfe einer JSON-Datei

Zum Bearbeiten einer Bedingung können Sie auch eine JSON-Datei als Eingabe verwenden. In der folgenden JSON-Beispieldatei wurden Condition und Description geändert. Sie müssen alle Eigenschaften in der JSON-Datei angeben, um eine Bedingung zu aktualisieren.

{
    "RoleDefinitionId": "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
    "ObjectId": "<userObjectId>",
    "ObjectType": "User",
    "Scope": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>",
    "Condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container2'))",
    "ConditionVersion": "2.0",
    "CanDelegate": false,
    "Description": "Read access if container name equals blobs-example-container or blobs-example-container2",
    "RoleAssignmentId": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Authorization/roleAssignments/<roleAssignmentId>"
}

Aktualisieren Sie mithilfe von Set-AzRoleAssignment die Bedingung für die Rollenzuweisung.

Set-AzRoleAssignment -InputFile "C:\path\roleassignment.json" -PassThru

Beispiel für die Ausgabe:

RoleAssignmentId   : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Authorization/roleAssignments/<roleAssignmentId>
Scope              : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>
DisplayName        : User1
SignInName         : user1@contoso.com
RoleDefinitionName : Storage Blob Data Reader
RoleDefinitionId   : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
ObjectId           : <userObjectId>
ObjectType         : User
CanDelegate        : False
Description        : Read access if container name equals blobs-example-container or blobs-example-container2
ConditionVersion   : 2.0
Condition          : ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container2'))

Bearbeiten von Bedingungen in mehreren Rollenzuweisungen

Wenn Sie dieselbe Aktualisierung für mehrere Rollenzuweisungen vornehmen müssen, können Sie eine Schleife verwenden. Die folgenden Befehle führen die folgende Aufgabe aus:

  • Sucht Rollenzuweisungen in einem Abonnement mit <find-condition-string-1>- oder <find-condition-string-2>-Zeichenfolgen in der Bedingung.

    $tenantId = "<your-tenant-id>"
    $subscriptionId = "<your-subscription-id>";
    $scope = "/subscriptions/$subscriptionId"
    $findConditionString1 = "<find-condition-string-1>"
    $findConditionString2 = "<find-condition-string-2>"
    Connect-AzAccount -TenantId $tenantId -SubscriptionId $subscriptionId
    $roleAssignments = Get-AzRoleAssignment -Scope $scope
    $foundRoleAssignments = $roleAssignments | Where-Object { ($_.Condition -Match $findConditionString1) -Or ($_.Condition -Match $findConditionString2) }
    

Die folgenden Befehle führen die folgenden Aufgaben aus:

  • Ersetzt in der Bedingung der gefundenen Rollenzuweisungen <condition-string> durch <replace-condition-string>.

  • Aktualisiert die Rollenzuweisungen mit den Änderungen.

    $conditionString = "<condition-string>"
    $conditionStringReplacement = "<condition-string-replacement>"
    $updatedRoleAssignments = $foundRoleAssignments | ForEach-Object { $_.Condition = $_.Condition -replace $conditionString, $conditionStringReplacement; $_ }
    $updatedRoleAssignments | ForEach-Object { Set-AzRoleAssignment -InputObject $_ -PassThru }
    

Wenn Zeichenfolgen Sonderzeichen enthalten, z. B. eckige Klammern ([ ]), müssen Sie diese Zeichen mit einem umgekehrten Schrägstrich (\) escapen.

Auflisten einer Bedingung

Verwenden Sie zum Auflisten einer Rollenzuweisungsbedingung den Befehl Get-AzRoleAssignment. Weitere Informationen finden Sie unter Auflisten von Azure-Rollenzuweisungen mit Azure PowerShell.

Löschen einer Bedingung

Zum Löschen einer Rollenzuweisungsbedingung bearbeiten Sie die Rollenzuweisungsbedingung und legen sowohl die Eigenschaft Condition als auch ConditionVersion entweder auf eine leere Zeichenfolge ("") oder $null fest.

Alternativ können Sie den Befehl Remove-AzRoleAssignment verwenden, wenn Sie sowohl die Rollenzuweisung als auch die Bedingung löschen möchten. Weitere Informationen finden Sie unter Entfernen von Azure-Rollenzuweisungen.

Nächste Schritte