开启私有OSS Bucket回源后访问CDN加速域名提示“You are forbidden to list buckets”错误

问题描述

使用阿里云CDN加速OSS资源时,当源站为OSS且Bucket设置为私有时,开启静态网站托管功能且CDN开启OSS私有Bucket回源的情况下,访问CDN加速域名返回403 Forbidden并提示以下错误:

You don't have permission to access the URL on this server

查看浏览器调试信息可以看到以下响应信息:

X-Tengine-Error: You are forbidden to list buckets

系统显示类似如下。

CDN

问题原因

CDN回源OSS私有Bucket功能与OSS的静态网站托管功能的默认首页配置存在冲突。开启回源私有Bucket后,CDN回源时默认会带上签名信息,即非匿名访问,而触发静态网站默认首页的请求必须是匿名请求。

说明

OSS的Bucket在配置静态网站托管时,需要配置域名的默认首页为指定文件,例如index.html。使用匿名身份访问网站域名(例如:https://example.com/)时会自动解析到默认首页(例如:https://example.com/index.html)。但是CDN开启OSS私有Bucket回源功能后,访问CDN加速域名产生的回源OSS请求相当于非匿名身份发起的根目录访问请求,而该请求默认会被OSS拒绝。

解决方案

在开启私有OSS Bucket回源后,访问CDN加速域名发生报错的排查方法如下:

  1. 请检查静态网站托管配置情况。

    • 如果配置了OSS的静态网站托管功能,您可以根据实际情况选择以下一种解决方法进行处理:

      • 如果不需要使用OSS的静态网站托管功能,请关闭OSS的静态网站托管功能,详情请参见静态网站托管概述

      • 如果需要使用OSS的静态网站托管功能,则需要直接访问CDN加速域名来实现访问静态首页,需要将OSS设置为公共读,同时关闭OSS的私有Bucket回源。如何关闭OSS的私有Bucket回源,请参见OSS私有Bucket回源

    • 如果没有配置OSS的静态网站托管功能,请继续执行下一步进行排查。

  2. 在CDN侧将根域名URL重写为指向根域名URL下的某个文件,例如将CDN加速域名www.example.com重写为www.example.com/index.html。有关重写规则的具体操作,请参见配置重写