Share via


Lägga till eller redigera villkor för Tilldelning av Azure-roller med Hjälp av Azure PowerShell

Ett Villkor för Azure-rolltilldelning är ytterligare en kontroll som du kan lägga till i rolltilldelningen för att ge mer detaljerad åtkomstkontroll. Du kan till exempel lägga till ett villkor som kräver att ett objekt har en specifik tagg för att läsa objektet. Den här artikeln beskriver hur du lägger till, redigerar, listar eller tar bort villkor för dina rolltilldelningar med hjälp av Azure PowerShell.

Förutsättningar

Information om kraven för att lägga till eller redigera rolltilldelningsvillkor finns i Villkorskrav.

Lägg till ett villkor

Om du vill lägga till ett rolltilldelningsvillkor använder du New-AzRoleAssignment. Kommandot New-AzRoleAssignment innehåller följande parametrar relaterade till villkor.

Parameter Typ Description
Condition String Villkor under vilket användaren kan beviljas behörighet.
ConditionVersion String Version av villkorssyntaxen. Måste anges till 2.0. Om Condition anges ConditionVersion måste du också anges.

I följande exempel visas hur du initierar variablerna för att tilldela rollen Storage Blob Data Reader med ett villkor. Villkoret kontrollerar om containernamnet är lika med "blobs-example-container".

$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"

Använd New-AzRoleAssignment för att tilldela rollen med ett villkor.

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

Här är ett exempel på utdata:

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

Om ditt villkor i PowerShell innehåller ett dollartecken ($) måste du prefixa det med en backtick ('). Följande villkor använder till exempel dollartecken för att definiera taggnyckelnamnet. Mer information om regler för citattecken i PowerShell finns i Om citatregler.

$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'))"

Redigera ett villkor

Om du vill redigera ett befintligt rolltilldelningsvillkor använder du Set-AzRoleAssignment. ConditionEndast egenskaperna , ConditionVersionoch Description kan redigeras. Parametern -PassThru gör att Set-AzRoleAssignment returnerar den uppdaterade rolltilldelningen, vilket gör att visualisering eller lagring i en variabel kan användas ytterligare.

Det finns två sätt att redigera ett villkor. Du kan använda objektet PSRoleAssignment eller en JSON-fil.

Redigera ett villkor med hjälp av PSRoleAssignment-objektet

  1. Använd Get-AzRoleAssignment för att hämta den befintliga rolltilldelningen med ett villkor som ett PSRoleAssignment objekt.

    $testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectId
    
  2. Redigera villkoret.

    $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. Initiera villkoret och beskrivningen.

    $testRa.Condition = $condition
    $testRa.Description = "Read access if container name equals blobs-example-container or blobs-example-container2"
    
  4. Använd Set-AzRoleAssignment för att uppdatera villkoret för rolltilldelningen.

    Set-AzRoleAssignment -InputObject $testRa -PassThru
    

    Här är ett exempel på utdata:

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

Redigera ett villkor med hjälp av en JSON-fil

Om du vill redigera ett villkor kan du också ange en JSON-fil som indata. Följande visar ett exempel på en JSON-fil där Condition och Description uppdateras. Du måste ange alla egenskaper i JSON-filen för att uppdatera ett villkor.

{
    "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>"
}

Använd Set-AzRoleAssignment för att uppdatera villkoret för rolltilldelningen.

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

Här är ett exempel på utdata:

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

Redigera villkor i flera rolltilldelningar

Om du behöver göra samma uppdatering av flera rolltilldelningar kan du använda en loop. Följande kommandon utför följande uppgift:

  • Hittar rolltilldelningar i en prenumeration med <find-condition-string-1> eller <find-condition-string-2> strängar i villkoret.

    $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) }
    

Följande kommandon utför följande uppgifter:

  • I villkoret för de hittade rolltilldelningarna ersätter <condition-string> med <replace-condition-string>.

  • Uppdateringar rolltilldelningarna med ändringarna.

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

Om strängar innehåller specialtecken, till exempel hakparenteser ([ ]), måste du undvika dessa tecken med ett omvänt snedstreck (\).

Lista ett villkor

Om du vill visa en lista över ett rolltilldelningsvillkor använder du Get-AzRoleAssignment. Mer information finns i Lista Azure-rolltilldelningar med Azure PowerShell.

Ta bort ett villkor

Om du vill ta bort ett rolltilldelningsvillkor redigerar du rolltilldelningsvillkoret och anger både Condition egenskaperna och ConditionVersion till antingen en tom sträng ("") eller $null.

Om du vill ta bort både rolltilldelningen och villkoret kan du också använda kommandot Remove-AzRoleAssignment . Mer information finns i Ta bort Azure-rolltilldelningar.

Nästa steg