你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Blob 获取用户委派密钥

Get User Delegation Key 作获得一个密钥,可用于签署用户委派SAS(共享访问签名)。 用户委派SAS通过使用Microsoft Entra凭证授予对Azure Blob存储资源的访问权限。 该 Get User Delegation Key 作版本为2018-11-09及以后版本。

请求

构造如下 Get User Delegation Key 。 需要 HTTPS。 将 myaccount 替换为存储帐户的名称。

POST 方法请求 URI HTTP 版本
https://myaccount.blob.core.windows.net/?restype=service&comp=userdelegationkey HTTP/1.1

模拟存储服务请求

当你向本地存储服务发送请求时,请指定本地主机名和Blob Storage端口为 127.0.0.1:10000,后面再指定本地存储账户名称:

POST 方法请求 URI HTTP 版本
http://127.0.0.1:10000/devstoreaccount1/?restype=service&comp=userdelegationkey HTTP/1.1

有关详细信息,请参阅 使用 Azurite 模拟器进行本地 Azure 存储开发

URI 参数

请求URI上可以指定以下额外参数。

参数 Description
timeout 可选。 该 timeout 参数以秒为单位表示。 有关详细信息,请参阅为 Blob 存储作设置超时

请求标头

下表描述了必需和可选的请求标头。

请求标头 Description
Authorization 必填。 规定授权方案。 仅支持使用 Microsoft Entra ID 的授权。 更多信息请参见 “使用Microsoft Entra ID授权”。
x-ms-version 所有授权请求都需要。 有关详细信息,请参阅 Azure 存储服务的版本控制
x-ms-client-request-id 可选。 提供客户端生成的不透明值,该值具有 1 KiB 字符限制,该值在配置日志记录时记录在日志中。 强烈建议使用此标头将客户端活动与服务器接收的请求相关联。 有关详细信息,请参阅 监视 Azure Blob 存储

请求主体

请求正文的格式如下:

<?xml version="1.0" encoding="utf-8"?>  
<KeyInfo>  
    <Start>String, formatted ISO Date</Start>
    <Expiry>String, formatted ISO Date </Expiry>
</KeyInfo>  

请求体的元素如下表描述:

元素 Description
启动 必填。 用户委派SAS的开始时间,以ISO日期格式表示。 该日期和时间必须在当前日期后七天内有效。
满期 必填。 用户委托SAS的有效期,以ISO日期格式呈现。 该日期和时间必须在当前日期后七天内有效。

响应

响应包括 HTTP 状态代码和一组响应标头。

状态代码

作成功返回状态代码200(OK)。

有关状态代码的详细信息,请参阅 状态和错误代码

响应标头

此作的响应包括以下标头。 响应还可能包括其他标准 HTTP 标头。 所有标准标头都符合 HTTP/1.1 协议规范

响应标头 Description
x-ms-request-id 唯一标识发出的请求,并可用于排查该请求。 有关详细信息,请参阅 API作疑难解答
x-ms-version 就是用来执行请求的 Blob 存储版本。
Date 由服务生成的 UTC 日期/时间值,该值指示启动响应的时间。
x-ms-client-request-id 可用于对请求和相应的响应进行故障排除。 如果此标头存在于请求中,则此标头的值等于 x-ms-client-request-id 标头的值,并且该值包含不超过 1,024 个可见 ASCII 字符。 如果请求中不存在 x-ms-client-request-id 标头,则响应中不会显示该标头。

响应体

回应正文的格式如下:

<?xml version="1.0" encoding="utf-8"?>
<UserDelegationKey>
    <SignedOid>String containing a GUID value</SignedOid>
    <SignedTid>String containing a GUID value</SignedTid>
    <SignedStart>String formatted as ISO date</SignedStart>
    <SignedExpiry>String formatted as ISO date</SignedExpiry>
    <SignedService>b</SignedService>
    <SignedVersion>String specifying REST api version to use to create the user delegation key</SignedVersion>
    <Value>String containing the user delegation key</Value>
</UserDelegationKey>

响应体的元素如下表所述:

元素 Description
签名Oid Microsoft身份系统中对象的不可变标识符。
签名Tid 一个GUID,代表用户来自的Microsoft Entra租户。
签名开始 用户委派密钥的起始时间,以ISO日期格式表示。
已签名到期日 用户委托密钥的有效期,以ISO日期格式表示。
签名服务 用户委托密钥可用于的服务,其中 b 代表 Blob 存储。
签名版 就是用来获取用户委派密钥的REST API版本。
价值 用户委托密钥。

Authorization

在 Azure 存储中调用任何数据访问作时,都需要授权。 你只能通过 Microsoft Entra ID 授权该 Get User Delegation Key 作。

Permissions

请求用户委派密钥的安全主体需要拥有相应权限。 Microsoft Entra 的安全主体可以是用户、组、服务主体或托管身份。

以下是 Microsoft Entra 安全主体 Get User Delegation Key 调用作所需的 RBAC 动作,以及包含该作的 Azure 内置 RBAC 权限最低的角色:

任何包含该Azure RBAC动作的内置角色,无论是显式还是作为通配符定义的一部分,都可以调用该 Get User Delegation Key 作。

若要详细了解如何使用 Azure RBAC 分配角色,请参阅 分配 Azure 角色以访问 blob 数据

由于作在 Get User Delegation Key 存储账户层面执行, Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 动作必须在存储账户、资源组或订阅层面进行范围限制。 如果安全主体被分配了上述任何内置角色,或包含 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 作的自定义角色,在存储账户、资源组或订阅层面,安全主体将能够请求用户委派密钥。

如果安全主体被分配了一个允许访问数据但作用范围为容器级别的角色,你还可以在存储账户、资源组或订阅级别为该安全主体分配存储 块委托者 角色。 存储 Blob 委托者角色赋予安全主体请求用户委派密钥的权限。

有关Azure Storage的RBAC角色的更多信息,请参见 “授权于Azure Active Directory”。

注解

使用用户委派密钥创建用户委派SAS。 包含用户委派SAS令牌中响应时返回 Get User Delegation Key 的字段。 有关详细信息,请参阅创建用户委托 SAS

用户委派密钥不能直接访问 Blob 存储资源。

账单管理

定价请求可以直接通过 Blob 存储 REST API 或 Azure 存储客户端库源自使用 Blob 存储 API 的客户端。 这些请求会为每笔交易产生费用。 交易类型会影响账户的收费方式。 例如,读取事务应计到与写入事务不同的计费类别。 下表显示了基于存储帐户类型的请求的 Get User Delegation Key 计费类别:

操作 存储帐户类型 计费类别
获取用户委派密钥 高级块 Blob
标准常规用途 v2
其他行动
获取用户委派密钥 标准常规用途 v1 读取作业

若要了解指定计费类别的定价,请参阅 Azure Blob 存储定价

另请参阅