Ресурс Azure для проверки бесхозного ресурса - PullRequest
0 голосов
/ 05 января 2019

Я ищу решение, чтобы узнать Остановился | Распределенные ресурсы Orphan Resources в Azure. Я беру данные ВМ. Но если кто-то раскручивает виртуальную машину и показывает, что она работает, как проверить, не владелец ли эта виртуальная машина использовалась с 30 дней.

az vm list  -d --output table

Любые предложения по автоматизации будут приветствоваться.

az vm list  -d --output table

TESTSXG                                                      VM running

1 Ответ

0 голосов
/ 08 января 2019

Я вижу несколько запросов здесь.

  1. Чтобы определить, создал ли кто-либо ресурс (скажем, ВМ) и забыл его освободить.
  2. Проверка последнего входа в виртуальную машину, если она старше 30 дней.
  3. Для проверки владельца, не использовавшего ВМ в последние 30 дней.
  4. Если мы некоторое время не выполняем вход в ВМ и если некоторые службы (например, 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")

Надеюсь, это поможет !!

...