Compartir a través de


Supervisión de los cambios en la delegación en el inquilino de administración

Como proveedor de servicios, es posible que desee conocer cuándo se delegan las suscripciones o grupos de recursos del cliente al inquilino mediante Azure Lighthouse, o cuándo se eliminan los recursos delegados anteriormente.

En el inquilino de administración, el registro de actividad de Azure realiza un seguimiento de la actividad de delegación en el nivel del inquilino. Esta actividad registrada incluye cualquier delegación agregada o eliminada de los inquilinos del cliente.

En este tema se explican los permisos que se necesitan para supervisar la actividad de delegación en el nivel de inquilino para todos los clientes. También incluye un script de ejemplo que muestra un método para realizar consultas e informes sobre estos datos.

Importante

Todos estos pasos se deben realizar en el inquilino de administración, en lugar de en los inquilinos de clientes.

Aunque en este tema hacemos referencia a los proveedores de servicios y clientes, las empresas que administran varios inquilinos pueden usar los mismos procesos.

Habilitar el acceso a los datos en el nivel del inquilino

Para acceder a los datos del registro de actividad en el nivel del inquilino, se tiene que asignar a una cuenta el rol integrado de Azure Lector de supervisión en el ámbito raíz (/). Esta asignación la debe realizar un usuario que tenga el rol Administrador global con privilegios de acceso elevados adicionales.

Elevación de los privilegios de acceso de una cuenta de administrador global

Para asignar un rol en el ámbito raíz (/), debe tener el rol de administrador global con acceso elevado. Este acceso con privilegios elevados solo debe habilitarse cuando necesite realizar la asignación de roles y, después, quitarlo después de que haya terminado.

Para obtener instrucciones detalladas sobre cómo agregar y eliminar la elevación, consulte Elevación de los privilegios de acceso para administrar todas las suscripciones y los grupos de administración de Azure.

Después de elevar los privilegios de acceso, la cuenta tendrá el rol Administrador de acceso de usuarios en Azure en el ámbito raíz. Esta asignación de roles le permite ver todos los recursos y asignar acceso en cualquier suscripción o grupo de administración en el directorio, así como realizar asignaciones de roles en el ámbito raíz.

Asignación del rol Lector de supervisión en el ámbito raíz

Después de elevar el acceso, puede asignar los permisos adecuados a una cuenta para que pueda consultar los datos del registro de actividad de nivel de inquilino. Esta cuenta debe tener asignado el rol integrado Lector de supervisión Azure en el ámbito raíz del inquilino de administración.

Importante

Conceder una asignación de roles en el ámbito raíz significa que los mismos permisos se aplican a todos los recursos del inquilino. Dado que se trata de un nivel de acceso amplio, se recomienda asignar este rol a una cuenta de entidad de servicio y usar esa cuenta para consultar los datos.

También puede asignar el rol Lector de supervisión en el ámbito raíz a usuarios individuales o a grupos de usuarios para que puedan ver información de delegación directamente en Azure Portal. Si lo hace, tenga en cuenta que se trata de un amplio nivel de acceso que se debe limitar al menor número posible de usuarios.

Use uno de los métodos siguientes para realizar la asignación en el ámbito raíz.

PowerShell

# Log in first with Connect-AzAccount if you're not using Cloud Shell

New-AzRoleAssignment -SignInName <yourLoginName> -Scope "/" -RoleDefinitionName "Monitoring Reader"  -ObjectId <objectId> 

Azure CLI

# Log in first with az login if you're not using Cloud Shell

az role assignment create --assignee 00000000-0000-0000-0000-000000000000 --role "Monitoring Reader" --scope "/"

Eliminación de la elevación de los privilegios de acceso de la cuenta de administrador global

Después de asignar el rol Lector de supervisión en el ámbito raíz a la cuenta deseada, asegúrese de quitar el acceso con privilegios elevados para la cuenta de administrador global, ya que este alto nivel de acceso ya no es necesario.

Visualización de cambios de delegación en Azure Portal

Los usuarios a los que tienen asignado el rol Lector de supervisión en el ámbito raíz pueden visualizar los cambios de delegación directamente en Azure Portal.

  1. Vaya a la página Mis clientes y, después, seleccione Registro de actividades en el menú de navegación izquierdo.
  2. Asegúrese de que Actividad de directorio está seleccionado en el filtro situado cerca de la parte superior de la pantalla.
  3. Seleccione el intervalo de tiempo para el que desea ver los cambios de delegación.

Captura de pantalla de cambios de delegación en Azure Portal.

Uso de una cuenta de entidad de servicio para consultar el registro de actividad

Dado que el rol Lector de supervisión en el ámbito raíz es un nivel tan amplio de acceso, se recomienda asignar el rol a una cuenta de entidad de servicio y usar esa cuenta para consultar datos a través de un script.

Importante

Actualmente, los inquilinos que tienen una gran cantidad de actividad de delegación pueden encontrar errores al consultar estos datos.

Al usar una cuenta de entidad de servicio para consultar el registro de actividad, se recomiendan los procedimientos recomendados siguientes:

