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 toegevoegd wanneer u de roltoewijzing moet maken en vervolgens moet worden verwijderd wanneer 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
Zodra u uw toegang hebt verhoogd, 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 Rol Bewakingslezer van Azure 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 breed toegangsniveau is, raden we u aan deze rol toe te wijzen aan een service-principal-account en dat account te gebruiken om een query 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 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.
- Navigeer naar de pagina Mijn klanten en selecteer vervolgens Activiteitenlogboek in het navigatiemenu aan de linkerkant.
- Zorg ervoor dat Directory-activiteit is geselecteerd in het filter boven aan het scherm.
Er wordt een lijst met overdrachtswijzigingen weergegeven. U kunt kolommen bewerken selecteren om de status, gebeurteniscategorie, tijd, tijdstempel, abonnement, gebeurtenis geïnitieerd door, resourcegroep, resourcetype en resourcewaarden weer te geven of te verbergen.
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, kunt u de rol toewijzen aan een service-principal-account en dat account gebruiken om gegevens op te vragen met behulp van het onderstaande 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:
- Maak een nieuw service-principal-account dat alleen voor deze functie moet worden gebruikt, in plaats van deze rol toe te wijzen aan een bestaande service-principal die wordt gebruikt voor andere automatisering.
- Zorg ervoor dat deze service-principal geen toegang heeft tot gedelegeerde klantbronnen.
- Gebruik een certificaat om het veilig te verifiëren en op te slaan in Azure Key Vault.
- Beperk de gebruikers die namens de service-principal toegang hebben om actie te ondernemen.
Zodra u een nieuw service-principal-account hebt gemaakt met bewakingslezertoegang tot het hoofdbereik van uw beherende tenant, kunt u dit gebruiken om query's uit te voeren en te rapporteren over delegeringsactiviteit in uw tenant.
Dit Azure PowerShell-script kan worden gebruikt om een query uit te voeren op de afgelopen dag van 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 in een vorige delegatie (zoals het bijwerken van de machtigingsstructuur) worden geregistreerd als een toegevoegde delegatie.
- Zoals hierboven vermeld, moet een account de ingebouwde Rol bewakingslezer van Azure 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 HTTP Data Collector-API (preview) gebruiken om gegevens vanuit een REST API-client te registreren 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
- Meer informatie over het onboarden van klanten naar Azure Lighthouse.
- Meer informatie over Azure Monitor en het Azure-activiteitenlogboek.
- Bekijk de activiteitenlogboeken per domeinvoorbeeldwerkmap voor meer informatie over het weergeven van Azure-activiteitenlogboeken in abonnementen met een optie om ze te filteren op domeinnaam.