Azure Premium CDN令牌认证后URL重写至Blob SAS签名配置问题
我之前帮不少用户处理过Azure Premium CDN搭配令牌认证+SAS访问Blob的场景,结合你已经搞定令牌认证和SAS生成的情况,咱们直接聚焦URL重写的配置步骤:
1. 先给规则加个触发条件:只处理认证成功的请求
首先得确保只有通过令牌认证的请求才会进入重写流程,不然安全性就打折扣了。在Premium CDN的规则引擎里新建规则时,先添加条件:
- 条件类型选「Token Authentication」
- 操作选「Matches」
- 值填「Success」
这样一来,只有令牌验证通过的请求才会触发后续的重写动作,完美契合你不降低安全性的需求。
2. 配置URL重写动作,把CDN请求映射到带SAS的Blob地址
接下来添加「URL Rewrite」动作,这是核心步骤:
- Rewrite Type:一定要选「Destination」,因为我们要修改CDN向后端Blob存储发起请求的目标URL,而不是修改用户看到的前端URL
- Source Pattern:根据你的CDN请求路径来写,比如如果用户访问的是
https://your-cdn-endpoint.azureedge.net/xxx.jpg,就用/(.*)来匹配所有路径($1会捕获后面的xxx.jpg部分);如果你的CDN路径有前缀(比如/assets/xxx.jpg),就写/assets/(.*) - Destination:填写Blob存储的基础地址+路径占位符+你的SAS令牌。举个实际例子:
假设你的Blob存储账户是mystorage,容器是mycontainer,SAS令牌是sv=2023-11-03&ss=b&srt=o&sp=r&se=2024-12-31T23:59:59Z&st=2024-01-01T00:00:00Z&spr=https&sig=xxxxxx,那目标地址就是:https://mystorage.blob.core.windows.net/mycontainer/$1?sv=2023-11-03&ss=b&srt=o&sp=r&se=2024-12-31T23:59:59Z&st=2024-01-01T00:00:00Z&spr=https&sig=xxxxxx
这里的$1会替换成源模式捕获到的路径部分,保证请求的Blob文件对应正确 - Preserve Query String:选「No」,因为我们已经把SAS参数写在目标地址里了,不需要保留用户请求里的其他查询参数(如果有特殊需求要保留,再选Yes,但要注意SAS参数的优先级)
3. 几个关键注意事项
- SAS有效期问题:如果你的SAS是短期的(比如24小时内过期),直接硬编码在规则里肯定不行。这时候可以用Azure Function动态生成SAS:给Function配置Blob存储的托管身份权限,让它根据请求的Blob路径生成短期SAS,然后在CDN规则里先加「Fetch External Content」动作调用这个Function,把返回的SAS存到自定义变量(比如
{var:sasToken}),最后在重写的目标地址里用$1?{var:sasToken}引用 - 路径匹配要精准:如果CDN的请求路径和Blob的存储路径不一样(比如CDN是
/images/xxx.jpg,Blob是/media/xxx.jpg),记得调整源模式和目标路径,比如源模式写/images/(.*),目标地址写https://mystorage.blob.core.windows.net/media/$1?<sas> - 规则顺序别搞反:令牌认证的规则要放在重写规则前面,规则引擎是按从上到下的顺序执行的,得先验证令牌再重写URL
- 测试验证:用
curl或者浏览器开发者工具测试:先不带令牌请求CDN URL,应该返回403;带有效令牌请求后,看网络请求的响应来源是不是你的Blob存储,或者用curl -v看CDN的转发逻辑是否正确
内容的提问来源于stack exchange,提问作者UCS_edb
相关产品推荐
相关产品推荐

