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

获取用户委派密钥

操作 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 存储端口指定为 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 上指定以下附加参数。

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

请求标头

下表介绍必需的和可选的请求标头。

请求标头 说明
Authorization 必需。 指定授权方案。 仅支持使用 Microsoft Entra ID 授权。 有关详细信息,请参阅使用 Microsoft Entra ID 授权
x-ms-version 对于所有已授权的请求是必需的。 有关详细信息,请参阅 Azure 存储服务的版本控制
x-ms-client-request-id 可选。 提供客户端生成的不透明值,其中包含 1-kibite (KiB) 配置日志记录时记录在日志中的字符限制。 强烈建议使用此标头将客户端活动与服务器接收的请求相关联。 有关详细信息,请参阅监视Azure Blob 存储

请求正文

请求正文的格式如下所示:

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

下表描述了请求正文的元素:

元素 说明
启动 必需。 用户委托 SAS 的开始时间,采用 ISO 日期格式。 它必须是当前日期后 7 天内的有效日期和时间。
Expiry 必需。 用户委托 SAS 的过期时间,采用 ISO 日期格式。 它必须是当前日期后 7 天内的有效日期和时间。

响应

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

状态代码

此操作成功后返回状态代码 200(正常)。

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

响应头

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

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

下表描述了响应正文的元素:

元素 说明
SignedOid Microsoft 标识系统中对象的不可变标识符。
SignedTid 表示用户来自Microsoft Entra租户的 GUID。
SignedStart 用户委托密钥的开始时间,采用 ISO 日期格式。
SignedExpiry 用户委托密钥的过期时间,采用 ISO 日期格式。
SignedService 用户委托密钥可用于的服务,其中 b 表示 Blob 存储。
SignedVersion 用于获取用户委派密钥的 REST API 版本。
用户委托密钥。

授权

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

权限

请求用户委派密钥的安全主体需要具有相应的权限才能执行此操作。 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 委派者 角色分配给该安全主体。 存储 Blob 委派者角色授予安全主体请求用户委托密钥的权限。

有关 Azure 存储的 RBAC 角色的详细信息,请参阅 使用 Azure Active Directory 授权

注解

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

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

计费

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

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

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

另请参阅