Azure 计费 REST API
azure billing REST API
我正在尝试使用 Powershell 获取订阅数据的 Azure 计费数据。
主要查看MSDN的Doc
https://docs.microsoft.com/ja-jp/rest/api/consumption/usagedetails/list
$loginUri = "https://login.microsoft.com"
$body =@{
client_id = XXXX
client_secrect = XXXXXXXX
resource = "https://management.core.windows.net"
grant_type = "client_credentials"
}
$oauth = Invoke-RestMethod -Method Post -Uri $loginUrl/$TenantID/oauth2/token?api-version=1.0 -Body $body
# SubscriptionID and Billing Period
$SubscriptionId = '<Your subscription GUID here>'
$billingperiod = '202006-1'
#Create the REST-URL
$usageURL = "https://management.azure.com/subscriptions/$subscriptionid/providers/Microsoft.Billing/billingPeriods/$billingperiod/providers/Microsoft.Consumption/usageDetails?api-version=2017-11-30"
成功获取身份验证令牌后,运行请求uri like
时出错
“AuthenticationFailed”,对象 ID 'XXXX' 的客户端 'XXXXXX' 无权在范围“/subscriptions/XXXX”上执行操作 'Microsoft.Consumption/usageDetial/read' 或范围无效.如果最近授予访问权限,请刷新您的凭据。
可能是因为我没有使用 APPID 和生成的 APPkey 来获取凭据,而是在 Graph API 中获取令牌时使用应用程序的 client_secret?
如果您想使用 Azure AD 应用程序访问 Azure 计费 api,我们需要将 Azure RABC 角色(计费 Reader、Reader、所有者或贡献者角色)分配给ADapplication.For更多详情,请参考document
例如(我指定贡献者角色)
第 1 步:登录您的 Azure 门户
第 2 步:在左侧菜单栏中找到订阅并单击。
第 3 步:单击访问控制 IAM,然后单击添加。
第 4 步:在添加权限 window 中,select 角色的贡献者。在 select 输入框中,键入您在 Azure AD 中创建的应用程序名称(在 Azure Active Directory 中创建)并 select 它。在我的例子中,我创建了 Azure 资源管理。
第 5:After 步您已成功授予权限,点击订阅中的“刷新”window,您将看到您的应用显示在列表中。请参见下面的示例。
第 6 步:Powershell 脚本
$tenantId="76a1f773...b-86b9-d1ced3e15cda"
$clientId="0159ec7d-f...-a680-c4d40ab7a36c"
$clientSecret="o4eq4jj...I26uz26W~"
$secSecret = ConvertTo-SecureString $clientSecret -AsPlainText -Force
$pscredential = New-Object System.Management.Automation.PSCredential ($clientId, $secSecret)
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId
$dexResourceUrl="https://management.azure.com/"
$context = Get-AzContext
$token = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate($context.Account, $context.Environment, $context.Tenant.Id.ToString(), $null, [Microsoft.Azure.Commands.Common.Authentication.ShowDialog]::Never, $null, $dexResourceUrl).AccessToken
$SubscriptionId = '3465e081-85b6-4b54-a3e1-15675acb615f'
$billingperiod = '202010-1'
#Create the REST-URL
$usageURL ="https://management.azure.com/subscriptions/$subscriptionid/providers/Microsoft.Billing/billingPeriods/$billingperiod/providers/Microsoft.Consumption/usageDetails?api-version=2017-11-30"
$header = @{
'Authorization' = "Bearer $($token)"
"Content-Type" = "application/json"
}
$UsageData = Invoke-RestMethod `
-Method Get `
-Uri $usageURL `
-ContentType application/json `
-Headers $header
ConvertTo-Json $UsageData
按照此处的说明进行实际 API 请求时出现以下错误:
Invoke-RestMethod : {"error":{"code":"500","message":"An error occurred during processing this request. Use this request id
'17f6fdea-xxxx-xxxx-xxxx-a8c314d770ee' for follow-up."}}
At C:$Downloads\billingapitest.ps1:45 char:14
+ $UsageData = Invoke-RestMethod `
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
有什么解决办法吗?
谢谢
达伦
============================================
我向 MS 支持提交了工单。就在计划演示该问题的 session 之前,我又测试了一次 Powershell 脚本,发现它现在可以正常工作了!
我正在尝试使用 Powershell 获取订阅数据的 Azure 计费数据。
主要查看MSDN的Doc https://docs.microsoft.com/ja-jp/rest/api/consumption/usagedetails/list
$loginUri = "https://login.microsoft.com"
$body =@{
client_id = XXXX
client_secrect = XXXXXXXX
resource = "https://management.core.windows.net"
grant_type = "client_credentials"
}
$oauth = Invoke-RestMethod -Method Post -Uri $loginUrl/$TenantID/oauth2/token?api-version=1.0 -Body $body
# SubscriptionID and Billing Period
$SubscriptionId = '<Your subscription GUID here>'
$billingperiod = '202006-1'
#Create the REST-URL
$usageURL = "https://management.azure.com/subscriptions/$subscriptionid/providers/Microsoft.Billing/billingPeriods/$billingperiod/providers/Microsoft.Consumption/usageDetails?api-version=2017-11-30"
成功获取身份验证令牌后,运行请求uri like
时出错“AuthenticationFailed”,对象 ID 'XXXX' 的客户端 'XXXXXX' 无权在范围“/subscriptions/XXXX”上执行操作 'Microsoft.Consumption/usageDetial/read' 或范围无效.如果最近授予访问权限,请刷新您的凭据。
可能是因为我没有使用 APPID 和生成的 APPkey 来获取凭据,而是在 Graph API 中获取令牌时使用应用程序的 client_secret?
如果您想使用 Azure AD 应用程序访问 Azure 计费 api,我们需要将 Azure RABC 角色(计费 Reader、Reader、所有者或贡献者角色)分配给ADapplication.For更多详情,请参考document
例如(我指定贡献者角色)
第 1 步:登录您的 Azure 门户
第 2 步:在左侧菜单栏中找到订阅并单击。
第 3 步:单击访问控制 IAM,然后单击添加。
第 4 步:在添加权限 window 中,select 角色的贡献者。在 select 输入框中,键入您在 Azure AD 中创建的应用程序名称(在 Azure Active Directory 中创建)并 select 它。在我的例子中,我创建了 Azure 资源管理。
第 5:After 步您已成功授予权限,点击订阅中的“刷新”window,您将看到您的应用显示在列表中。请参见下面的示例。
第 6 步:Powershell 脚本
$tenantId="76a1f773...b-86b9-d1ced3e15cda"
$clientId="0159ec7d-f...-a680-c4d40ab7a36c"
$clientSecret="o4eq4jj...I26uz26W~"
$secSecret = ConvertTo-SecureString $clientSecret -AsPlainText -Force
$pscredential = New-Object System.Management.Automation.PSCredential ($clientId, $secSecret)
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId
$dexResourceUrl="https://management.azure.com/"
$context = Get-AzContext
$token = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate($context.Account, $context.Environment, $context.Tenant.Id.ToString(), $null, [Microsoft.Azure.Commands.Common.Authentication.ShowDialog]::Never, $null, $dexResourceUrl).AccessToken
$SubscriptionId = '3465e081-85b6-4b54-a3e1-15675acb615f'
$billingperiod = '202010-1'
#Create the REST-URL
$usageURL ="https://management.azure.com/subscriptions/$subscriptionid/providers/Microsoft.Billing/billingPeriods/$billingperiod/providers/Microsoft.Consumption/usageDetails?api-version=2017-11-30"
$header = @{
'Authorization' = "Bearer $($token)"
"Content-Type" = "application/json"
}
$UsageData = Invoke-RestMethod `
-Method Get `
-Uri $usageURL `
-ContentType application/json `
-Headers $header
ConvertTo-Json $UsageData
按照此处的说明进行实际 API 请求时出现以下错误:
Invoke-RestMethod : {"error":{"code":"500","message":"An error occurred during processing this request. Use this request id
'17f6fdea-xxxx-xxxx-xxxx-a8c314d770ee' for follow-up."}}
At C:$Downloads\billingapitest.ps1:45 char:14
+ $UsageData = Invoke-RestMethod `
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
有什么解决办法吗?
谢谢
达伦
============================================
我向 MS 支持提交了工单。就在计划演示该问题的 session 之前,我又测试了一次 Powershell 脚本,发现它现在可以正常工作了!