Azure Blob Storage SAS令牌本地IP可用,VM IP生成的令牌报403授权失败
问题描述
通过Azure Portal生成Azure Blob Storage的SAS令牌,本地IP访问时功能正常,但使用虚拟机(VM)IP调用Blob存储时返回403(未授权)错误。该令牌设置了10年有效期,原本可正常使用,数小时前突然失效。具体错误信息如下:
{ "name": "RestError", "code": "AuthorizationFailure", "statusCode": 403, "request": { "streamResponseStatusCodes": {}, "url": "https://ubstagingcontainer.blob.core.windows.net/ubstagingcontainer/ubstagingcontainer/contacts.png?sp=REDACTED&st=REDACTED&se=REDACTED&sip=REDACTED&spr=REDACTED&sv=REDACTED&sr=REDACTED&sig=REDACTED&comp=REDACTED&blockid=REDACTED", "method": "PUT", "headers": { "_headersMap": { "x-ms-version": "REDACTED", "content-length": "59935", "content-type": "application/octet-stream", "accept": "application/xml", "user-agent": "azsdk-js-storageblob/12.12.0 (NODE-VERSION v16.16.0; Linux 5.15.0-1029-azure)", "x-ms-client-request-id": "6242a2d8-b8bd-4d72-bd5b-7ca9dc0d0ad8", "cookie": "REDACTED" } }, "withCredentials": false, "timeout": 0, "keepAlive": true, "decompressResponse": false, "requestId": "6242a2d8-b8bd-4d72-bd5b-7ca9dc0d0ad8" }, "details": { "errorCode": "AuthorizationFailure", "content-length": "246", "content-type": "application/xml", "date": "Wed, 11 Jan 2023 11:12:48 GMT", "server": "Microsoft-HTTPAPI/2.0", "x-ms-client-request-id": "6242a2d8-b8bd-4d72-bd5b-7ca9dc0d0ad8", "x-ms-request-id": "c535ade9-701e-005a-20ad-25a762000000", "message": "This request is not authorized to perform this operation.\nRequestId:c535ade9-701e-005a-20ad-25a762000000\nTime:2023-01-11T11:12:48.4496393Z", "code": "AuthorizationFailure" }, "message": "This request is not authorized to perform this operation.\nRequestId:c535ade9-701e-005a-20ad-25a762000000\nTime:2023-01-11T11:12:48.4496393Z" }
排查与解决步骤
核对SAS令牌的IP限制
SAS令牌的sip参数指定了允许访问的IP范围,需确认VM的公网IP是否在该范围内。若VM使用动态公网IP,可能因IP变更导致不在允许列表中。可重新生成SAS并更新IP范围,或暂时取消IP限制验证是否恢复。确认VM真实出口IP
部分VM通过NAT网关、负载均衡器访问公网,实际出口IP并非VM自身IP。在VM内执行curl ifconfig.me(Linux)或类似命令获取真实出口IP,对比SAS的IP限制规则。检查存储账户防火墙规则
存储账户可能配置了防火墙,仅允许特定IP/虚拟网络访问。进入Azure Portal的存储账户 -> 网络 -> 防火墙和虚拟网络,确认VM的IP或所在虚拟网络已加入允许列表。验证SAS权限与资源范围
检查SAS令牌的sp参数是否包含所需权限(如PUT操作需写入权限),sr参数确认权限覆盖的资源层级(容器或单个Blob)。若执行块Blob上传,需确保SAS包含对应写入权限。同步VM系统时间
SAS令牌有效性依赖请求时间与Azure服务器时间的同步,若VM系统时间偏差超过15分钟,会被判定为过期。在Linux VM中执行timedatectl检查时间,确保与UTC时间同步;Windows VM可在日期时间设置中开启自动同步。排查Azure服务状态
查看Azure Portal左侧导航的Azure状态页面,确认存储账户所在区域的服务是否正常,排除临时性服务故障影响。
内容的提问来源于stack exchange,提问作者Yash Damani

