无法以编程方式获取 Azure 存储帐户的密钥

Posted

技术标签:

【中文标题】无法以编程方式获取 Azure 存储帐户的密钥【英文标题】:Unable to programmatically get the keys for Azure Storage Account 【发布时间】:2018-01-08 22:47:05 【问题描述】:

我正在尝试获取订阅中所有存储帐户的密钥。但是我在一个使用 Azure Java SDK 的存储帐户上遇到了这个异常。

com.microsoft.azure.CloudException: 状态码 403,"error":"code":"AuthorizationFailed","message":"客户端 '5c79ee27-#########-# #####91f8e3' 对象 ID 为 '5c79ee27-##########-#####91f8e3' 无权执行操作 'Microsoft.Storage/storageAccounts/listKeys/action'超出范围'/subscriptions/758ad253-#######f07/resourceGroups/spcwestus/providers/Microsoft.Storage/storageAccounts/grsstorag'。":客户端'5c79ee27-######### ##-#####91f8e3' 对象 id 为 '5c79ee27-##########-#####91f8e3' 无权执行操作 'Microsoft.Storage/storageAccounts/listKeys /action' 超出范围 '/subscriptions/758ad253-#######f07/resourceGroups/spcwestus/providers/Microsoft.Storage/storageAccounts/grsstorag'。

对于大多数存储帐户,我设法获得了密钥。但对于其中一些人来说,同样的错误会重复出现。这是什么意思?

【问题讨论】:

你现在能解决这个错误吗? 【参考方案1】:

从您遇到的错误来看,服务器响应您的请求,HTTP 403状态码表明您的请求被服务器禁止

HTTP 403 状态码

接收有效凭据的服务器不足以 获得访问权限应该以 403(禁止)状态码进行响应 ([RFC7231] 第 6.5.3 节)。

这很可能是由一些基于角色的访问控制造成的,这些控制可以防止您的帐户根据您分配的角色对某些存储帐户执行列表存储帐户密钥操作。

您可以使用下面的 Azure PowerShell cmdlet 来验证在特定范围内分配给您的特定对象的角色是否具有列出存储帐户密钥的权限。

Get-AzureRmRoleAssignment -Scope "/subscriptions/758ad253-#######f07/resourceGroups/spcwestus/providers/Microsoft.Storage/storageAccounts/grsstorag" -ObjectId 5c79ee27-###########-#####91f8e3

更多信息请参考以下链接:

Use Role-Based Access Control to manage access to your Azure subscription resources

【讨论】:

谁对我的回答投了反对票,你对你投反对票有什么强有力的理由吗?请为您的行为负责,我可以接受批评和反馈但不能不负责任地投反对票!也许你应该在这样做之前提供一个更好的答案。 我没有投反对票,但如果我要回答这个问题,我会提供更详细的答案。例如,我将包含默认情况下有权列出存储帐户的密钥并在listKeys 操作背后提供更多上下文的角色。 @GauravMantri 非常感谢您的建设性反馈。我同意你的看法,实际上希望提供更详细的答案,就像你所建议的那样 刚刚设法解决它。资源组对访问 Azure 的应用程序具有“读者”访问角色。读取者角色无权读取密钥。我将资源组的访问角色更改为贡献者,它开始工作。

以上是关于无法以编程方式获取 Azure 存储帐户的密钥的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 Azure 存储帐户密钥

如何使用 Python 获取 Azure 的所有存储帐户名称及其访问密钥

有没有办法使用 powershell 获取经典 Azure 存储帐户的密钥?

ARM - 如何从存储帐户获取访问密钥,以便稍后在模板中的 AppSettings 中使用?

使用 Javascript 以编程方式创建 Azure 存储帐户的最佳选择是啥?

无法使用 StorageClass 配置卷 - 无法获取存储帐户的存储密钥