故障现象
当 COS API、SDK 上传和下载资源时,返回403错误码。
当使用临时密钥或子账号访问 COS 资源时,返回403错误码。
当修改 COS bucket 配置时,返回403错误码。
故障分析思路
当 COS 请求出现403错误码时,可参考以下流程排查问题原因:
3.
检查请求是否是匿名请求,向非公有读的对象发起不带签名的请求,会返回 "Access Denied.",如要为存储桶或对象设置公有读,参考
设置访问权限
或
设置对象的访问权限
。
4.
检查请求密钥和请求签名是否正确。
5.
检查发起请求的子账号或临时密钥是否授予了相应访问权限。
5.2
对于使用临时密钥发起的请求,申请临时密钥时填写的策略会限制临时密钥请求的资源范围,详见
临时密钥生成与使用指引
。
故障定位及处理
Message 为 “Access Denied.”
当您访问 COS 出现如下信息时:
<Code>AccessDenied</Code>
<Message>Access Denied.</Message>
需要您执行以下操作:
2.
在左侧导航栏中,选择
存储桶列表
,进入存储桶管理页面。
3.
找到需要操作的存储桶,单击该存储桶名称,进入存储桶配置页面。
4.
在左侧导航栏中,选择
权限管理 > 存储桶访问权限
,进入存储桶访问权限管理页面。
5.
在“存储桶访问权限”栏中,检查访问 COS 的账号是否配置了访问权限。
是,请执行下一步。
否,请单击
添加用户
,为访问 COS 的账号设置所需权限。
6.
检查配置访问权限的账号是否具有所需权限。
是,请执行下一步。
否,请单击
编辑
,重新设置。
7.
在“Policy权限设置”栏中,检查访问 COS 的账号是否配置了 policy 授权策略。
注意
如果存储桶访问权限为私有读写,且 Policy 权限为匿名访问,那么 Policy 权限的优先级高于存储桶访问权限。
在 Policy 授权策略中,如果同一个子用户同时设置了允许和禁止策略,那么禁止策略的优先级高于允许策略。
在 Policy 授权策略中,“所有用户”策略的优先级低于“指定用户”策略。
是,请执行下一步。
否,请单击
添加策略
,根据实际签名访问时账号所需权限进行设置。
8.
检查配置 Policy 权限的账号是否具有所需权限。
是,请执行下一步。
否,请单击
编辑
,重新设置。
9.
检查访问 COS 资源时使用的 q-ak 参数是否为目标桶的所属账号(区分大小写)。
是,请执行下一步。
否,请将 q-ak 参数修改为相应的目标桶所属账号。
10.
检查访问 COS 资源时是否为跨账号访问。
否,请执行下一步。
11.
检查是否使用了临时密钥。
是,请检查申请临时密钥时填写的 action 和 allowPrefix 是否正确。
例如调用 cos.putObject(),但是 action 里并没有填写
name/cos:PutObject
,即没有 putObject 权限导致报错 403。
例如操作的 Key 是
1.jpg
,但是 allowPrefix 填写的是
test/*
(只允许操作
test/*
路径),即没有对应路径的操作权限导致报错 403。
注意
不同语言的 STS SDK,action 和 allowPrefix 所使用的字段不同,例如 STS Java SDK 使用的是 allowActions 和 allowPrefixes 字段,请注意留意 STS SDK 中的示例。
Message 为 “AccessForbidden”
当您访问 COS 出现如下信息时:
<Code>AccessDenied</Code>
<Message>AccessForbidden</Message>
需要您执行以下操作:
2.
在左侧导航栏中,选择
存储桶列表
,进入存储桶管理页面。
3.
找到需要操作的存储桶,单击该存储桶名称,进入存储桶配置页面。
4.
在左侧导航栏中,选择
安全管理 > 跨域访问CORS设置
,进入跨域访问 CORS 设置页面。
5.
在“跨域访问CORS设置”栏中,检查是否为跨域请求。
是,请执行下一步。
否,请修改规则。
6.
执行以下命令,检查跨域请求配置是否正确。
curl 'http://bucket-appid.cos.ap-guangzhou.myqcloud.com/object' -voa /dev/null -H 'Origin: 跨域访问CORS设置的来源 Origin'
Message 为 “You are denied by bucket referer rule”
当您访问 COS 出现如下信息时:
<Code>AccessDenied</Code>
<Message>You are denied by bucket referer rule</Message>
需要您执行以下操作:
2.
在左侧导航栏中,选择
存储桶列表
,进入存储桶管理页面。
3.
找到需要操作的存储桶,单击该存储桶名称,进入存储桶配置页面。
4.
在左侧导航栏中,选择
安全管理 > 防盗链设置
,进入防盗链设置页面。
5.
在“防盗链设置”中,检查是否设置了防盗链。
是,请执行下一步。
6.
执行以下命令,检查防盗链设置是否正确。
curl 'http://bucket-appid.cos.ap-guangzhou.myqcloud.com/object' -voa /dev/null -H 'referer: Referer 的值'
Message 为 “InvalidAccessKeyId”
当您访问 COS 出现如下信息时:
<Code>AccessDenied</Code>
<Message>InvalidAccessKeyId</Message>
需要您执行以下操作:
1.
检查请求签名中 Authorization 的 q-ak 参数是否填写正确。
是,请执行下一步。
否,请修改 q-ak 参数。密钥的 SecretId 需与 q-ak 参数保持一致,且区分大小写。
否,请启用该 API 密钥。
Message 为 “InvalidObjectState”
当您访问 COS 出现如下信息时:
<Code>AccessDenied
</Code>
<Message>InvalidObjectState</Message>
需要您执行以下操作:
检查请求的对象是否为归档类型或深度归档类型。
Message 为 “RequestTimeTooSkewed”
当您访问 COS 出现如下信息时:
<Code>AccessDenied</Code>
<Message>RequestTimeTooSkewed</Message>
需要您执行以下操作:
1.
根据操作系统类型,查看客户端当前时间。
Windows 系统(以 Windwos Server 2012 为例):
> 控制面板 > 时钟、语言和区域 > 设置日期和时间
。
Linux 系统:执行
date -R
命令。
2.
判断客户端当前时间与服务器的时间是否存有偏差(时间偏差超过15分钟)。
是,请同步时间。
Message 为 “Request has expired”
当您访问 COS 出现如下信息时:
<Code>AccessDenied</Code>
<Message>Request has expired</Message>
产生的可能原因如下:
发起请求的时间超过了签名的有效时间。
本地系统时间和所在时区的时间不一致。
需要您重新设置签名的有效时间,或者同步本地系统时间。若仍无法解决,请
联系我们
。
Message 为 “SignatureDoesNotMatch”
当您访问 COS 出现如下信息时:
<Code>AccessDenied</Code>
<Message>SignatureDoesNotMatch</Message>
需要您执行以下操作:
检查客户端计算的签名与服务端计算的签名是否一致。