Мониторинг изменений делегирования в управляющем клиенте
Как поставщику услуг, вам может потребоваться знать, когда клиентские подписки или группы ресурсов делегируются вашему клиенту посредством Azure Lighthouse, или когда ранее делегированные ресурсы удаляются.
В управляющем клиенте журнал действий Azure отслеживает действия делегирования на уровне клиента. Эти регистрируемые действия включают в себя все добавленные или удаленные делегирования от клиентов заказчиков.
В этом разделе объясняются разрешения, необходимые для отслеживания действий делегирования в клиенте (для всех заказчиков). Также он содержит пример скрипта, который показывает один метод для создания запросов и составления отчетов по этим данным.
Внимание
Все эти действия должны выполняться в управляющем клиенте, а не в клиентах заказчиков.
Хотя в этом разделе мы будем упоминать поставщиков услуг и их заказчиков, предприятия, управляющие несколькими клиентами, могут использовать такие же процессы.
Разрешение доступа к данным уровня клиента
Для доступа к данным журнала действий на уровне клиента учетной записи должна быть назначена встроенная роль Azure Читатель данных служб мониторинга в корневой области (/). Это назначение должно быть выполнено пользователем с ролью глобального администратора и дополнительными правами доступа.
Повышение прав доступа учетной записи глобального администратора
Чтобы назначить роль в корневой области (/), необходимо иметь роль глобального администратора с повышенным уровнем доступа. Этот повышенный доступ должен быть включен только в том случае, если необходимо сделать назначение роли, а затем удалить после завершения.
Подробные инструкции по добавлению и удалению повышения прав см. в статье Повышение прав доступа для управления всеми подписками Azure и группами управления.
После повышения прав доступа вашей учетной записи будет назначена роль администратора доступа пользователей в Azure, охватывающая корень каталога. Это назначение ролей позволяет просматривать все ресурсы и назначать доступ в любой подписке или группе управления в каталоге, а также выполнять назначения ролей в корневой области.
Назначение роли читателя данных служб мониторинга в корневой области
После повышения уровня доступа вы можете назначить соответствующие разрешения учетной записи, чтобы они могли запрашивать данные журнала действий на уровне клиента. Эта учетная запись должна иметь встроенную роль средства чтения мониторинга Azure в корневой области клиента управления.
Внимание
Предоставление назначения ролей в корневой области означает, что те же разрешения применяются к каждому ресурсу в клиенте. Так как это такой широкий уровень доступа, мы рекомендуем назначить эту роль учетной записи субъекта-службы и использовать эту учетную запись для запроса данных.
Можно также назначить роль читателя данных служб мониторинга в корневой области отдельным пользователям или группам пользователей, чтобы они могли просматривать сведения о делегировании непосредственно на портале Microsoft Azure. При этом имейте в виду, что это широкий уровень доступа, который должен быть ограничен наименьшим возможным числом пользователей.
Используйте один из следующих методов для создания назначения в корневой области.
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 "/"
Удаление повышенного права доступа для учетной записи глобального администратора
После назначения роли средства чтения мониторинга в корневой области нужной учетной записи обязательно удалите повышенный доступ для учетной записи глобального администратора, так как этот высокий уровень доступа больше не нужен.
Просмотр изменений делегирования на портале Microsoft Azure
Пользователи, которым назначена роль читателя данных служб мониторинга в корневой области, могут просматривать изменения делегирования непосредственно на портале Microsoft Azure.
- Перейдите на страницу Мои клиенты, а затем в меню навигации слева выберите Журнал действий.
- Убедитесь, что в фильтре в верхней части экрана выбран элемент Действия с каталогом.
- Выберите интервал времени, для которого требуется просмотреть изменения делегирования.
Использование учетной записи субъекта-службы для запроса журнала действий
Поскольку роль средства чтения мониторинга в корневой области является таким широким уровнем доступа, мы рекомендуем назначить роль учетной записи субъекта-службы и использовать эту учетную запись для запроса данных с помощью скрипта.
Внимание
В настоящее время клиенты с большим количеством действий делегирования могут столкнуться с ошибками при запросе этих данных.
При использовании учетной записи субъекта-службы для запроса журнала действий рекомендуется придерживаться следующих правил.
- Создайте новую учетную запись субъекта-службы, которая будет использоваться только для этой функции, вместо того, чтобы назначать эту роль существующему субъекту-службе, используемому для прочей автоматизации.
- Убедитесь, что этот субъект-служба не имеет доступа к делегированным ресурсам клиента.
- Используйте сертификат для проверки подлинности и безопасно храните его в Azure Key Vault.
- Ограничьте количество пользователей, имеющих доступ к действиям от имени субъекта-службы.
После создания учетной записи субъекта-службы с доступом средства чтения мониторинга в корневой области управляющего клиента его можно использовать для запроса и отчета о действиях делегирования.
Этот скрипт Azure PowerShell можно использовать для запроса за последний день действия и отчета о любых добавленных или удаленных делегированиях (или попытках, которые не были успешными). Он запрашивает данные журнала действий клиента, затем конструирует следующие значения, чтобы сообщить о добавлении или удалении делегирований.
- DelegatedResourceId: идентификатор делегированной подписки или группы ресурсов
- CustomerTenantId: идентификатор клиента заказчика
- CustomerSubscriptionId: идентификатор подписки, который был делегирован или содержит группу делегированных ресурсов
- CustomerDelegationStatus: изменение состояния делегированного ресурса (успешно или неудачно)
- EventTimeStamp: Дата и время записи в журнал изменения делегирования
При запросе этих данных учитывайте следующее.
- Если несколько групп ресурсов делегированы в одном развертывании, для каждой группы ресурсов возвращаются отдельные записи.
- Изменения, внесенные в предыдущее делегирование (например, обновление структуры разрешений), регистрируются как добавленное делегирование.
- Как отмечалось ранее, учетная запись должна иметь встроенную роль средства чтения мониторинга Azure в корневой области (/) для доступа к данным на уровне клиента.
- Эти данные можно использовать в собственных рабочих процессах и отчетах. Например, можно использовать API приема журналов для записи данных в Azure Monitor из клиента REST API, а затем использовать группы действий для создания уведомлений или оповещений.
# 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)"
}
Следующие шаги
- Узнайте о том, как подключать клиентов к Azure Lighthouse.
- Изучите сведения об Azure Monitor и о журнале действий Azure.
- Просмотрите образец журналов действий по доменам, чтобы изучить, как отображать журналы действий Azure в нескольких подписках с возможностью фильтрации по доменному имени.