【问题标题】:Azure resource to check orphan resource用于检查孤立资源的 Azure 资源
【发布时间】:2019-01-05 09:05:56
【问题描述】:

我正在寻找解决方案以找出 Stopped | Azure 中已释放的资源孤立资源。我抓取虚拟机数据。但是如果有人旋转虚拟机并且虚拟机显示正在运行,如何检查所有者自 30 天以来没有使用过该虚拟机。

az vm list  -d --output table

欢迎任何自动化建议。

az vm list  -d --output table

TESTSXG                                                      VM running

【问题讨论】:

  • 没办法
  • 任何方式来识别,如果有些人创建了任何资源(VM、存储、网卡、磁盘)并忘记释放。我可以识别孤儿资源。
  • 你怎么知道它是否被使用?你不能,很明显
  • 如果超过 30 天,我的意思是最后一次登录 VM。我可以说没有人使用它。
  • 为什么?您不需要登录到 vm 即可使用,例如它可能会运行 jenkins?那是一个非常肤浅的方法。此外,您无法检查上次登录到 vm,因为 Azure 无法知道这一点

标签: azure azure-cli


【解决方案1】:

我在这里看到多个查询。

  1. 识别是否有人创建了任何资源(例如 VM)并忘记释放它。
  2. 检查上次登录 VM 是否超过 30 天。
  3. 检查所有者在过去 30 天内未使用虚拟机。
  4. 如果我们有一段时间没有登录 VM,并且某些服务(如 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 门户自动(即远程)连接到所有“正在运行”的 VM,然后获得所需的输出。如果我没记错的话,我们很可能可以通过多种方式实现这一要求,即,

我。日志分析

二。数码相机

三。功能

四。操作手册

v.逻辑应用

我。按照此处 (https://docs.microsoft.com/en-us/azure/azure-monitor/learn/quick-collect-azurevm) 的说明,创建 Log Analytics OMS 工作区并在 VM 上安装 OMS 代理。然后在 OMS 中添加 Azure 安全中心(安全和审计)解决方案,以便将安全事件推送到 OMS 存储库。然后转到 Log Analytics -> OMSworkspaceName -> Logs 并运行以下 Kusto 查询以获取所需的输出。

SecurityEvent
| where EventID == 4624 
| sort by TimeGenerated desc

请注意,事件 ID 4624 是登录到计算机的任何帐户的事件日志的 ID。

二。按照此处的说明 (https://docs.microsoft.com/en-us/azure/automation/automation-dsc-onboarding) 在 VM 上板载 Azure DSC,并使用“脚本”DSC 资源编写 DSC 配置脚本,该脚本将运行上述 Get-WmiObject…。在 DSC 节点(即 VM)上远程命令并获取我们所需的输出。

三。编写一个 HTTP 触发 PowerShell 函数,该函数将运行上述 Get-WmiObject…。在 VM 上远程命令(即,可以尝试新的 ps 会话并调用命令)并获取我们所需的输出。您可以参考这个 (https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-first-azure-function) 链接来了解函数。

四。编写将运行上述 Get-WmiObject... 的 PowerShell 运行手册。在 VM 上远程命令(即,可以尝试新的 ps 会话并调用命令)并获取我们所需的输出。

v.目前 Azure Logic Apps 似乎不支持运行 PowerShell 和 CLI 脚本。但是,我们可能会尝试使用可用的 Logic Apps Functions 连接器或任何类似的连接器,并在内部尝试调用 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,在 VM 上安装 OMS 代理,以便将事件详细信息存储在 OMS 存储库中。例如,如果没有人登录到 VM,但 Jenkins 服务正在该 VM 上运行,那么在这种情况下,您可能不想打扰该 VM。因此,要验证 Jenkins 服务是否在 VM 上运行,您可能需要运行类似这样的 Kusto 查询。

Event
| where (EventLog == "System")
| where (RenderedDescription has "jenkins" and RenderedDescription has "stopped")

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-30
    • 2023-04-02
    • 2022-08-05
    • 1970-01-01
    • 2022-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多