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 文件共享持久挂载 - 密钥轮换后出现问题