Delen via


Delegeringswijzigingen in uw beherende tenant controleren

Als serviceprovider wilt u wellicht weten wanneer klantabonnementen of resourcegroepen worden gedelegeerd aan uw tenant via Azure Lighthouse of wanneer eerder gedelegeerde resources worden verwijderd.

In de beherende tenant houdt het Azure-activiteitenlogboek delegeringsactiviteit bij op tenantniveau. Deze vastgelegde activiteit omvat eventuele toegevoegde of verwijderde delegaties van tenants van klanten.

In dit onderwerp worden de machtigingen uitgelegd die nodig zijn om delegeringsactiviteiten voor uw tenant voor al uw klanten te bewaken. Het bevat ook een voorbeeldscript met één methode voor het opvragen en rapporteren van deze gegevens.

Belangrijk

Al deze stappen moeten worden uitgevoerd in uw beheertenant, in plaats van in tenants van klanten.

Hoewel we in dit onderwerp verwijzen naar serviceproviders en klanten, kunnen ondernemingen die meerdere tenants beheren dezelfde processen gebruiken.

Toegang tot gegevens op tenantniveau inschakelen

Als u toegang wilt krijgen tot activiteitenlogboekgegevens op tenantniveau, moet aan een account de ingebouwde Azure-rol Bewakingslezer worden toegewezen voor het hoofdbereik (/). Deze toewijzing moet worden uitgevoerd door een gebruiker met de rol Globale beheerder met extra verhoogde toegang.

Toegang verhogen voor een account van een globale beheerder

Als u een rol wilt toewijzen aan het hoofdbereik (/), moet u de rol Globale beheerder met verhoogde toegang hebben. Deze verhoogde toegang moet alleen worden ingeschakeld wanneer u de roltoewijzing moet maken en vervolgens moet worden verwijderd nadat u klaar bent.

Zie Toegang verhogen voor het beheren van alle Azure-abonnementen en -beheergroepen voor gedetailleerde instructies over het toevoegen en verwijderen van uitbreidingen.

Nadat u uw toegang hebt aangepast, heeft uw account de rol Administrator voor gebruikerstoegang in Azure in het hoofdbereik. Met deze roltoewijzing kunt u alle resources weergeven en toegang toewijzen in een abonnement of beheergroep in de directory, en roltoewijzingen maken in het hoofdbereik.

De rol Bewakingslezer toewijzen aan het hoofdbereik

Nadat u uw toegang hebt uitgebreid, kunt u de juiste machtigingen toewijzen aan een account, zodat er query's kunnen worden uitgevoerd op activiteitenlogboekgegevens op tenantniveau. Aan dit account moet de ingebouwde Azure-rol Bewakingslezer zijn toegewezen aan het hoofdbereik van uw beheertenant.

Belangrijk

Het verlenen van een roltoewijzing in het hoofdbereik betekent dat dezelfde machtigingen van toepassing zijn op elke resource in de tenant. Omdat dit een dergelijk breed toegangsniveau is, raden we u aan deze rol toe te wijzen aan een service-principal-account en dat account te gebruiken om query's uit te voeren op gegevens.

U kunt de rol Bewakingslezer ook toewijzen aan afzonderlijke gebruikers of aan gebruikersgroepen, zodat ze delegeringsgegevens rechtstreeks in Azure Portal kunnen bekijken. Als u dit doet, moet u er rekening mee houden dat dit een breed toegangsniveau is dat moet worden beperkt tot het minste aantal gebruikers dat mogelijk is.

Gebruik een van de volgende methoden om de toewijzing van het hoofdbereik te maken.

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 "/"

Verhoogde toegang voor het globale beheerdersaccount verwijderen

Nadat u de rol Lezer voor bewaking bij het hoofdbereik hebt toegewezen aan het gewenste account, moet u ervoor zorgen dat u de verhoogde toegang voor het globale beheerdersaccount verwijdert, omdat dit hoge toegangsniveau niet meer nodig is.

Delegeringswijzigingen weergeven in De Azure-portal

Gebruikers aan wie de rol Controlelezer in het hoofdbereik is toegewezen, kunnen delegeringswijzigingen rechtstreeks in Azure Portal bekijken.

  1. Navigeer naar de pagina Mijn klanten en selecteer vervolgens Activiteitenlogboek in het navigatiemenu aan de linkerkant.
  2. Zorg ervoor dat Directory-activiteit is geselecteerd in het filter boven aan het scherm.
  3. Selecteer de periode waarvoor u delegeringswijzigingen wilt weergeven.

Schermopname van delegeringswijzigingen in Azure Portal.

Een service-principal-account gebruiken om een query uit te voeren op het activiteitenlogboek

Omdat de rol Bewakingslezer in het hoofdbereik zo'n breed toegangsniveau is, raden we u aan om de rol toe te wijzen aan een service-principal-account en dat account te gebruiken om gegevens op te vragen via een script.

Belangrijk

Op dit moment kunnen tenants met een grote hoeveelheid delegatieactiviteit fouten tegenkomen bij het uitvoeren van query's op deze gegevens.

Wanneer u een service-principal-account gebruikt om een query uit te voeren op het activiteitenlogboek, raden we de volgende aanbevolen procedures aan:

Nadat u een service-principal-account hebt gemaakt dat bewakingslezertoegang heeft tot het hoofdbereik van uw beheertenant, kunt u dit gebruiken om query's uit te voeren en te rapporteren over delegeringsactiviteit.

Dit Azure PowerShell-script kan worden gebruikt om een query uit te voeren op de afgelopen dag van de activiteit en eventuele toegevoegde of verwijderde delegaties te rapporteren (of pogingen die niet zijn geslaagd). Er worden query's uitgevoerd op de gegevens van het tenantactiviteitenlogboek en vervolgens worden de volgende waarden samengesteld om te rapporteren over delegaties die worden toegevoegd of verwijderd:

  • DelegatedResourceId: de id van het gedelegeerde abonnement of de resourcegroep
  • CustomerTenantId: De tenant-id van de klant
  • CustomerSubscriptionId: de abonnements-id die is gedelegeerd of die de resourcegroep bevat die is gedelegeerd
  • CustomerDelegationStatus: de statuswijziging voor de gedelegeerde resource (geslaagd of mislukt)
  • EventTimeStamp: de datum en tijd waarop de overdrachtswijziging is vastgelegd

Houd rekening met het volgende bij het uitvoeren van query's op deze gegevens:

  • Als meerdere resourcegroepen worden gedelegeerd in één implementatie, worden afzonderlijke vermeldingen geretourneerd voor elke resourcegroep.
  • Wijzigingen die zijn aangebracht in een vorige delegatie (zoals het bijwerken van de machtigingsstructuur) worden geregistreerd als een toegevoegde delegatie.
  • Zoals eerder is aangegeven, moet een account de ingebouwde Azure-rol Bewakingslezer hebben voor het hoofdbereik (/) om toegang te krijgen tot deze gegevens op tenantniveau.
  • U kunt deze gegevens gebruiken in uw eigen werkstromen en rapportage. U kunt bijvoorbeeld de Logboekopname-API gebruiken om gegevens vanuit een REST API-client aan te melden bij Azure Monitor en vervolgens actiegroepen gebruiken om meldingen of waarschuwingen te maken.
# 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)"
}

Volgende stappen