Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Uma condição de atribuição de função do Azure é uma verificação adicional que você pode adicionar opcionalmente à sua atribuição de função para fornecer um controle de acesso mais refinado. Por exemplo, você pode adicionar uma condição que exige que um objeto tenha uma marca específica para ler o objeto. Este artigo descreve como adicionar, editar, listar ou excluir condições para suas atribuições de função usando o Azure PowerShell.
Pré-requisitos
Para obter informações sobre os pré-requisitos para adicionar ou editar condições de atribuição de função, consulte os pré-requisitos de condições.
Adicione uma condição
Para adicionar uma condição de atribuição de função, use New-AzRoleAssignment. O comando New-AzRoleAssignment inclui os seguintes parâmetros relacionados às condições.
| Parâmetro | Tipo | Description |
|---|---|---|
Condition |
String | Condição sob a qual o usuário pode receber permissão. |
ConditionVersion |
String | Versão da sintaxe da condição. Deve ser definido como 2.0. Se Condition for especificado, ConditionVersion também deverá ser especificado. |
O exemplo a seguir mostra como inicializar as variáveis para atribuir a função Leitor de Dados de Blob de Armazenamento com uma condição. A condição verifica se o nome do contêiner é igual a '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"
Use New-AzRoleAssignment para atribuir a função com uma condição.
New-AzRoleAssignment -ObjectId $userObjectId -Scope $scope -RoleDefinitionId $roleDefinitionId -Description $description -Condition $condition -ConditionVersion $conditionVersion
Veja um exemplo da saída:
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'))
No PowerShell, se a condição incluir um cifrão ($), você precisará prefixá-lo com um símbolo de acento grave (`). Por exemplo, a condição a seguir usa sinais de dólar para delinear o nome da chave de tag. Para obter mais informações sobre regras para aspas no PowerShell, consulte Sobre Regras de Aspas.
$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'))"
Editar uma condição
Para editar uma condição de atribuição de função existente, use Set-AzRoleAssignment. Somente as propriedades Condition, ConditionVersion e Description podem ser editadas. O -PassThru parâmetro faz Set-AzRoleAssignment retornar a atribuição de função que foi atualizada, o que permite visualização ou armazenamento em uma variável para usos futuros.
Há duas maneiras de editar uma condição. Você pode usar o PSRoleAssignment objeto ou um arquivo JSON.
Editar uma condição usando o objeto PSRoleAssignment
Use Get-AzRoleAssignment para obter a atribuição de função existente com uma condição como um objeto
PSRoleAssignment.$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectIdEdite a condição.
$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'))"Inicialize a condição e a descrição.
$testRa.Condition = $condition $testRa.Description = "Read access if container name equals blobs-example-container or blobs-example-container2"Use Set-AzRoleAssignment para atualizar a condição para a atribuição de função.
Set-AzRoleAssignment -InputObject $testRa -PassThruVeja um exemplo da saída:
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'))
Editar uma condição usando um arquivo JSON
Para editar uma condição, você também pode fornecer um arquivo JSON como entrada. O exemplo a seguir mostra um arquivo JSON de exemplo em que Condition e Description são atualizados. Você deve especificar todas as propriedades no arquivo JSON para atualizar uma condição.
{
"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>"
}
Use Set-AzRoleAssignment para atualizar a condição para a atribuição de função.
Set-AzRoleAssignment -InputFile "C:\path\roleassignment.json" -PassThru
Veja um exemplo da saída:
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'))
Editar condições em várias atribuições de função
Se você precisar fazer a mesma atualização para várias atribuições de função, poderá usar um loop. Os comandos a seguir executam a seguinte tarefa:
Localiza atribuições de função em uma assinatura com cadeias de caracteres
<find-condition-string-1>ou<find-condition-string-2>na condição.$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) }
Os comandos a seguir executam as seguintes tarefas:
Na condição das atribuições de função encontradas, substitui
<condition-string>por<replace-condition-string>.Atualiza as atribuições de função com as alterações.
$conditionString = "<condition-string>" $conditionStringReplacement = "<condition-string-replacement>" $updatedRoleAssignments = $foundRoleAssignments | ForEach-Object { $_.Condition = $_.Condition -replace $conditionString, $conditionStringReplacement; $_ } $updatedRoleAssignments | ForEach-Object { Set-AzRoleAssignment -InputObject $_ -PassThru }
Se as cadeias de caracteres incluírem caracteres especiais, como colchetes ([ ]), você precisará escapar desses caracteres com uma barra invertida (\).
Listar uma condição
Para listar uma condição de atribuição de função, use Get-AzRoleAssignment. Para obter mais informações, consulte Listar atribuições de função do Azure usando o Azure PowerShell.
Excluir uma condição
Para excluir uma condição de atribuição de função, edite a condição de atribuição de função e defina as propriedades Condition e ConditionVersion como uma cadeia de caracteres vazia ("") ou $null.
Como alternativa, se você quiser excluir a atribuição de função e a condição, poderá usar o comando Remove-AzRoleAssignment . Para saber mais, confira Remover atribuições de função do Azure.