Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Условие назначения ролей Azure — это дополнительная проверка, которую можно дополнительно добавить в назначение роли, чтобы обеспечить более точное управление доступом. Например, можно добавить условие, требующее, чтобы у объекта был конкретный тег, чтобы его можно было прочитать. В этой статье описывается, как добавлять, изменять, перечислять или удалять условия назначения ролей с помощью Azure PowerShell.
Предпосылки
Дополнительные сведения о предварительных требованиях для добавления и изменения условий назначения ролей см. в разделе Требования к условиям.
Добавить условие
Чтобы добавить условие назначения ролей, используйте New-AzRoleAssignment. Команда New-AzRoleAssignment включает следующие параметры, связанные с условиями.
| Параметр | Тип | Описание |
|---|---|---|
Condition |
Струна | Условие, при котором пользователю может быть предоставлено разрешение. |
ConditionVersion |
Струна | Версия синтаксиса условия. Необходимо задать значение 2.0. Если Condition задано, ConditionVersion необходимо также указать. |
В следующем примере показано, как инициализировать переменные для назначения роли Storage Blob Data Reader с условием. Условие проверяет, совпадает ли имя контейнера с '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"
Используйте New-AzRoleAssignment, чтобы назначить роль с условием.
New-AzRoleAssignment -ObjectId $userObjectId -Scope $scope -RoleDefinitionId $roleDefinitionId -Description $description -Condition $condition -ConditionVersion $conditionVersion
Пример результата выглядит следующим образом.
RoleAssignmentId : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Authorization/roleAssignments/<roleAssignmentId>
Scope : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>
DisplayName : User1
SignInName : [email protected]
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'))
В PowerShell, если условие включает знак доллара ($), необходимо префиксить его с помощью обратной символики ('). Например, следующее условие использует знаки доллара для обозначения имени ключа тега. Дополнительные сведения о правилах кавычек в PowerShell см. в разделе "О правилах кворирования".
$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'))"
Изменение условия
Чтобы изменить существующее условие назначения ролей, используйте Set-AzRoleAssignment. Только свойства Condition, ConditionVersion и Description можно изменять. Параметр -PassThru приводит к тому, что Set-AzRoleAssignment возвращает обновленное назначение ролей, что позволяет визуализацию или сохранение в переменной для дальнейшего использования.
Изменить условие можно двумя способами. Вы можете использовать объект PSRoleAssignment или JSON-файл.
Изменение условия с помощью объекта PSRoleAssignment
Используйте Get-AzRoleAssignment, чтобы получить текущее назначение роли с условием, представленное как объект
PSRoleAssignment.$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectIdИзмените условие.
$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'))"Инициализировать условие и описание.
$testRa.Condition = $condition $testRa.Description = "Read access if container name equals blobs-example-container or blobs-example-container2"Используйте Set-AzRoleAssignment , чтобы обновить условие назначения роли.
Set-AzRoleAssignment -InputObject $testRa -PassThruПример результата выглядит следующим образом.
RoleAssignmentId : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Authorization/roleAssignments/<roleAssignmentId> Scope : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup> DisplayName : User1 SignInName : [email protected] 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'))
Изменение условия с помощью JSON-файла
Чтобы изменить условие, можно также предоставить JSON-файл в качестве входных данных. Ниже показан пример JSON-файла, в котором Condition и Description обновляются. Чтобы обновить условие, необходимо указать все свойства в 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>"
}
Используйте Set-AzRoleAssignment , чтобы обновить условие назначения роли.
Set-AzRoleAssignment -InputFile "C:\path\roleassignment.json" -PassThru
Пример результата выглядит следующим образом.
RoleAssignmentId : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Authorization/roleAssignments/<roleAssignmentId>
Scope : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>
DisplayName : User1
SignInName : [email protected]
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'))
Изменение условий в нескольких назначениях ролей
Если необходимо выполнить одно обновление для нескольких назначений ролей, можно использовать цикл. Следующие команды выполняют следующую задачу:
Находит назначения ролей в подписке с
<find-condition-string-1>или<find-condition-string-2>строками в условии.$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) }
Следующие команды выполняют следующие задачи:
В условиях найденных назначений ролей заменяются
<condition-string>на<replace-condition-string>.Обновляет назначения ролей в соответствии с изменениями.
$conditionString = "<condition-string>" $conditionStringReplacement = "<condition-string-replacement>" $updatedRoleAssignments = $foundRoleAssignments | ForEach-Object { $_.Condition = $_.Condition -replace $conditionString, $conditionStringReplacement; $_ } $updatedRoleAssignments | ForEach-Object { Set-AzRoleAssignment -InputObject $_ -PassThru }
Если строки содержат специальные символы, такие как квадратные скобки ([ ]), эти символы нужно предварять обратной косой чертой (\).
Перечислите условие
Чтобы получить список условий назначения ролей, используйте Get-AzRoleAssignment. Дополнительные сведения см. в статье "Перечисление назначений ролей Azure с помощью Azure PowerShell".
Удаление условия
Чтобы удалить условие назначения роли, измените условие назначения роли и установите оба свойства Condition и ConditionVersion в пустую строку ("") или $null.
Кроме того, если вы хотите удалить назначение роли и условие, можно использовать команду Remove-AzRoleAssignment . Дополнительные сведения см. в статье Удаление назначений ролей Azure.