Monitorování změn delegování ve správě tenanta

Jako poskytovatel služeb můžete chtít vědět, kdy se předplatná zákazníků nebo skupiny prostředků delegují do vašeho tenanta prostřednictvím služby Azure Lighthouse nebo když se dříve delegované prostředky odeberou.

Protokol aktivit Azure ve správě tenanta sleduje aktivitu delegování na úrovni tenanta. Tato protokolovaná aktivita zahrnuje všechny přidané nebo odebrané delegování z tenantů zákazníků.

Toto téma vysvětluje oprávnění potřebná k monitorování aktivity delegování pro vašeho tenanta ve všech vašich zákaznících. Obsahuje také ukázkový skript, který ukazuje jednu metodu pro dotazování a vytváření sestav těchto dat.

Důležité

Všechny tyto kroky musí být provedeny ve vašem tenantovi pro správu, nikoli v žádném tenantovi zákazníka.

Přestože v tomto tématu odkazujeme na poskytovatele služeb a zákazníky, podniky spravující více tenantů můžou používat stejné procesy.

Povolení přístupu k datům na úrovni tenanta

Pokud chcete získat přístup k datům protokolu aktivit na úrovni tenanta, musí mít účet přiřazenou integrovanou roli Čtenář monitorování Azure v kořenovém oboru (/). Toto přiřazení musí provést uživatel, který má roli Globální Správa istrator s dalším zvýšeným přístupem.

Zvýšení úrovně přístupu pro účet globálního Správa istratoru

Pokud chcete přiřadit roli v kořenovém oboru (/), budete muset mít roli Globální Správa istrator se zvýšeným přístupem. Tento přístup se zvýšenými oprávněními by se měl přidat jenom v případě, že potřebujete přiřazení role a po dokončení se odebere.

Podrobné pokyny k přidání a odebrání zvýšení oprávnění najdete v tématu Zvýšení úrovně přístupu ke správě všech předplatných a skupin pro správu Azure.

Po zvýšení úrovně přístupu bude mít váš účet roli User Access Správa istrator v Azure v kořenovém oboru. Toto přiřazení role umožňuje zobrazit všechny prostředky a přiřadit přístup v libovolném předplatném nebo skupině pro správu v adresáři a také přiřazovat role v kořenovém oboru.

Přiřazení role Čtenář monitorování v kořenovém oboru

Jakmile zvýšíte úroveň přístupu, můžete účtu přiřadit příslušná oprávnění, aby mohl dotazovat data protokolu aktivit na úrovni tenanta. Tento účet bude muset mít integrovanou roli Čtenář monitorování Azure přiřazenou v kořenovém oboru vašeho tenanta pro správu.

Důležité

Udělení přiřazení role v kořenovém oboru znamená, že stejná oprávnění budou platit pro každý prostředek v tenantovi. Vzhledem k tomu, že se jedná o širokou úroveň přístupu, doporučujeme tuto roli přiřadit k účtu instančního objektu a použít ho k dotazování na data.

Roli Čtenář monitorování můžete také přiřadit v kořenovém oboru jednotlivým uživatelům nebo skupinám uživatelů, aby mohli zobrazovat informace o delegování přímo na webu Azure Portal. Pokud to uděláte, mějte na paměti, že se jedná o širokou úroveň přístupu, která by měla být omezena na nejmenší možný počet uživatelů.

K přiřazení kořenového oboru použijte jednu z následujících metod.

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

Odebrání zvýšeného přístupu pro účet Globální Správa istrator

Po přiřazení role Čtenář monitorování v kořenovém oboru k požadovanému účtu nezapomeňte odebrat zvýšený přístup pro účet globálního Správa istratoru, protože tato úroveň přístupu už nebude potřeba.

Zobrazení změn delegování na webu Azure Portal

Uživatelé, kteří mají přiřazenou roli Čtenář monitorování v kořenovém oboru, můžou zobrazit změny delegování přímo na webu Azure Portal.

  1. Přejděte na stránku Moji zákazníci a v levé navigační nabídce vyberte Protokol aktivit.
  2. Ujistěte se, že je ve filtru v horní části obrazovky vybraná aktivita adresáře.

Zobrazí se seznam změn delegování. Můžete vybrat Možnost Upravit sloupce a zobrazit nebo skrýt stav, kategorii událostí, čas, časové razítko, odběr, událost zahájenou skupinou prostředků, typem prostředku a hodnotami zdroje.

Screenshot of delegation changes in the Azure portal.

Použití účtu instančního objektu k dotazování protokolu aktivit

Vzhledem k tomu, že role Čtenář monitorování v kořenovém oboru je tak široká úroveň přístupu, můžete roli přiřadit k účtu instančního objektu a použít ho k dotazování dat pomocí následujícího skriptu.

Důležité

V současné době můžou tenanti s velkým množstvím aktivit delegování narazit na chyby při dotazování na tato data.

Při použití účtu instančního objektu k dotazování protokolu aktivit doporučujeme následující osvědčené postupy:

Jakmile vytvoříte nový účet instančního objektu s přístupem čtenáře monitorování k kořenovému oboru vašeho tenanta pro správu, můžete ho použít k dotazování a hlášení aktivit delegování ve vašem tenantovi.

Tento skript Azure PowerShellu se dá použít k dotazování na poslední den aktivity a nahlásit všechny přidané nebo odebrané delegování (nebo pokusy, které nebyly úspěšné). Dotazuje se na data protokolu aktivit tenanta a pak vytvoří následující hodnoty pro hlášení o delegování, které jsou přidány nebo odebrány:

  • DelegatedResourceId: ID delegovaného předplatného nebo skupiny prostředků
  • CustomerTenantId: ID tenanta zákazníka
  • CustomerSubscriptionId: ID předplatného, které bylo delegováno nebo které obsahuje delegovanou skupinu prostředků
  • CustomerDelegationStatus: Změna stavu delegovaného prostředku (úspěšné nebo neúspěšné)
  • EventTimeStamp: Datum a čas, kdy byla změna delegování zaznamenána.

Při dotazování na tato data mějte na paměti:

  • Pokud je v jednom nasazení delegováno více skupin prostředků, vrátí se pro každou skupinu prostředků samostatné položky.
  • Změny provedené v předchozím delegování (například aktualizace struktury oprávnění) se zaprotokolují jako přidané delegování.
  • Jak je uvedeno výše, účet musí mít integrovanou roli Čtenář monitorování Azure v kořenovém oboru (/) pro přístup k datům na úrovni tenanta.
  • Tato data můžete použít ve vlastních pracovních postupech a vytváření sestav. Pomocí rozhraní API kolektoru dat HTTP (Preview) můžete například protokolovat data do služby Azure Monitor z klienta REST API a pak pomocí skupin akcí vytvářet oznámení nebo upozornění.
# 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)"
}

Další kroky