Freigeben über


Hinzufügen oder Bearbeiten von Azure-Rollenzuweisungsbedingungen mithilfe von Azure PowerShell

Eine Azure-Rollenzuweisungsbedingung ist eine zusätzliche Überprüfung, die Sie optional zu Ihrer Rollenzuweisung hinzufügen können, um eine differenziertere Zugriffssteuerung bereitzustellen. So können Sie beispielsweise eine Bedingung hinzufügen, die vorschreibt, dass ein Objekt ein bestimmtes Etikett tragen muss, um es lesen zu können. In diesem Artikel wird beschrieben, wie Sie Bedingungen für Ihre Rollenzuweisungen mithilfe von Azure PowerShell hinzufügen, bearbeiten, auflisten oder löschen.

Voraussetzungen

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

Bedingung hinzufügen

Verwenden Sie "New-AzRoleAssignment", um eine Rollenzuweisungsbedingung hinzuzufügen. Der Befehl "New-AzRoleAssignment " enthält die folgenden Parameter im Zusammenhang mit Bedingungen.

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

Das folgende Beispiel zeigt, wie Sie die Variablen initialisieren, um die Rolle " Storage Blob Data Reader " 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

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 "Regeln zum 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 Condition, ConditionVersion und Description Eigenschaften können bearbeitet werden. Der -PassThru Parameter bewirkt , dass Set-AzRoleAssignment die aktualisierte Rollenzuweisung zurückgibt, was die Visualisierung oder speicherung in einer Variablen zur weiteren Verwendung zulässt.

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. Verwenden Sie Set-AzRoleAssignment , um die Bedingung für die Rollenzuweisung zu aktualisieren.

    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

Um eine Bedingung zu bearbeiten, können Sie auch eine JSON-Datei als Eingabe bereitstellen. Im Folgenden sehen Sie ein Beispiel für eine JSON-Datei, in der Condition und Description aktualisiert werden. 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>"
}

Verwenden Sie Set-AzRoleAssignment , um die Bedingung für die Rollenzuweisung zu aktualisieren.

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.

Eine Bedingung auflisten

Verwenden Sie "Get-AzRoleAssignment", um eine Rollenzuweisungsbedingung auflisten zu können. Weitere Informationen finden Sie unter Auflisten von Azure-Rollenzuweisungen mit Azure PowerShell.

Löschen einer Bedingung

Um eine Rollenzuweisungsbedingung zu löschen, bearbeiten Sie die Rollenzuweisungsbedingung und legen Sie sowohl die Condition- als auch die ConditionVersion-Eigenschaften auf eine leere Zeichenfolge ("") oder $null fest.

Alternativ können Sie auch 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