Después de crear una cuenta de entidad de servicio que tenga acceso de lector de supervisión en el ámbito raíz del inquilino de administración, puede usarla para consultar e informar sobre la actividad de delegación.

Este script de Azure PowerShell se puede usar para consultar el último día de actividad y notificar cualquier delegación agregada o eliminada (o intentos de delegaciones que no se realizaron correctamente). Consulta los datos del registro de actividad del inquilino y, a continuación, construye los valores siguientes para notificar las delegaciones que se han agregado o eliminado:

  • DelegatedResourceId: El identificador de la suscripción o grupo de recursos delegados
  • CustomerTenantId: El identificador de inquilino del cliente
  • CustomerSubscriptionId: El identificador de la suscripción que se ha delegado o que contiene el grupo de recursos que se ha delegado
  • CustomerDelegationStatus: El cambio de estado del recurso delegado (correcto o erróneo)
  • EventTimeStamp: Fecha y hora en que se registró el cambio de delegación

Al consultar estos datos, tenga en cuenta lo siguiente:

  • Si se deleguen varios grupos de recursos en una sola implementación, se devuelven entradas independientes para cada grupo de recursos.
  • Los cambios realizados en una delegación anterior (como actualizar la estructura de permisos) se registran como una delegación agregada.
  • Como se indicó anteriormente, una cuenta debe tener el rol integrado Lector de supervisión de Azure en el ámbito raíz (/) para acceder a estos datos de nivel de inquilino.
  • Puede usar estos datos en sus propios flujos de trabajo e informes. Por ejemplo, puede usar el API de ingesta de registros para registrar datos en Azure Monitor desde un cliente de API REST y, a continuación, usar grupos de acciones para crear notificaciones o alertas.
# Log in first with Connect-AzAccount if you're not using Cloud Shell

# Azure Lighthouse: Query Tenant Activity Log for registered/unregistered delegations for the last 1 day

$GetDate = (Get-Date).AddDays((-1))

$dateFormatForQuery = $GetDate.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")

# Getting Azure context for the API call
$currentContext = Get-AzContext

# Fetching new token
$azureRmProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
$profileClient = [Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient]::new($azureRmProfile)
$token = $profileClient.AcquireAccessToken($currentContext.Tenant.Id)

$listOperations = @{
    Uri     = "https://management.azure.com/providers/microsoft.insights/eventtypes/management/values?api-version=2015-04-01&`$filter=eventTimestamp ge '$($dateFormatForQuery)'"
    Headers = @{
        Authorization  = "Bearer $($token.AccessToken)"
        'Content-Type' = 'application/json'
    }
    Method  = 'GET'
}
$list = Invoke-RestMethod @listOperations

# First link can be empty - and point to a next link (or potentially multiple pages)
# While you get more data - continue fetching and add result
while($list.nextLink){
    $list2 = Invoke-RestMethod $list.nextLink -Headers $listOperations.Headers -Method Get
    $data+=$list2.value;
    $list.nextLink = $list2.nextlink;
}

$showOperations = $data;

if ($showOperations.operationName.value -eq "Microsoft.Resources/tenants/register/action") {
    $registerOutputs = $showOperations | Where-Object -FilterScript { $_.eventName.value -eq "EndRequest" -and $_.resourceType.value -and $_.operationName.value -eq "Microsoft.Resources/tenants/register/action" }
    foreach ($registerOutput in $registerOutputs) {
        $eventDescription = $registerOutput.description | ConvertFrom-Json;
    $registerOutputdata = [pscustomobject]@{
        Event                    = "An Azure customer has registered delegated resources to your Azure tenant";
        DelegatedResourceId      = $eventDescription.delegationResourceId; 
        CustomerTenantId         = $eventDescription.subscriptionTenantId;
        CustomerSubscriptionId   = $eventDescription.subscriptionId;
        CustomerDelegationStatus = $registerOutput.status.value;
        EventTimeStamp           = $registerOutput.eventTimestamp;
        }
        $registerOutputdata | Format-List
    }
}
if ($showOperations.operationName.value -eq "Microsoft.Resources/tenants/unregister/action") {
    $unregisterOutputs = $showOperations | Where-Object -FilterScript { $_.eventName.value -eq "EndRequest" -and $_.resourceType.value -and $_.operationName.value -eq "Microsoft.Resources/tenants/unregister/action" }
    foreach ($unregisterOutput in $unregisterOutputs) {
        $eventDescription = $unregisterOutput.description | ConvertFrom-Json;
    $unregisterOutputdata = [pscustomobject]@{
        Event                    = "An Azure customer has unregistered delegated resources from your Azure tenant";
        DelegatedResourceId      = $eventDescription.delegationResourceId;
        CustomerTenantId         = $eventDescription.subscriptionTenantId;
        CustomerSubscriptionId   = $eventDescription.subscriptionId;
        CustomerDelegationStatus = $unregisterOutput.status.value;
        EventTimeStamp           = $unregisterOutput.eventTimestamp;
        }
        $unregisterOutputdata | Format-List
    }
}
else {
    Write-Output "No new delegation events for tenant: $($currentContext.Tenant.TenantId)"
}

Pasos siguientes