禁用存储密钥访问后,Azure Runbook系统身份传文件仍报错求助
解决Azure Runbook上传Blob时"Key based authentication is not permitted on this storage account"错误
问题出在你通过Get-AzStorageAccount获取的存储上下文(Context)默认会使用存储账户密钥进行认证,但你的存储账户已禁用密钥认证方式——即便用系统身份登录了Azure,后续Blob操作仍会尝试调用密钥,触发错误。
以下是两种可行的修正方案:
方案1:创建基于身份验证的存储上下文
直接使用New-AzStorageContext结合已登录的系统身份创建上下文,彻底避开密钥依赖:
# 用系统身份登录并切换上下文 $AzureContext = (Connect-AzAccount -Identity).Context Set-AzContext -Context $AzureContext # 创建基于身份验证的存储上下文 $ctx = New-AzStorageContext -StorageAccountName Testadlsprod -UseConnectedAccount # 修复原代码语法错误(Get-ChildItem缺少闭合括号) $files = Get-ChildItem -Path C:\temp\Upload foreach($file in $files) { $folderName = "Backup\Production\" + $file.Name Set-AzStorageBlobContent -File $file.FullName -Container backup -Blob $folderName -Context $ctx }
方案2:直接使用Azure上下文执行Blob操作
无需单独创建存储上下文,在Set-AzStorageBlobContent中指定-AzContext参数,让命令直接复用已登录的系统身份:
$AzureContext = (Connect-AzAccount -Identity).Context Set-AzContext -Context $AzureContext $files = Get-ChildItem -Path C:\temp\Upload foreach($file in $files) { $folderName = "Backup\Production\" + $file.Name Set-AzStorageBlobContent -File $file.FullName -Container backup -Blob $folderName -StorageAccountName Testadlsprod -AzContext $AzureContext }
另外注意原代码的两个细节问题:
Get-ChildItem -Path C:\temp\Upload末尾缺少闭合括号,会触发语法错误$foldername = "Backup\Production"+$file.Name建议在Production后添加\,避免Blob名称变成无层级的Backup\ProductionFileName(如果需要构建Blob目录结构的话)
内容的提问来源于stack exchange,提问作者Lucidity
相关产品推荐
相关产品推荐

