Monitorize as mudanças de delegação no seu inquilino gerenteMonitor delegation changes in your managing tenant

Como prestador de serviços, poderá querer estar ciente de que as subscrições de clientes ou grupos de recursos são delegados ao seu inquilino através do Farol Azure,ou quando os recursos previamente delegados são removidos.As a service provider, you may want to be aware when customer subscriptions or resource groups are delegated to your tenant through Azure Lighthouse, or when previously delegated resources are removed.

No inquilino gerente, o log de atividades Azure acompanha a atividade da delegação ao nível do inquilino.In the managing tenant, the Azure activity log tracks delegation activity at the tenant level. Esta atividade registada inclui quaisquer delegações adicionadas ou removidas dos inquilinos do cliente.This logged activity includes any added or removed delegations from customer tenants.

Este tópico explica as permissões necessárias para monitorizar a atividade da delegação ao seu inquilino (em todos os seus clientes).This topic explains the permissions needed to monitor delegation activity to your tenant (across all of your customers). Também inclui um guião de amostra que mostra um método para consulta e relatório sobre estes dados.It also includes a sample script that shows one method for querying and reporting on this data.

Importante

Todos estes passos devem ser realizados no seu inquilino gerente, e não em qualquer inquilino de cliente.All of these steps must be performed in your managing tenant, rather than in any customer tenants.

Embora nos refiramos a prestadores de serviços e clientes neste tópico, as empresas que gerem vários inquilinos podem usar os mesmos processos.Though we refer to service providers and customers in this topic, enterprises managing multiple tenants can use the same processes.

Permitir o acesso aos dados ao nível do inquilinoEnable access to tenant-level data

Para aceder aos dados do Registo de Atividade ao nível do inquilino, deve ser atribuída uma conta à função incorporada do Leitor de Monitorização Azure no âmbito raiz (/).To access tenant-level Activity Log data, an account must be assigned the Monitoring Reader Azure built-in role at root scope (/). Esta atribuição deve ser executada por um utilizador que tenha a função de Administrador Global com acesso adicional elevado.This assignment must be performed by a user who has the Global Administrator role with additional elevated access.

Elevar o acesso a uma conta de Administrador GlobalElevate access for a Global Administrator account

Para atribuir uma função no âmbito raiz (/), terá de ter a função de Administrador Global com acesso elevado.To assign a role at root scope (/), you will need to have the Global Administrator role with elevated access. Este acesso elevado só deve ser adicionado quando precisar de fazer a tarefa de função e, em seguida, removido quando terminar.This elevated access should be added only when you need to make the role assignment, then removed when you are done.

Para obter instruções detalhadas sobre a adição e remoção da elevação, consulte o acesso elevate para gerir todas as assinaturas e grupos de gestão da Azure.For detailed instructions on adding and removing elevation, see Elevate access to manage all Azure subscriptions and management groups.

Depois de elevar o seu acesso, a sua conta terá a função de Administrador de Acesso ao Utilizador em Azure no âmbito raiz.After you elevate your access, your account will have the User Access Administrator role in Azure at root scope. Esta atribuição de funções permite-lhe visualizar todos os recursos e atribuir acesso em qualquer grupo de subscrição ou gestão no diretório, bem como fazer atribuições de papéis no âmbito raiz.This role assignment allows you to view all resources and assign access in any subscription or management group in the directory, as well as to make role assignments at root scope.

Atribuir a função de leitor de monitorização no âmbito raizAssign the Monitoring Reader role at root scope

Uma vez elevado o seu acesso, pode atribuir as permissões apropriadas a uma conta para que possa consultar os dados de registo de atividade ao nível do inquilino.Once you have elevated your access, you can assign the appropriate permissions to an account so that it can query tenant-level activity log data. Esta conta terá de ter a função de Monitoring Reader Azure atribuída no âmbito raiz do seu inquilino gerente.This account will need to have the Monitoring Reader Azure built-in role assigned at the root scope of your managing tenant.

Importante

Conceder uma atribuição de papel no âmbito raiz significa que as mesmas permissões se aplicarão a todos os recursos do arrendatário.Granting a role assignment at root scope means that the same permissions will apply to every resource in the tenant. Por se trata de um amplo nível de acesso, poderá pretender atribuir esta função a uma conta principal de serviço e utilizar essa conta para consultar dados.Because this is a broad level of access, you may wish to assign this role to a service principal account and using that account to query data. Também pode atribuir a função de Leitor de Monitorização no âmbito raiz a utilizadores individuais ou a grupos de utilizadores para que possam ver informações da delegação diretamente no portal Azure.You can also assign the Monitoring Reader role at root scope to individual users or to user groups so that they can view delegation information directly in the Azure portal. Se o fizer, esteja ciente de que se trata de um amplo nível de acesso que deve limitar-se ao menor número possível de utilizadores.If you do so, be aware that this is a broad level of access which should be limited to the fewest number of users possible.

Utilize um dos seguintes métodos para fazer a atribuição do âmbito da raiz.Use one of the following methods to make the root scope assignment.

PowerShellPowerShell

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

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

CLI do AzureAzure 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 "/"

Remover acesso elevado para a conta de Administrador GlobalRemove elevated access for the Global Administrator account

