如何在运行 Powershell - 消耗计划的 Azure 函数中使用系统分配的托管标识创建存储帐户上下文?

问题描述 投票:0回答:1

我开发了一个 Azure 函数,负责将文件导出到存储帐户。在测试阶段,我使用了共享访问签名 (SAS) 连接字符串,并使用下面的 PowerShell 脚本来建立存储帐户上下文:

$context = New-AzStorageContext -ConnectionString $storageConnectionString

当我们转向生产环境时,我的目标是利用 Azure Function 的系统分配的托管标识,该标识在指定的存储帐户中拥有存储帐户贡献者角色。

为了实现这一目标,我尝试使用托管标识创建存储帐户上下文。但是,New-AzStorageContext cmdlet 缺少托管标识的直接参数,导致以下尝试失败:

$context = New-AzStorageContext -StorageAccountName $storageAccountName -UseConnectedAccount -AssignedIdentityId $managedIdentityClientId

我目前正在探索使用托管身份的替代方法,例如获取对象 ID。任何有关如何使用托管标识成功创建存储帐户上下文的建议或指导将不胜感激。谢谢。

azure powershell azure-functions serverless
1个回答
0
投票

为了使用

Managed Identity
Function App
连接到
Azure storage account
,请使用以下方法:-

Azure Functions 身份:-

enter image description here

Azure 存储帐户分配的角色:-

enter image description here

功能应用程序

Http Trigger code
连接到存储帐户:-

using namespace System.Net


param($Request, $TriggerMetadata)


Write-Host "PowerShell HTTP trigger function processed a request."


$name = $Request.Query.Name
if (-not $name) {
    $name = $Request.Body.Name
}

$body = "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."

if ($name) {
    $body = "Hello, $name. This HTTP triggered function executed successfully."
}


Import-Module Az.Resources
Import-Module Az.Accounts
Import-Module Az.Storage


Connect-AzAccount -Identity


$AccountName = "siliconrgps843f"
$ResourceGroupName = "siliconrgps"


$StorageAccount = Get-AzStorageAccount -Name $AccountName -ResourceGroupName $ResourceGroupName


$storageAccountJson = $StorageAccount | ConvertTo-Json -Depth 4

Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $storageAccountJson
})

我正在使用以下代码使用 Function App 托管身份连接到我的 Azure 帐户参考MS Document:-

# Authenticate with Azure
Connect-AzAccount -Identity

此外,您无法为托管身份添加存储帐户上下文,因为根据此 MS Document,该选项不可用。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.