问题描述
您没有当前所访问Object的读权限,或提供的认证信息不正确。
问题原因
您对某个Object发起了读请求,但是却没有该Object的读权限。
您提供的账号AccessKey ID或签名不正确导致身份认证失败。
问题示例
比如您匿名访问了一个Object,但是该Object的ACL被设置为private;或者您通过某账号访问了一个Object,但是该Object所属的Bucket不属于您所采用的账号,且该Object的ACL被设置为private。
比如您的Bucket或是Object虽然设置了公共读或公共读写,但是Bucket开启了"阻止公共访问"功能,也会导致请求被拒绝。
解决方案
请确保您提供的账号AccessKey ID正确,且签名所用的AccessKey Secret正确。
如果您使用RAM用户或者STS临时访问凭证进行访问,请确保您使用的账号存在您要发起的相关操作的权限。更多信息,请参见基于RAM Policy控制OSS的访问权限和RAM Policy常见示例。
如果您是通过将Bucket或Object的ACL设置为公共读来期望允许匿名账号访问,那么需要检查目标Bucket是否开启了"阻止公共访问"。
如果目标 Bucket 开启了"阻止公共访问"功能,且您通过 CDN 加速访问该 Bucket 中的 Object 时遇到此错误,可在 CDN 侧为该 Bucket 开启私有 Bucket 回源功能。开启后,CDN 回源时会自动在请求头中添加 Authorization 签名字段(基于 STS 或 AccessKey 生成),OSS 根据该签名对回源请求进行鉴权,无需关闭"阻止公共访问"即可正常访问。具体操作,请参见开启与关闭 OSS 私有 Bucket 回源。
您还可以通过账号对您希望分享给他人的Object进行签名,这样他人可以通过生成的签名URL进行访问。更多信息,请参见在URL中包含签名。
【不推荐】如果您是Bucket的所有者,且希望该Object允许其他用户访问或匿名访问,那么可以将其ACL设置为public-read(允许任何人包括匿名访问者进行读操作)或者public-read-write(允许任何人包括匿名访问者进行读写操作),但是这会使您的Bucket或Object面临安全风险。更多信息,请参见Bucket ACL和Object ACL。