Udostępnij za pośrednictwem


Dodawanie lub edytowanie warunków przypisywania ról platformy Azure przy użyciu programu Azure PowerShell

Warunek przypisania roli platformy Azure to dodatkowa kontrola, którą można opcjonalnie dodać do przypisania roli, aby zapewnić bardziej szczegółową kontrolę dostępu. Można na przykład dodać warunek, który wymaga, aby obiekt miał określony tag do odczytania obiektu. W tym artykule opisano sposób dodawania, edytowania, wyświetlania listy lub usuwania warunków przypisań ról przy użyciu programu Azure PowerShell.

Wymagania wstępne

Aby uzyskać informacje o wymaganiach wstępnych dotyczących dodawania lub edytowania warunków przypisywania ról, zobacz Warunki wstępne.

Dodaj warunek

Aby dodać warunek przypisania roli, użyj polecenia New-AzRoleAssignment. Polecenie New-AzRoleAssignment zawiera następujące parametry związane z warunkami.

Parametr Type opis
Condition String Warunek, w którym użytkownik może mieć uprawnienia.
ConditionVersion String Wersja składni warunku. Musi być ustawiona na 2.0. Jeśli Condition jest określony, ConditionVersion należy również określić.

W poniższym przykładzie pokazano, jak zainicjować zmienne w celu przypisania roli Czytelnik danych obiektu blob usługi Storage z warunkiem. Warunek sprawdza, czy nazwa kontenera jest równa "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"

Użyj polecenia New-AzRoleAssignment , aby przypisać rolę z warunkiem.

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

Poniżej przedstawiono przykładowe dane wyjściowe:

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

W programie PowerShell, jeśli warunek zawiera znak dolara ($), musisz go poprzedzić backtick ('). Na przykład poniższy warunek używa znaków dolara w celu wyliniowania nazwy klucza tagu. Aby uzyskać więcej informacji na temat reguł cudzysłowu w programie PowerShell, zobacz About quoting Rules (Informacje o regułach cytowania).

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

Edytowanie warunku

Aby edytować istniejący warunek przypisania roli, użyj polecenia Set-AzRoleAssignment. ConditionTylko właściwości , ConditionVersioni Description można edytować. Parametr -PassThru powoduje zwrócenie zaktualizowanego przypisania roli Set-AzRoleAssignment , co umożliwia wizualizację lub magazyn w zmiennej do dalszego użycia.

Istnieją dwa sposoby edytowania warunku. Możesz użyć PSRoleAssignment obiektu lub pliku JSON.

Edytowanie warunku przy użyciu obiektu PSRoleAssignment

  1. Użyj polecenia Get-AzRoleAssignment , aby uzyskać istniejące przypisanie roli z warunkiem jako obiektem PSRoleAssignment .

    $testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectId
    
  2. Edytuj warunek.

    $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. Zainicjuj warunek i opis.

    $testRa.Condition = $condition
    $testRa.Description = "Read access if container name equals blobs-example-container or blobs-example-container2"
    
  4. Użyj polecenia Set-AzRoleAssignment , aby zaktualizować warunek przypisania roli.

    Set-AzRoleAssignment -InputObject $testRa -PassThru
    

    Poniżej przedstawiono przykładowe dane wyjściowe:

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

Edytowanie warunku przy użyciu pliku JSON

Aby edytować warunek, możesz również podać plik JSON jako dane wejściowe. Poniżej przedstawiono przykładowy plik JSON, w którym Condition jest aktualizowany i Description aktualizowany. Aby zaktualizować warunek, należy określić wszystkie właściwości w pliku JSON.

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

Użyj polecenia Set-AzRoleAssignment , aby zaktualizować warunek przypisania roli.

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

Poniżej przedstawiono przykładowe dane wyjściowe:

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

Edytowanie warunków w wielu przypisaniach ról

Jeśli musisz wprowadzić tę samą aktualizację do wielu przypisań ról, możesz użyć pętli. Następujące polecenia wykonują następujące zadanie:

  • Znajduje przypisania ról w subskrypcji z ciągami <find-condition-string-1> lub <find-condition-string-2> w warunku.

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

Następujące polecenia wykonują następujące zadania:

  • W warunku znalezionych przypisań ról zastąp element <condition-string> .<replace-condition-string>

  • Aktualizacje przypisań ról ze zmianami.

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

Jeśli ciągi zawierają znaki specjalne, takie jak nawiasy kwadratowe ([ ]), należy uciec od tych znaków ukośnikiem odwrotnym (\).

Wyświetlanie listy warunku

Aby wyświetlić listę warunków przypisania roli, użyj polecenia Get-AzRoleAssignment. Aby uzyskać więcej informacji, zobacz Wyświetlanie listy przypisań ról platformy Azure przy użyciu programu Azure PowerShell.

Usuwanie warunku

Aby usunąć warunek przypisania roli, zmodyfikuj warunek przypisania roli i ustaw zarówno właściwości , Condition jak i ConditionVersion na pusty ciąg ("") lub $null.

Alternatywnie, jeśli chcesz usunąć zarówno przypisanie roli, jak i warunek, możesz użyć polecenia Remove-AzRoleAssignment . Aby uzyskać więcej informacji, zobacz Usuwanie przypisań ról platformy Azure.

Następne kroki