Övervaka delegeringsändringar i din hanteringsklientorganisation

Som tjänstleverantör kanske du vill vara medveten om när kundprenumerationer eller resursgrupper delegeras till din klient via Azure Lighthouse eller när tidigare delegerade resurser tas bort.

I den hanterande klientorganisationen spårar Azure-aktivitetsloggen delegeringsaktiviteten på klientnivå. Den här loggade aktiviteten innehåller eventuella tillagda eller borttagna delegeringar från kundklientorganisationer.

Det här avsnittet beskriver de behörigheter som krävs för att övervaka delegeringsaktiviteten till din klientorganisation för alla dina kunder. Den innehåller också ett exempelskript som visar en metod för att fråga och rapportera om dessa data.

Viktigt!

Alla dessa steg måste utföras i din hanteringsklientorganisation i stället för i någon kundklientorganisation.

Även om vi refererar till tjänsteleverantörer och kunder i det här avsnittet kan företag som hanterar flera klienter använda samma processer.

Aktivera åtkomst till data på klientorganisationsnivå

För att få åtkomst till aktivitetsloggdata på klientnivå måste ett konto tilldelas den inbyggda rollen Övervakningsläsare i Azure i rotomfånget (/). Den här tilldelningen måste utföras av en användare som har rollen Global administratör med ytterligare förhöjd åtkomst.

Öka åtkomsten för ett globalt administratörskonto

Om du vill tilldela en roll i rotomfånget (/) måste du ha rollen Global administratör med förhöjd åtkomst. Den här utökade åtkomsten bör bara läggas till när du behöver göra rolltilldelningen och sedan tas bort när du är klar.

Detaljerade anvisningar om hur du lägger till och tar bort utökade privilegier finns i Utöka åtkomst för att hantera alla Azure-prenumerationer och hanteringsgrupper.

När du har utökat din åtkomst har ditt konto rollen Administratör för användaråtkomst i Azure i rotomfånget. Med den här rolltilldelningen kan du visa alla resurser och tilldela åtkomst i valfri prenumeration eller hanteringsgrupp i katalogen, samt göra rolltilldelningar i rotomfånget.

Tilldela rollen Övervakningsläsare i rotomfånget

När du har utökat din åtkomst kan du tilldela rätt behörigheter till ett konto så att det kan köra frågor mot aktivitetsloggdata på klientorganisationsnivå. Det här kontot måste ha den inbyggda rollen Övervakningsläsare i Azure tilldelad i rotomfånget för din hanteringsklient.

Viktigt!

Att bevilja en rolltilldelning i rotomfånget innebär att samma behörigheter gäller för varje resurs i klientorganisationen. Eftersom det här är en bred åtkomstnivå rekommenderar vi att du tilldelar den här rollen till ett konto för tjänstens huvudnamn och använder det kontot för att fråga efter data.

Du kan också tilldela rollen Övervakningsläsare i rotomfånget till enskilda användare eller till användargrupper så att de kan visa delegeringsinformation direkt i Azure-portalen. Om du gör det bör du vara medveten om att detta är en bred åtkomstnivå som bör begränsas till så få användare som möjligt.

Använd någon av följande metoder för att göra rotomfattningstilldelningen.

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

Ta bort förhöjd åtkomst för det globala administratörskontot

När du har tilldelat rollen Övervakningsläsare i rotomfånget till det önskade kontot måste du ta bort den utökade åtkomsten för det globala administratörskontot eftersom den här åtkomstnivån inte längre behövs.

Visa delegeringsändringar i Azure-portalen

Användare som har tilldelats rollen Övervakningsläsare i rotomfånget kan visa delegeringsändringar direkt i Azure-portalen.

  1. Gå till sidan Mina kunder och välj sedan Aktivitetslogg på den vänstra navigeringsmenyn.
  2. Kontrollera att Katalogaktivitet har valts i filtret längst upp på skärmen.

En lista över delegeringsändringar visas. Du kan välja Redigera kolumner för att visa eller dölja värdena Status, Händelsekategori, Tid, Tidsstämpel, Prenumeration, Händelse initierad av, Resursgrupp, Resurstyp och Resurs .

Screenshot of delegation changes in the Azure portal.

Använda ett konto för tjänstens huvudnamn för att fråga aktivitetsloggen

Eftersom rollen Övervakningsläsare i rotomfånget är en så bred åtkomstnivå kanske du vill tilldela rollen till ett konto för tjänstens huvudnamn och använda det kontot för att fråga efter data med hjälp av skriptet nedan.

Viktigt!

För närvarande kan klienter med en stor mängd delegeringsaktivitet stöta på fel när de frågar efter dessa data.

När du använder ett konto för tjänstens huvudnamn för att köra frågor mot aktivitetsloggen rekommenderar vi följande metodtips:

När du har skapat ett nytt konto för tjänstens huvudnamn med övervakningsläsarens åtkomst till rotomfånget för din hanteringsklient kan du använda det för att fråga och rapportera om delegeringsaktiviteten i klientorganisationen.

Det här Azure PowerShell-skriptet kan användas för att köra frågor mot den senaste aktivitetsdagen och rapportera eventuella tillagda eller borttagna delegeringar (eller försök som inte lyckades). Den frågar klientaktivitetsloggdata och skapar sedan följande värden för att rapportera om delegeringar som läggs till eller tas bort:

  • DelegatedResourceId: ID för den delegerade prenumerationen eller resursgruppen
  • CustomerTenantId: Kundens klientorganisations-ID
  • CustomerSubscriptionId: Prenumerations-ID:t som delegerades eller som innehåller den resursgrupp som delegerades
  • CustomerDelegationStatus: Statusändringen för den delegerade resursen (lyckades eller misslyckades)
  • EventTimeStamp: Datum och tid då delegeringsändringen loggades

När du frågar efter dessa data bör du tänka på:

  • Om flera resursgrupper delegeras i en enda distribution returneras separata poster för varje resursgrupp.
  • Ändringar som gjorts i en tidigare delegering (till exempel uppdatering av behörighetsstrukturen) loggas som en tillagd delegering.
  • Som nämnts ovan måste ett konto ha den inbyggda rollen Övervakningsläsare i Azure i rotomfånget (/) för att få åtkomst till dessa data på klientnivå.
  • Du kan använda dessa data i dina egna arbetsflöden och rapportering. Du kan till exempel använda HTTP Data Collector API (förhandsversion) för att logga data till Azure Monitor från en REST API-klient och sedan använda åtgärdsgrupper för att skapa meddelanden eller aviseringar.
# 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)"
}

Nästa steg