在我的 azure blob 存储中,我有一个容器,其中有多个文件夹,文件夹名称为项目名称,每个文件夹都有一个 metadata.json 文件以及第一级的子文件夹。
Blob Container --> Folder A, FolderB
Folder A --> metadata.json, subfolder(s)
Folder B --> metadata.json, subfolders(s)..
现在,我创建了一个 Powershell commandlet,用于获取项目的 blob 元数据文件。 因此,如果它类似于 Get-Documents -Project "FolderA" 并且我从文件夹 A 中的 metadata.json 中获取所有信息。为此,我将 Blob 存储帐户、SAS 令牌和容器存储在解决方案的配置文件中.
展望未来,我想让它更安全,并希望我的客户,如果他们调用 Get-Documents 命令,应该提示用户登录提示,一旦他们的身份验证通过,即他们在组织活动目录中,并且有Blob 文件夹的权限,他们应该能够获取元数据信息。
我该如何开始?如果有人可以指导我正确的文档或分享类似的解决方案(如果实施)。
答案 0 :(得分:0)
您可以使用 Azure AD 访问 Azure blob 存储,并使用 Rest API 获取 Blob。
Powershell 代码示例:
# login
Connect-AzAccount
# get accessToken
$resource = "https://storage.azure.com/"
$context = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile.DefaultContext
$accessToken = [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, $resource).AccessToken
#request REST API
$uri = "https://<myaccount>.blob.core.windows.net/<mycontainer>/<myblob>"
$xmsdate = get-date
$xmsdate = $xmsdate.ToUniversalTime()
$xmsdate = $xmsdate.toString('r')
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("x-ms-version", "2019-12-12")
$headers.Add("x-ms-date", $xmsdate)
$headers.Add("Authorization", "Bearer " + $accessToken)
Invoke-RestMethod -Method 'Get' -Uri $uri -Headers $headers
有关详细信息,请参阅 here。它会帮助你理解。