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

如何使用DefaultAzureCredential类及托管身份生成Azure Storage SAS令牌

使用托管身份生成Azure Blob SAS令牌

要替代共享密钥方式生成SAS令牌,你需要生成用户委派SAS——这是依托Azure AD身份验证授权的SAS,无需存储账户密钥。具体实现步骤和代码如下:

核心逻辑

  1. 通过托管身份创建Blob服务客户端,全程无需存储密钥
  2. 获取用户委派密钥:由Azure AD令牌授权生成,用于签名SAS(有效期最长7天)
  3. 用该密钥生成Blob SAS令牌

Go代码实现

import (
    "context"
    "time"
    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)

func GenerateUserDelegationSAS(accountName, containerName, blobName string) (string, error) {
    // 1. 用托管身份初始化Blob服务客户端(DefaultAzureCredential自动识别托管身份环境)
    cred, err := azidentity.NewDefaultAzureCredential(nil)
    if err != nil {
        return "", err
    }
    serviceURL := "https://" + accountName + ".blob.core.windows.net"
    blobServiceClient, err := azblob.NewBlobServiceClient(serviceURL, cred, nil)
    if err != nil {
        return "", err
    }

    // 2. 获取用户委派密钥(有效期和SAS保持一致,最长不超7天)
    keyStartTime := time.Now().UTC()
    keyExpiryTime := keyStartTime.Add(4 * time.Hour)
    userDelegationKey, err := blobServiceClient.GetUserDelegationKey(context.TODO(), keyStartTime, keyExpiryTime, nil)
    if err != nil {
        return "", err
    }

    // 3. 生成SAS令牌参数
    sasParams, err := azblob.BlobSASSignatureValues{
        Protocol:          azblob.SASProtocolHTTPS,
        ExpiryTime:        keyExpiryTime,
        ContainerName:     containerName,
        BlobName:          blobName,
        Permissions:       azblob.BlobSASPermissions{Read: true}.String(),
        UserDelegationKey: userDelegationKey,
        StartsOn:          keyStartTime,
    }.NewSASQueryParametersWithUserDelegationKey(accountName)
    if err != nil {
        return "", err
    }

    // 返回编码后的SAS查询字符串
    return sasParams.Encode(), nil
}

注意事项

  • 托管身份需被授予存储账户的Storage Blob Data Contributor角色(或更细粒度的权限:允许获取用户委派密钥+读取Blob)
  • 用户委派密钥有效期最长7天,若需长期生成SAS,要定期刷新密钥
  • 该方式比共享密钥更安全:权限通过Azure AD角色管控,无需暴露存储密钥,操作可审计

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 02:15:39