Monitorowanie zmian delegowania w dzierżawie zarządzającej
Jako dostawca usług możesz chcieć wiedzieć, kiedy subskrypcje klienta lub grupy zasobów są delegowane do dzierżawy za pośrednictwem usługi Azure Lighthouse lub gdy wcześniej delegowane zasoby zostaną usunięte.
W dzierżawie zarządzającej dziennik aktywności platformy Azure śledzi aktywność delegowania na poziomie dzierżawy. To zarejestrowane działanie obejmuje wszystkie dodane lub usunięte delegowania z dzierżaw klientów.
W tym temacie opisano uprawnienia wymagane do monitorowania działań delegowania do dzierżawy we wszystkich Twoich klientach. Zawiera również przykładowy skrypt, który pokazuje jedną metodę wykonywania zapytań i raportowania tych danych.
Ważne
Wszystkie te kroki należy wykonać w dzierżawie zarządzającej, a nie w dowolnej dzierżawie klienta.
Chociaż w tym temacie odwołujemy się do dostawców usług i klientów, przedsiębiorstwa zarządzające wieloma dzierżawami mogą używać tych samych procesów.
Włączanie dostępu do danych na poziomie dzierżawy
Aby uzyskać dostęp do danych dziennika aktywności na poziomie dzierżawy, konto musi mieć przypisaną wbudowaną rolę Czytelnik monitorowania platformy Azure w zakresie głównym (/). To przypisanie musi być wykonywane przez użytkownika, który ma rolę administratora globalnego z dodatkowym podwyższonym poziomem dostępu.
Podnoszenie poziomu dostępu dla konta administratora globalnego
Aby przypisać rolę w zakresie głównym (/), musisz mieć rolę administratora globalnego z podwyższonym poziomem uprawnień dostępu. Ten podwyższony poziom dostępu powinien być dodawany tylko wtedy, gdy konieczne jest przypisanie roli, a następnie usunięty po zakończeniu.
Aby uzyskać szczegółowe instrukcje dotyczące dodawania i usuwania podniesienia uprawnień, zobacz Podnoszenie poziomu dostępu do zarządzania wszystkimi subskrypcjami i grupami zarządzania platformy Azure.
Po podwyższeniu poziomu dostępu twoje konto będzie mieć rolę administratora dostępu użytkowników na platformie Azure w zakresie głównym. To przypisanie roli umożliwia wyświetlanie wszystkich zasobów i przypisywanie dostępu w dowolnej subskrypcji lub grupie zarządzania w katalogu, a także tworzenie przypisań ról w zakresie głównym.
Przypisywanie roli Czytelnik monitorowania w zakresie głównym
Po podwyższeniu poziomu dostępu możesz przypisać odpowiednie uprawnienia do konta, aby umożliwić wykonywanie zapytań dotyczących danych dziennika aktywności na poziomie dzierżawy. To konto musi mieć wbudowaną rolę czytelnika monitorowania platformy Azure przypisaną w głównym zakresie dzierżawy zarządzania.
Ważne
Przyznanie przypisania roli w zakresie głównym oznacza, że te same uprawnienia będą stosowane do każdego zasobu w dzierżawie. Ponieważ jest to szeroki poziom dostępu, zalecamy przypisanie tej roli do konta jednostki usługi i użycie tego konta do wykonywania zapytań dotyczących danych.
Rolę Czytelnik monitorowania można również przypisać do poszczególnych użytkowników lub grup użytkowników, aby mogli wyświetlać informacje delegowania bezpośrednio w witrynie Azure Portal. Jeśli to zrobisz, należy pamiętać, że jest to szeroki poziom dostępu, który powinien być ograniczony do najmniejszej liczby możliwych użytkowników.
Użyj jednej z następujących metod, aby przypisać zakres główny.
Program PowerShell
# Log in first with Connect-AzAccount if you're not using Cloud Shell
New-AzRoleAssignment -SignInName <yourLoginName> -Scope "/" -RoleDefinitionName "Monitoring Reader" -ObjectId <objectId>
Interfejs wiersza polecenia platformy Azure
# 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 "/"
Usuwanie podwyższonego poziomu dostępu dla konta administratora globalnego
Po przypisaniu roli Czytelnik monitorowania w zakresie głównym do żądanego konta pamiętaj, aby usunąć podwyższony poziom dostępu dla konta administratora globalnego, ponieważ ten poziom dostępu nie będzie już potrzebny.
Wyświetlanie zmian delegowania w witrynie Azure Portal
Użytkownicy, którym przypisano rolę Czytelnik monitorowania w zakresie głównym, mogą wyświetlać zmiany delegowania bezpośrednio w witrynie Azure Portal.
- Przejdź do strony Moje klienci , a następnie wybierz pozycję Dziennik aktywności z menu nawigacji po lewej stronie.
- Upewnij się, że działanie katalogu jest zaznaczone w filtrze w górnej części ekranu.
Zostanie wyświetlona lista zmian delegowania. Możesz wybrać pozycję Edytuj kolumny , aby wyświetlić lub ukryć wartości Stan, Kategoria zdarzeń, Czas, Sygnatura czasowa, Subskrypcja, Zdarzenie inicjowane przez, Grupa zasobów, Typ zasobu i Zasób .
Używanie konta jednostki usługi do wykonywania zapytań w dzienniku aktywności
Ponieważ rola Czytelnik monitorowania w zakresie głównym jest tak szeroki poziom dostępu, możesz przypisać rolę do konta jednostki usługi i użyć tego konta do wykonywania zapytań dotyczących danych przy użyciu poniższego skryptu.
Ważne
Obecnie dzierżawy z dużą ilością działań delegowania mogą napotkać błędy podczas wykonywania zapytań dotyczących tych danych.
W przypadku używania konta jednostki usługi do wykonywania zapytań w dzienniku aktywności zalecamy następujące najlepsze rozwiązania:
- Utwórz nowe konto jednostki usługi, które ma być używane tylko dla tej funkcji, zamiast przypisywać tę rolę do istniejącej jednostki usługi używanej do innej automatyzacji.
- Upewnij się, że ta jednostka usługi nie ma dostępu do żadnych delegowanych zasobów klienta.
- Użyj certyfikatu do uwierzytelniania i bezpiecznego przechowywania go w usłudze Azure Key Vault.
- Ogranicz użytkowników, którzy mają dostęp do działania w imieniu jednostki usługi.
Po utworzeniu nowego konta jednostki usługi z dostępem czytelnika monitorowania do zakresu głównego dzierżawy zarządzania możesz użyć go do wykonywania zapytań i raportowania działań delegowania w dzierżawie.
Ten skrypt programu Azure PowerShell może służyć do wykonywania zapytań dotyczących ostatniego dnia działania i zgłaszania wszelkich dodanych lub usuniętych delegacji (lub prób, które nie powiodły się). Wysyła zapytanie do danych dziennika aktywności dzierżawy, a następnie tworzy następujące wartości w celu raportowania delegowania, które są dodawane lub usuwane:
- DelegatedResourceId: identyfikator delegowanej subskrypcji lub grupy zasobów
- CustomerTenantId: identyfikator dzierżawy klienta
- CustomerSubscriptionId: identyfikator subskrypcji, który został delegowany lub który zawiera grupę zasobów, która została delegowana
- CustomerDelegationStatus: zmiana stanu delegowanego zasobu (powodzenie lub niepowodzenie)
- EventTimeStamp: data i godzina zarejestrowania zmiany delegowania
Podczas wykonywania zapytań dotyczących tych danych należy pamiętać:
- Jeśli wiele grup zasobów jest delegowanych w jednym wdrożeniu, dla każdej grupy zasobów zostaną zwrócone oddzielne wpisy.
- Zmiany wprowadzone w poprzednim delegowaniu (takie jak aktualizowanie struktury uprawnień) zostaną zarejestrowane jako dodane delegowanie.
- Jak wspomniano powyżej, konto musi mieć wbudowaną rolę czytelnika monitorowania platformy Azure w zakresie głównym (/), aby uzyskać dostęp do tych danych na poziomie dzierżawy.
- Te dane można używać we własnych przepływach pracy i raportowaniu. Na przykład możesz użyć interfejsu API modułu zbierającego dane HTTP (wersja zapoznawcza) do rejestrowania danych w usłudze Azure Monitor z poziomu klienta interfejsu API REST, a następnie używać grup akcji do tworzenia powiadomień lub alertów.
# 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)"
}
Następne kroki
- Dowiedz się, jak dołączyć klientów do usługi Azure Lighthouse.
- Dowiedz się więcej o usłudze Azure Monitor i dzienniku aktywności platformy Azure.
- Przejrzyj przykładowy skoroszyt Dzienniki aktywności według domeny, aby dowiedzieć się, jak wyświetlać dzienniki aktywności platformy Azure w subskrypcjach z opcją filtrowania ich według nazwy domeny.