开启S3公共访问拦截后Cloudfront访问S3资源返回AccessDenied如何解决
完全可以在保持S3全部公共访问拦截开启的状态下,通过Cloudfront正常访问S3内的资源,无需关闭任何公共拦截选项。
问题根因
你遇到的AccessDenied报错,本质是Cloudfront没有获取到访问S3存储桶的合法权限,之前关闭公共访问拦截的操作属于不安全的绕路方案,正确方案是通过Cloudfront源访问控制(OAC)配置专属访问权限。
具体配置步骤
- 打开Cloudfront控制台,进入你当前使用的分发配置页,切换到「源」标签,编辑对应S3存储桶的源配置
- 在「源访问」分类下选择 源访问控制(OAC),如果没有已创建的OAC,点击「创建控制设置」,名称自定义即可,其余参数保持默认
- 保存Cloudfront的源配置修改,此时页面会自动生成适配你当前资源的S3桶策略,复制这段策略内容备用
- 进入对应S3存储桶的「权限」配置页,找到桶策略编辑模块,把复制的策略粘贴保存(如果桶内已有其他策略,需合并规则不要直接覆盖)
- 确认S3的「公共访问拦截」四个选项全部保持开启状态
验证效果
配置完成后等待1-3分钟让Cloudfront配置生效,再访问XXX.cloudfront.net/folder/image.jpg就可以正常加载资源,不会再返回权限报错。
方案原理
OAC是AWS官方提供的Cloudfront专属访问S3的权限方案,相当于给Cloudfront开通了S3访问白名单,所有公共访问请求依然会被S3的公共访问拦截规则拦下,只有来自对应Cloudfront分发的合法请求可以获取到存储桶内的资源,安全性远高于放开公共访问权限的方案。
内容的提问来源于stack exchange,提问作者AWShelpme112
相关产品推荐
相关产品推荐

