【问题标题】:Get-AzureBlobContent throwing error when run from Azure Automation account从 Azure 自动化帐户运行时,Get-AzureBlobContent 引发错误
【发布时间】:2019-05-22 17:15:55
【问题描述】:

我在尝试从我的 Azure 自动化帐户从 Azure 存储帐户下载 blob(JSON 文件)时收到错误消息。它看起来像一个授权问题。

这适用于我的本地笔记本电脑,但不适用于 Azure 自动化帐户。即使我将容器“公开”也不起作用

我已为资源组(自动化帐户 + 存储帐户留在此 RG 中)上的自动化帐户服务原则分配 OWNER 权限,特别是在存储帐户上:

下面是代码:

$connectionName = "AzureRunAsConnection"
try
{
    # Get the connection "AzureRunAsConnection "
    $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName         

    "Logging in to Azure..."
    Add-AzureRmAccount `
        -ServicePrincipal `
        -TenantId $servicePrincipalConnection.TenantId `
        -ApplicationId $servicePrincipalConnection.ApplicationId `
        -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint 
}
catch {
    if (!$servicePrincipalConnection)
    {
        $ErrorMessage = "Connection $connectionName not found."
        throw $ErrorMessage
    } else{
        Write-Error -Message $_.Exception
        throw $_.Exception
    }
}

$config_file_resource_group_name = "vg-datalake-manjunath"
$config_file_storage_account_name = "datalakelog"
$primary_key = (Get-AzureRmStorageAccountKey -ResourceGroupName $config_file_resource_group_name -AccountName $config_file_storage_account_name).value[0]
 $config_file_context = New-AzureStorageContext -StorageAccountName $config_file_storage_account_name -StorageAccountKey $primary_key

 Get-AzureStorageBlobContent -Blob "mw_services.json" -Container "fwconfigfiles" -Destination "C:\temp\mw_services.json" -Context $config_file_context

 get-content "C:\temp\mw_services.json" | write-output

错误:

Get-AzureStorageBlobContent : The remote server returned an error: (403) Forbidden. HTTP Status Code: 403 - HTTP Error 
Message: This request is not authorized to perform this operation.
At line:30 char:2
+  Get-AzureStorageBlobContent -Blob "mw_services.json" -Container "fwc ...
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Get-AzureStorageBlobContent], StorageException
    + FullyQualifiedErrorId : 
StorageException,Microsoft.WindowsAzure.Commands.Storage.Blob.Cmdlet.GetAzureStorageBlobContentCommand

【问题讨论】:

标签: azure azure-storage azure-blob-storage azure-powershell azure-automation


【解决方案1】:

可能的原因是您可以配置到选定的网络进行访问。

如果您启用此选项,并且是否勾选“允许受信任的 Microsoft 服务访问”,您将收到此错误,因为自动化未列在 MS 受信任的服务下。见https://docs.microsoft.com/en-us/azure/storage/common/storage-network-security#trusted-microsoft-services

【讨论】:

  • 即使我们点击“允许受信任的 Microsoft 服务”,cmdlet“Get-AzureStorageBlobContent”也不起作用,因为“Azure 自动化”服务不在“受信任的服务”之下。
  • 我已经测试了 cmdlet "Get-AzureStorageBlobContent,它运行良好。我使用下面的代码。Set-AzureRmCurrentStorageAccount –ResourceGroupname "" –StorageAccountName "" $Container = Get-AzureStorageContainer -Container "" Get-AzureStorageBlobContent -Container $Container.Name -Blob "1.txt" -Destination "C:\1.txt" get-content "C:\1.txt" | 写入输出
  • 1.从存储帐户的防火墙 - 选择“选定网络” 2. 选中“允许受信任的 Microsoft 服务访问此存储帐户” 3. 从 Azure 自动化运行手册运行您的代码。代码仍然失败,错误 ==> Get-AzureStorageContainer :远程服务器返回错误:(403) Forbidden。 HTTP 状态代码:403 - HTTP 错误消息:此请求无权执行此操作。
  • 对不起,我的错误。根据docs.microsoft.com/en-us/azure/storage/common/… 此处的文档,Azure 自动化不在 MS 受信任的服务中。因此,要从 azure 自动化访问存储,您需要设置“允许从所有网络访问”。让我纠正我的答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-03-06
  • 2021-09-19
  • 2019-07-03
  • 1970-01-01
  • 2016-03-31
  • 2021-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多