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. Condition
Tylko właściwości , ConditionVersion
i 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
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
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'))"
Zainicjuj warunek i opis.
$testRa.Condition = $condition $testRa.Description = "Read access if container name equals blobs-example-container or blobs-example-container2"
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.