Azure 存储的共享密钥

Posted

技术标签:

【中文标题】Azure 存储的共享密钥【英文标题】:Shared key for Azure Storage 【发布时间】:2018-12-05 23:11:17 【问题描述】:

我有试用版 Azure 帐户,并在存储下创建了表。我想使用 REST API 读取表格。我正在通过文档 (https://docs.microsoft.com/en-us/rest/api/storageservices/authorization-for-the-azure-storage-services) 为 HTTP 请求准备授权标头。 我找不到“共享密钥”表单门户,有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

按照以下步骤查看 Azure Blob 存储帐户的存储访问密钥:

    登录到 Azure 仪表板。

    在导航窗格中,单击所有资源。

    选择所需的存储帐户。

    单击密钥图标 () 以查看存储帐户的访问密钥 ()。

    注意:每个存储帐户都有两个存储访问密钥“因此您可以使用一个密钥维持连接,同时重新生成另一个密钥”。

    要复制存储访问密钥,请单击要复制的密钥旁边的复制图标。


访问密钥一词在 Azure 术语中是 共享密钥的同义词。

来自Manage storage account access keys 文档文章:

创建存储帐户时,Azure 会生成两个 512 位存储帐户访问密钥。这些密钥可用于授权通过共享密钥授权访问您的存储帐户中的数据。

【讨论】:

“访问密钥”和“共享密钥”是一样的吗? OP 要求提供“共享密钥”。【参考方案2】:

这是一个创建文件的工作示例:

https://github.com/mstaples84/azurefileserviceauth.git

根据教程:

https://docs.microsoft.com/de-de/azure/storage/common/storage-rest-api-auth 但处理我在从教程创建文件时遇到的问题。

只需运行单元测试“CreateFileAsync()”即可对其进行测试。确保编辑由 Test 类设置的常量以使其工作。

【讨论】:

感谢 Michael,在尝试从 Azure 文件存储中获取文件时,我收到 403 错误“服务器无法对请求进行身份验证。确保授权标头的值正确形成,包括签名。” . AzureStorageAuthenticationHelper 的这个实现解决了这个问题。【参考方案3】:

Shared Key authorization 用于版本 2009-09-19 及更高版本的表服务,使用与以前版本的表服务相同的签名字符串。

授权头的格式如下:

Authorization="[SharedKey|SharedKeyLite] <AccountName>:<Signature>"

针对表服务的请求的共享密钥签名字符串不包括字符串的CanonicalizedHeaders 部分。此外,在这种情况下,Date 标头永远不会为空,即使请求设置了 x-ms-date 标头r。如果请求设置了x-ms-date,则该值也用于Date 标头的值。

要对使用 REST API 发出的针对表服务的请求的签名字符串进行编码,请使用以下格式:

StringToSign = VERB + "\n" +   
               Content-MD5 + "\n" +   
               Content-Type + "\n" +  
               Date + "\n" +  
               CanonicalizedResource;  

此格式支持所有版本的表服务的 Shared Key 和 Shared Key Lite。以这种格式构造CanonicalizedResource字符串,如下所示:

1.以空字符串 ("") 开头,附加正斜杠 (/),后跟拥有正在访问的资源的帐户的名称。

2.附加资源的编码 URI 路径。如果请求 URI 寻址资源的一个组件,则附加适当的查询字符串。查询字符串应包含问号和comp 参数(例如?comp=metadata)。

对签名进行编码

要对签名进行编码,使用以下格式:

Signature=Base64(HMAC-SHA256(UTF8(StringToSign), Base64.decode(<your_azure_storage_account_shared_key>))) 

【讨论】:

以上是关于Azure 存储的共享密钥的主要内容,如果未能解决你的问题,请参考以下文章

使用 PowerShell 生成 Azure 存储帐户 SAS 密钥

REST Api 使用访问密钥到 Azure Blob 存储

从 ASP.NET 应用程序访问 Azure 存储帐户文件共享

使用托管标识进行 AKS 文件共享持久挂载 - 密钥轮换后出现问题

在 ARM 模板中使用访问密钥检索在 Azure 容器上装载 Azure 文件共享

Azure 存储帐户 - 容器级访问和 ACL