azure - 使用 PowerShell 对 Azure 存储 Blob 和表的托管标识读取访问权限
问题描述
我一直在尝试使用 Azure 自动化中的托管标识访问存储 blob(以及未来的表),但不幸的是我无法让它工作。
托管标识对 Blob 具有以下权限:
- 贡献者
- 托管应用程序操作员角色
- 存储 Blob 数据贡献者
- 存储表数据贡献者
我尝试了几种资源来获取我的访问令牌:
- 'https://storage.azure.com/'
- 'https://STORAGE.blob.core.windows.net/'
我确实得到了这两种资源的 AccessToken,但我仍然得到著名的 403 禁止错误。
这是我用来访问 blob 的 Uri:
'https://{0}.blob.core.windows.net/{1}{2}' -f $($Storage), $Container, $FileName
我的调用使用 Get 方法:
$InvokeSplatting = @{
Uri = $Uri
Method = 'Get'
headers = $Headers
}
标头包含 AccessToken:“Bearer ~”
难道我做错了什么?
PS:脚本确实与 SASToken 一起工作,所以 AccessToken 一定有问题。
function New-ManagedIdentityAccessToken {
<#
.SYNOPSIS
Short description
.DESCRIPTION
Resources:
'https://vault.azure.net'
'https://management.azure.com'
'https://storage.azure.com/'
.PARAMETER Resource
Parameter description
.EXAMPLE
An example
.NOTES
General notes
#>
[CmdletBinding()]
param (
[parameter(mandatory = $true)]
$Resource
)
begin {
$url = $env:IDENTITY_ENDPOINT
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("X-IDENTITY-HEADER", $env:IDENTITY_HEADER)
$headers.Add("Metadata", "True")
$body = @{resource = $Resource }
}
process {
$accessToken = Invoke-RestMethod $url -Method 'POST' -Headers $headers -ContentType 'application/x-www-form-urlencoded' -Body $body
$Headers = @{
Authorization = "Bearer $($accessToken.access_token)"
}
}
end {
return $Headers
}
}
解决方案
推荐阅读
- awk - 使用 awk 模式归档过滤数据
- xml - Android Studio - “未找到 layout_constraintTop_toEndOf。”
- google-cloud-dataproc - 如何使用 dataproc 从与我的 dataproc 集群不在同一个项目中的 bigquery 中提取数据?
- docker - Docker 是否使用不同的工具在不同的操作系统上运行容器?
- excel - 使用动态范围在 2 张纸上剪切复制粘贴宏
- javascript - 将事件处理程序标记为“被动”是否会延迟其调用或减少调用次数?
- python - 具有不同概率的数据的平均值
- python - 这个脚本有什么问题?我收到 HTTP 错误
- javascript - onMouseOver 和 onMouseOut 切换输入和 div,并更改 div 的值
- hive - 将窗口函数应用于大数据集(如何优化?)