如何通过已认证的StorageManagementClient获取Azure存储账户创建者?
获取Azure存储账户的创建者信息(基于StorageManagementClient)
storage_client.storage_accounts.list()返回的存储账户对象本身不包含创建者信息——这类归属数据属于Azure活动日志(Activity Log)的范畴,并非存储账户资源的固有属性。要获取创建者信息,需要通过查询活动日志中对应的资源创建事件来实现。
实现步骤
- 权限配置:用于认证的服务账户需要拥有
Monitoring Reader或更高权限(如Reader),才能读取Azure活动日志。 - 查询活动日志:复用同一套凭据初始化Monitor管理客户端,筛选目标存储账户的创建操作事件。
代码示例
from azure.mgmt.monitor import MonitorManagementClient from datetime import datetime, timedelta # 复用StorageManagementClient的凭据和订阅ID初始化Monitor客户端 monitor_client = MonitorManagementClient(credential, subscription_id) # 遍历所有存储账户,逐个查询创建者 for storage_account in storage_client.storage_accounts.list(): resource_id = storage_account.id # 设置查询时间范围(按需调整,覆盖账户可能的创建时间) start_time = datetime.utcnow() - timedelta(days=365) end_time = datetime.utcnow() # 筛选存储账户的创建/写入操作事件 activity_log_entries = monitor_client.activity_logs.list( filter=( f"eventTimestamp ge '{start_time.isoformat()}' " f"and eventTimestamp le '{end_time.isoformat()}' " f"and resourceId eq '{resource_id}' " f"and operationName eq 'Microsoft.Storage/storageAccounts/write'" ) ) # 找到最早的事件(即首次创建操作) sorted_events = sorted(activity_log_entries, key=lambda x: x.event_timestamp) if sorted_events: creator = sorted_events[0].caller print(f"存储账户 {storage_account.name} 创建者: {creator}") else: print(f"未找到存储账户 {storage_account.name} 的创建记录")
注意事项
- 活动日志默认保留90天,如果存储账户创建时间超过90天,将无法通过此方法获取创建者信息,需依赖内部记录或更长保留期的Azure AD审计日志。
Microsoft.Storage/storageAccounts/write操作包含创建和更新行为,取时间最早的事件即为账户创建操作。
内容的提问来源于stack exchange,提问作者Yo mama
相关产品推荐
相关产品推荐