Depois de atribuir a função de Monitoring Reader no âmbito raiz à conta desejada, certifique-se de remover o acesso elevado para a conta de Administrador Global, uma vez que este nível de acesso deixará de ser necessário.After you've assigned the Monitoring Reader role at root scope to the desired account, be sure to remove the elevated access for the Global Administrator account, as this level of access will no longer be needed.

Ver alterações de delegação no portal AzureView delegation changes in the Azure portal

Os utilizadores a quem foi atribuída a função de Leitor de Monitorização no âmbito raiz podem ver as alterações da delegação diretamente no portal Azure.Users who has been assigned the Monitoring Reader role at root scope can view delegation changes directly in the Azure portal.

  1. Navegue na página Dos Meus clientes e, em seguida, selecione registo de atividade a partir do menu de navegação à esquerda.Navigate to the My customers page, then select Activity log from the left-hand navigation menu.
  2. Certifique-se de que a Atividade do Diretório é selecionada no filtro perto da parte superior do ecrã.Ensure that Directory Activity is selected in the filter near the top of the screen.

Aparecerá uma lista de alterações de delegação.A list of delegation changes will appear. Pode selecionar colunas Editar para mostrar ou ocultar o Estado , Categoria evento, Tempo, Hora, Assinatura, Evento iniciado por, Grupo de Recursos, Tipo de Recurso e Valores de Recursos. You can select Edit columns to show or hide the Status, Event category, Time, Time stamp, Subscription, Event initiated by, Resource group, Resource type, and Resource values.

Screenshot das mudanças de delegação no portal Azure.

Utilize uma conta principal de serviço para consultar o registo de atividadesUse a service principal account to query the activity log

Uma vez que a função de Monitoring Reader no âmbito raiz é um nível de acesso tão amplo, pode querer atribuir a função a uma conta principal de serviço e utilizar essa conta para consultar dados utilizando o script abaixo.Because the Monitoring Reader role at root scope is such a broad level of access, you may wish to assign the role to a service principal account and use that account to query data using the script below.

Importante

Atualmente, os inquilinos com uma grande quantidade de atividade de delegação podem ter erros ao consultar estes dados.Currently, tenants with a large amount of delegation activity may run into errors when querying this data.

Ao utilizar uma conta principal de serviço para consultar o registo de atividades, recomendamos as seguintes boas práticas:When using a service principal account to query the activity log, we recommend the following best practices:

Uma vez criada uma nova conta principal de serviço com o monitor de acesso do Leitor ao âmbito de raiz do seu inquilino gerente, pode usá-la para consultar e reportar sobre a atividade da delegação no seu inquilino.Once you've created a new service principal account with Monitoring Reader access to the root scope of your managing tenant, you can use it to query and report on delegation activity in your tenant.

Este script Azure PowerShell pode ser usado para consultar o último dia de atividade e relatórios sobre quaisquer delegações adicionadas ou removidas (ou tentativas que não foram bem sucedidas).This Azure PowerShell script can be used to query the past 1 day of activity and reports on any added or removed delegations (or attempts that were not successful). Questiona os dados do Registo de Atividades do Arrendatário e, em seguida, constrói os seguintes valores para reportar sobre as delegações adicionadas ou removidas:It queries the Tenant Activity Log data, then constructs the following values to report on delegations that are added or removed:

  • DelegadoResourceId: O ID do grupo de subscrição ou recursos delegadosDelegatedResourceId: The ID of the delegated subscription or resource group
  • CustomerTenantId: O ID do inquilino do clienteCustomerTenantId: The customer tenant ID
  • CustomerSubscriptionId: O ID de subscrição que foi delegado ou que contém o grupo de recursos que foi delegadoCustomerSubscriptionId: The subscription ID that was delegated or that contains the resource group that was delegated
  • CustomerDelegationStatus: A alteração de estado do recurso delegado (bem sucedido ou falhado)CustomerDelegationStatus: The status change for the delegated resource (succeeded or failed)
  • EventTimeStamp: A data e a hora em que a mudança de delegação foi registadaEventTimeStamp: The date and time at which the delegation change was logged

Ao consultar estes dados, tenha em mente:When querying this data, keep in mind:

  • Se vários grupos de recursos forem delegados numa única implantação, serão devolvidas entradas separadas para cada grupo de recursos.If multiple resource groups are delegated in a single deployment, separate entries will be returned for each resource group.
  • As alterações introduzidas numa delegação anterior (como a atualização da estrutura de permissões) serão registadas como uma delegação adicional.Changes made to a previous delegation (such as updating the permission structure) will be logged as an added delegation.
  • Como referido acima, uma conta deve ter o monitor azure papel incorporado no âmbito raiz (/) para aceder a estes dados ao nível do inquilino.As noted above, an account must have the Monitoring Reader Azure built-in role at root scope (/) in order to access this tenant-level data.
  • Pode utilizar estes dados nos seus próprios fluxos de trabalho e reporte.You can use this data in your own workflows and reporting. Por exemplo, pode utilizar a API do Retorno de Dados HTTP (pré-visualização pública) para registar dados no Azure Monitor a partir de um cliente REST API e, em seguida, utilizar grupos de ação para criar notificações ou alertas.For example, you can use the HTTP Data Collector API (public preview) to log data to Azure Monitor from a REST API client, then use action groups to create notifications or alerts.
# 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 = $registerOutput.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)"
}

Passos seguintesNext steps