寻求可全面爬取Azure资产的全类型资源盘点解决方案
Hey there! 作为经常接手客户Azure环境的托管服务商,我太懂你这个需求的痛点了——市面上不少工具要么只盯着IaaS资源,要么覆盖不全,找起来确实头疼。结合我自己实操过的方案,给你整理几个能覆盖IaaS、PaaS甚至SaaS资源的靠谱办法:
1. Azure PowerShell:灵活覆盖全资源类型
PowerShell的Az模块是我日常用得最多的,能覆盖绝大多数Azure资源,包括SaaS相关的Azure AD、Microsoft 365服务(只要客户给了对应权限)。
步骤:
先确保安装最新的Az模块:
Install-Module -Name Az -AllowClobber -Scope CurrentUser登录客户租户(托管服务建议用服务主体登录,更安全):
Connect-AzAccount -Tenant <客户租户ID> -ServicePrincipal -ApplicationId <你的服务主体ID> -CertificateThumbprint <证书指纹>遍历所有订阅下的IaaS/PaaS资源,导出到CSV:
Get-AzSubscription | ForEach-Object { Set-AzContext -Subscription $_.Id Get-AzResource | Select-Object ResourceGroupName, Name, ResourceType, Location, Id } | Export-Csv -Path "AzureAllResources.csv" -NoTypeInformation这里的
ResourceType字段能清晰区分资源类型,比如Microsoft.Web/sites是PaaS应用服务,Microsoft.Compute/virtualMachines是IaaS虚拟机。补充扫描Azure AD的SaaS相关资源(用户、企业应用等):
# 安装Azure AD模块 Install-Module -Name Az.Ad -AllowClobber # 获取Azure AD用户列表 Get-AzADUser | Select-Object DisplayName, UserPrincipalName, Id # 获取集成的SaaS企业应用 Get-AzADApplication | Select-Object DisplayName, ApplicationId, IdentifierUris
2. Azure CLI:轻量快速的批量导出
如果你更习惯命令行操作,Azure CLI的语法更简洁,同样能实现全资源扫描:
步骤:
- 登录客户租户并切换所有订阅:
az login --tenant <客户租户ID> az account list --query "[].id" -o tsv | while read sub; do az account set --subscription $sub az resource list --query "[].{ResourceGroup:resourceGroup, Name:name, Type:type, Location:location, ID:id}" -o csv >> AzureAllResources.csv done - 补充Azure AD资源扫描:
# 获取Azure AD用户 az ad user list --query "[].{DisplayName:displayName, UPN:userPrincipalName, ID:id}" -o csv # 获取SaaS集成应用 az ad app list --query "[].{DisplayName:displayName, AppID:appId, URIs:identifierUris}" -o csv
3. Azure Resource Graph:跨订阅快速查询
如果需要跨多个订阅快速检索资源,官方的Azure Resource Graph是最优解——它专门为大规模资源查询设计,速度快,支持复杂过滤:
PowerShell示例:
Search-AzGraph -Query "resources | project resourceGroup, name, type, location, id"
Azure CLI示例:
az graph query -q "resources | project resourceGroup, name, type, location, id" -o csv
这个工具能覆盖几乎所有Azure原生服务,包括最新上线的PaaS资源,还能自定义查询条件(比如只筛选特定区域的资源)。
4. SaaS资源补充:Microsoft 365专属模块
对于Exchange、SharePoint这类属于Microsoft 365的SaaS资源,需要单独的PowerShell模块来扫描:
Exchange Online示例:
Install-Module -Name ExchangeOnlineManagement Connect-ExchangeOnline -Organization <客户租户域名> Get-Mailbox | Select-Object DisplayName, PrimarySmtpAddress, IdentitySharePoint Online示例:
Install-Module -Name Microsoft.Online.SharePoint.PowerShell Connect-SPOService -Url https://<客户租户名>-admin.sharepoint.com Get-SPOSite | Select-Object Title, Url, Owner
这些方案组合起来,就能覆盖你需要的所有资源类型了。如果是批量处理客户环境,PowerShell/CLI脚本可以直接自动化;如果是临时查询,Resource Graph的速度优势很明显。
内容的提问来源于stack exchange,提问作者Beefcake

