使用最新Azure SDK库查询消费数据遇权限与API版本问题
解决Azure最新资源管理库获取消费数据的问题
一、解决GetPriceSheet()的404错误
你遇到的404错误并非API版本问题,而是GetPriceSheet()方法对应的资源操作不匹配你的订阅类型(Microsoft Azure Plan for Dev/Test),且该方法并非获取消费数据的正确入口。
在Azure.ResourceManager.Consumption 1.0.1版本中,获取订阅级消费数据的正确方式是使用**使用详情(Usage Details)或成本详情(Cost Details)**相关操作,示例代码如下:
获取订阅的使用详情
// 确保已引用Azure.ResourceManager.Consumption NuGet包 var consumptionClient = armClient.GetConsumptionUsageDetails(subscription.Id); // 可添加时间范围筛选 var usageDetails = consumptionClient.GetAllAsync( filter: "properties/usageStart ge '2023-01-01' and properties/usageEnd le '2023-01-31'" ).Result.ToList();
获取订阅的成本详情
var costDetailsClient = armClient.GetConsumptionCostDetails(subscription.Id); var costDetails = costDetailsClient.GetAllAsync( new ConsumptionCostDetailsContent() { Metric = ConsumptionMetricType.ActualCost, TimePeriod = new ConsumptionTimePeriod() { Start = new DateTimeOffset(2023, 1, 1, 0, 0, 0, TimeSpan.Zero), End = new DateTimeOffset(2023, 1, 31, 23, 59, 59, TimeSpan.Zero) } } ).Result.ToList();
二、解决管理组GetAggregatedCost()的403错误
你的服务主体虽拥有订阅Owner、Management Group Reader和Cost Management Contributor角色,但Management Group Reader角色需分配到管理组作用域,而非仅订阅。如果仅需单个订阅的消费数据,完全无需通过管理组操作,直接使用上述订阅级方法即可,避免不必要的权限配置。
若确实需要跨订阅聚合成本,需确保:
- 将
Management Group Reader和Cost Management Contributor角色分配到目标管理组或管理组根节点,而非仅订阅。 - 通过Azure门户「管理组」→「访问控制(IAM)」检查角色分配的作用域是否覆盖目标管理组。
三、必要权限说明
获取订阅级消费数据,服务主体只需拥有以下任一角色(分配到订阅作用域):
- Cost Management Reader:只读访问消费数据
- Cost Management Contributor:读写访问消费数据
- Owner/Contributor:默认包含消费数据访问权限
无需额外管理组权限,除非需要跨订阅或管理组聚合成本。
内容的提问来源于stack exchange,提问作者Jan Bahlmann
相关产品推荐
相关产品推荐

