如何通过Microsoft Entra ID及托管身份创建有效期≥1个月的SAS令牌?
基于Microsoft Entra ID与托管身份实现长期Blob访问的可行方案
1. 托管身份+Azure函数自动刷新User Delegation SAS
- 部署Azure函数并配置系统/用户分配的托管身份,给该身份分配Blob存储的RBAC权限(比如
Storage Blob Data Contributor)。 - 函数按固定周期(比如每6天,提前1天完成刷新)调用存储API生成新的User Delegation Key,再创建新的User Delegation SAS令牌。
- 将生成的SAS令牌存入Azure Key Vault,外部客户端从Key Vault获取令牌访问Blob。
- 核心优势:全程依托Entra ID托管身份,无需暴露存储账户密钥;客户端获取的令牌自动更新,间接实现长期稳定访问,同时保留User Delegation SAS的身份溯源能力。
2. 用托管身份安全生成长期Service SAS
- 创建Entra ID应用程序服务主体,为其分配
Storage Account Key Operator Service Role权限,允许它获取存储账户密钥。 - 借助托管身份(比如Azure VM、函数的托管身份)获取服务主体的访问令牌,调用存储API拿到存储账户密钥。
- 用该密钥生成最长有效期10年的Service SAS令牌,存入Key Vault供外部客户端取用。
- 说明:此方案本质是Service SAS,但通过托管身份和Entra ID安全管控密钥获取流程,避免硬编码密钥,符合你要求的Entra身份体系依赖。
3. 直接用Entra ID授权外部客户端(无需SAS)
- 如果外部客户端是企业用户(B2B)或消费者(B2C),可直接让客户端用自身Entra ID凭据访问Blob。
- 给外部用户/组分配Blob存储的RBAC权限(比如
Storage Blob Data Reader),客户端通过OAuth2.0获取访问令牌后直接调用Blob存储API。 - 优势:完全无需管理SAS令牌,访问权限可通过Entra ID直接调整,令牌可自动刷新,天然满足长期访问需求。
内容的提问来源于stack exchange,提问作者albbla91
相关产品推荐
相关产品推荐

