You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何安全为多用户提供Azure Storage容器的SAS令牌?

安全分发Azure Storage SAS令牌的可行方案

1. 基于身份验证的动态SAS生成(推荐适配你的场景)

既然你的API是基于NodeJS开发的Azure Function,直接在API内部或单独的专用Function中实现SAS令牌生成逻辑是最贴合需求的:

  • 用户身份校验:先通过Azure AD、Azure AD B2C或自定义认证系统验证请求用户的身份,同时确认用户具备对应操作(上传/下载)的权限。
  • 按需生成令牌:验证通过后,使用Azure Storage SDK for NodeJS动态生成权限精准、短时效(建议1-2小时)的SAS令牌。示例代码如下:
const { BlobServiceClient, StorageSharedKeyCredential } = require("@azure/storage-blob");

async function generateBlobSAS(containerName, blobName, permissions) {
  const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
  // 从Azure Key Vault获取账户密钥,避免硬编码
  const accountKey = process.env.AZURE_STORAGE_ACCOUNT_KEY;
  const sharedKeyCredential = new StorageSharedKeyCredential(accountName, accountKey);
  
  const blobServiceClient = new BlobServiceClient(
    `https://${accountName}.blob.core.windows.net`,
    sharedKeyCredential
  );
  
  const containerClient = blobServiceClient.getContainerClient(containerName);
  const blobClient = containerClient.getBlobClient(blobName);
  
  const sasToken = await blobClient.generateSasUrl({
    permissions: permissions, // "r"代表下载,"w"代表上传,"rw"代表读写
    expiresOn: new Date(Date.now() + 3600 * 1000) // 1小时有效期
  });
  
  return sasToken.split('?')[1]; // 提取纯SAS令牌部分返回给用户
}
  • 安全返回令牌:通过HTTPS将生成的SAS令牌直接返回给已认证用户,全程加密传输。

2. 集成Azure AD RBAC + 用户委托SAS

如果用户已纳入Azure AD体系,可采用用户委托SAS方案:

  • 配置RBAC权限:给用户或用户组分配Azure Storage内置角色,比如「存储Blob数据贡献者」(支持上传/下载)、「存储Blob数据读取者」(仅支持下载)。
  • 生成委托SAS:用户先通过Azure AD获取访问令牌,调用你的Azure Function后,Function用该AD令牌向Azure Storage请求生成用户委托SAS。这种方式无需存储账户密钥,令牌权限完全基于用户的AD RBAC权限,安全性更高。

3. 借助Azure API Management(APIM)管控令牌分发

若需要更细粒度的流量控制和权限管理,可将SAS令牌生成逻辑整合到APIM:

  • APIM层身份校验:在APIM配置OAuth2、Azure AD等认证方式,提前校验用户身份和权限。
  • 内置策略生成SAS:利用APIM的内置策略调用Azure Storage生成SAS令牌,再转发给用户。同时APIM可实现流量限制、日志记录等功能,适配数百级用户的大规模场景。

4. 预生成受限SAS令牌+安全存储分发

针对部分需要预分配令牌的场景:

  • 生成受限令牌:生成时严格限定权限(仅允许访问特定容器/Blob)、有效期(比如7天内)、IP范围(仅允许用户所在办公IP段),缩小令牌泄露后的影响范围。
  • 安全分发流程:将预生成的令牌存储在Azure Key Vault中,用户通过你的Azure Function认证后,Function从Key Vault取出对应令牌返回给用户,全程不直接暴露令牌内容。

核心注意事项

  • 短时效优先:尽量使用短有效期令牌,即便泄露也能快速失效。
  • 权限最小化:给每个用户分配刚好够用的权限,避免使用全权限SAS。
  • 密钥安全管理:若使用存储账户密钥生成SAS,务必将密钥存储在Azure Key Vault中,通过Azure Function托管身份访问密钥,禁止硬编码密钥。

内容的提问来源于stack exchange,提问作者bowlingh23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 01:22:34