首页 > 解决方案 > 使用 PowerShell 对 Azure 存储 Blob 和表的托管标识读取访问权限

问题描述

我一直在尝试使用 Azure 自动化中的托管标识访问存储 blob(以及未来的表),但不幸的是我无法让它工作。

托管标识对 Blob 具有以下权限:

我尝试了几种资源来获取我的访问令牌:

我确实得到了这两种资源的 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
    }
}

标签: azurepowershellazure-managed-identity

解决方案


推荐阅读