Я вижу несколько запросов здесь.
- Чтобы определить, создал ли кто-либо ресурс (скажем, ВМ) и забыл его освободить.
- Проверка последнего входа в виртуальную машину, если она старше 30 дней.
- Для проверки владельца, не использовавшего ВМ в последние 30 дней.
- Если мы некоторое время не выполняем вход в ВМ и если некоторые службы (например, Jenkins и т. Д.) Работают и не затрагиваются.
Для аудита действий над ресурсами и определения операций, выполненных над ресурсами, вы можете использовать Журналы активности. За дополнительной информацией обращайтесь по этой (https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-audit) ссылке.
Для # 1 Вы можете выполнить приведенную ниже команду.
Get-AzureRmVM -Status|select Name, PowerState
Для # 2 и # 3 ниже приведена команда, которую вы можете запустить вручную в ВМ.
Get-WmiObject -Class Win32_NetworkLoginProfile |
Sort-Object -Property LastLogon -Descending |
Select-Object -Property * -First 1 |
Where-Object {$_.LastLogon -match "(\d{14})"} |
Foreach-Object { New-Object PSObject -Property @{ Name=$_.Name;LastLogon=[datetime]::ParseExact($matches[0], "yyyyMMddHHmmss", $null)}}
Но я знаю, что мы ищем автоматизированный способ проверки всех виртуальных машин по вашей подписке. Таким образом, здесь требуется автоматическое (т. Е. Удаленное) подключение ко всем «работающим» виртуальным машинам с портала Azure, а затем получение требуемого вывода. Если я не ошибаюсь, скорее всего, мы сможем выполнить это требование несколькими способами, т.е.
я. Log Analytics
II. DSC
III. Функции
IV. Runbook
v. Приложение логики
я. Создайте рабочую область OMS Log Analytics и установите агент OMS на ВМ, как указано здесь (https://docs.microsoft.com/en-us/azure/azure-monitor/learn/quick-collect-azurevm).) Затем добавьте решение Azure Security Center (Безопасность и аудит) в OMS, чтобы события безопасности передавались в хранилище OMS. Затем перейдите в Log Analytics -> OMSworkspaceName -> Logs и выполните приведенный ниже запрос Kusto, чтобы получить требуемый результат.
SecurityEvent
| where EventID == 4624
| sort by TimeGenerated desc
Обратите внимание, что идентификатор события 4624 - это идентификатор журнала событий любой учетной записи, зарегистрированной на компьютере.
* * +1045 II. На плате Azure DSC на виртуальной машине (-ах), как указано здесь (
https://docs.microsoft.com/en-us/azure/automation/automation-dsc-onboarding)), написать сценарий конфигурации DSC с использованием ресурса сценария DSC, который будет запускать вышеупомянутую команду Get-WmiObject…. Удаленно на узлах DSC (т.е. , VM) и принесите нам требуемый вывод.
III. Напишите функцию триггера HTTP PowerShell, которая будет запускать вышеупомянутый Get-WmiObject…. удаленно (например, можно попробовать запустить новый сеанс ps и вызвать команду) на виртуальных машинах и получить требуемый результат. Вы можете обратиться по этой ссылке (https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-first-azure-function), чтобы узнать о функциях.
IV. Напишите модуль запуска PowerShell, который будет запускать вышеупомянутый Get-WmiObject…. удаленно (например, возможно, запустите новый сеанс ps и вызовите команду) на виртуальных машинах и получите требуемый вывод.
v. В настоящее время приложения логики Azure, по-видимому, не поддерживают запуск сценариев PowerShell и CLI. Однако мы можем попытаться использовать доступный соединитель функций логических приложений или любой аналогичный соединитель и внутренне попытаться вызвать PowerShell для выполнения вышеупомянутого Get-WmiObject…. Команда удаленно. Просто к сведению (https://feedback.azure.com/forums/287593-logic-apps/suggestions/33913552-run-a-powershell-code-within-a-logic-app-action) - голос в отзыве Azure о запуске кода PowerShell в приложении логики, вы можете проголосовать, если вы заинтересованы в этом варианте.
Для # 4 : установить агент OMS на виртуальные машины, чтобы сведения о событиях сохранялись в репозитории OMS. Например, если никто не входит в виртуальную машину, но на этой виртуальной машине работает служба Jenkins, то в этом случае вы можете не беспокоить эту виртуальную машину. Таким образом, чтобы проверить, работает ли служба Jenkins на виртуальной машине или нет, вам может потребоваться выполнить запрос Kusto примерно так:
Event
| where (EventLog == "System")
| where (RenderedDescription has "jenkins" and RenderedDescription has "stopped")
Надеюсь, это поможет !!