Incorporación o edición de condiciones de asignación de roles de Azure mediante Azure PowerShell
Una condición de asignación de roles de Azure es una comprobación adicional que puede agregar opcionalmente a la asignación de roles para proporcionar un control de acceso más preciso. Por ejemplo, puede agregar una condición que requiera que un objeto tenga una etiqueta específica para leer el objeto. En este artículo se describe cómo agregar, editar, ver o eliminar condiciones para las asignaciones de roles mediante Azure PowerShell.
Requisitos previos
Para obtener información sobre los requisitos previos para agregar o editar condiciones de asignación de roles, consulte Requisitos previos de las condiciones.
Agregar una condición
Para agregar una asignación de roles, use el comando New-AzRoleAssignment. El comando New-AzRoleAssignment incluye los siguientes parámetros relacionados con las condiciones.
Parámetro | Tipo | Description |
---|---|---|
Condition |
Cadena | Condición bajo la que se puede conceder permiso al usuario. |
ConditionVersion |
Cadena | Versión de la sintaxis de la condición. Se debe establecer en 2.0. Si se especifica Condition , se debe especificar también ConditionVersion . |
En el ejemplo siguiente se muestra cómo inicializar las variables para asignar el rol Lector de datos de Storage Blob con una condición. La condición comprueba si el nombre del contenedor es 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 asignar el rol con una condición.
New-AzRoleAssignment -ObjectId $userObjectId -Scope $scope -RoleDefinitionId $roleDefinitionId -Description $description -Condition $condition -ConditionVersion $conditionVersion
A continuación, presentamos un ejemplo de la salida:
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'))
En PowerShell, si la condición incluye un signo de dólar ($), debe agregarle un carácter de acento grave (`) como prefijo. Por ejemplo, esta condición usa signos de dólar para delinear el nombre de la clave de etiqueta. Para obtener más información sobre las reglas de comillas en PowerShell, vea Acerca de las reglas de las comillas.
$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'))"
Edición de una condición
Para editar una condición de asignación de roles existente, use Set-AzRoleAssignment. Solo se pueden editar las propiedades Condition
, ConditionVersion
y Description
. El parámetro -PassThru
hace que Set-AzRoleAssignment devuelva la asignación de roles actualizada, lo que permite la visualización o el almacenamiento en una variable para su uso posterior.
Hay dos maneras de editar una condición. Puede usar el objeto PSRoleAssignment
o un archivo JSON.
Edición de una condición mediante el objeto PSRoleAssignment
Use Get-AzRoleAssignment para obtener la asignación de roles existente con una condición como objeto
PSRoleAssignment
.$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectId
Edite la condición.
$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'))"
Inicialice la condición y la descripción.
$testRa.Condition = $condition $testRa.Description = "Read access if container name equals blobs-example-container or blobs-example-container2"
Use Set-AzRoleAssignment para actualizar la condición de la asignación de roles.
Set-AzRoleAssignment -InputObject $testRa -PassThru
Este es un ejemplo de la salida:
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'))
Edición de una condición mediante un archivo JSON
Para editar una condición, también puede proporcionar un archivo JSON como entrada. A continuación se muestra un archivo JSON de ejemplo donde se actualizan Condition
y Description
. Debe especificar todas las propiedades del archivo JSON para actualizar una condición.
{
"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 actualizar la condición de la asignación de roles.
Set-AzRoleAssignment -InputFile "C:\path\roleassignment.json" -PassThru
Este es un ejemplo de la salida:
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 condiciones en varias asignaciones de roles
Si necesita realizar la misma actualización a varias asignaciones de roles, puede usar un bucle. Los siguientes comandos ejecutan las siguientes tareas:
Busca asignaciones de roles en una suscripción con cadenas
<find-condition-string-1>
o<find-condition-string-2>
en la condición.$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) }
Los siguientes comandos realizan las siguientes tareas:
En la condición de las asignaciones de roles encontradas, reemplaza
<condition-string>
por<replace-condition-string>
.Actualiza las asignaciones de roles con los cambios.
$conditionString = "<condition-string>" $conditionStringReplacement = "<condition-string-replacement>" $updatedRoleAssignments = $foundRoleAssignments | ForEach-Object { $_.Condition = $_.Condition -replace $conditionString, $conditionStringReplacement; $_ } $updatedRoleAssignments | ForEach-Object { Set-AzRoleAssignment -InputObject $_ -PassThru }
Si las cadenas incluyen caracteres especiales, como corchetes ([ ]), deberá escapar estos caracteres con una barra diagonal inversa (\).
Visualización de una condición
Para ver una condición de asignación de roles, use Get-AzRoleAssignment. Para más información, consulte Enumeración de asignaciones de roles de Azure mediante Azure PowerShell.
Eliminar una condición
Para eliminar una condición de asignación de roles, edítela y establezca las propiedades Condition
y ConditionVersion
en una cadena vacía (""
) o $null
.
Como alternativa, si desea eliminar la asignación de roles y la condición, puede usar el comando Remove-AzRoleAssignment. Para obtener más información, consulte Eliminación de asignaciones de roles.