访问 COS 时返回403错误码

最后更新时间:2021-05-08 14:20:12

    故障现象

    • 当 COS API、SDK 上传和下载资源时,返回403错误码。
    • 当使用临时账号或子账号访问 COS 资源时,返回403错误码。
    • 当修改 COS bucket 配置时,返回403错误码。

    故障定位及处理

    Message 为 “Access Denied.”

    当您访问 COS 出现如下信息时:

    <Code>AccessDenied</Code>
    <Message>Access Denied.</Message>
    

    需要您执行以下操作:

    1. 登录 对象存储控制台
    2. 在左侧导航栏中,选择【存储桶列表】,进入存储桶管理页面。
    3. 找到需要操作的存储桶,单击该存储桶名称,进入存储桶配置页面。
    4. 在左侧导航栏中,选择【权限管理】>【存储桶访问权限】,进入存储桶访问权限管理页面。
    5. 在“存储桶访问权限”栏中,检查访问 COS 的账号是否配置了访问权限。
    • 是,请执行下一步。
    • 否,请单击【添加用户】,为访问 COS 的账号设置所需权限。
    1. 检查配置访问权限的账号是否具有所需权限。
    • 是,请执行下一步。
    • 否,请单击【编辑】,重新设置。
    1. 在“Policy权限设置”栏中,检查访问 COS 的账号是否配置了 policy 授权策略。

      注意:

      • 如果存储桶访问权限为私有读写,且 Policy 权限为匿名访问,那么 Policy 权限的优先级高于存储桶访问权限。
      • 在 Policy 授权策略中,如果同一个子用户同时设置了允许和禁止策略,那么禁止策略的优先级高于允许策略。
      • 在 Policy 授权策略中,“所有用户”策略的优先级低于“指定用户”策略。
    • 是,请执行下一步。
    • 否,请单击【添加策略】,根据实际签名访问时账号所需权限进行设置。
    1. 检查配置 Policy 权限的账号是否具有所需权限。
    • 是,请执行下一步。
    • 否,请单击【编辑】,重新设置。
    1. 检查访问 COS 资源时使用的 q-ak 参数是否为目标桶的所属账号(区分大小写)。
    • 是,请执行下一步。
    • 否,请将 q-ak 参数修改为相应的目标桶所属账号。
    1. 检查访问 COS 资源时是否为跨账号访问。

    Message 为 “AccessForbidden”

    当您访问 COS 出现如下信息时:

    <Code>AccessDenied</Code>
    <Message>AccessForbidden</Message>
    

    需要您执行以下操作:

    1. 登录 对象存储控制台
    2. 在左侧导航栏中,选择【存储桶列表】,进入存储桶管理页面。
    3. 找到需要操作的存储桶,单击该存储桶名称,进入存储桶配置页面。
    4. 在左侧导航栏中,选择【安全管理】>【跨域访问CORS设置】,进入跨域访问 CORS 设置页面。
    5. 在“跨域访问CORS设置”栏中,检查是否为跨域请求。
    • 是,请执行下一步。
    • 否,请修改规则。
    1. 执行以下命令,检查跨域请求配置是否正确。
      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>
    

    需要您执行以下操作:

    1. 登录 对象存储控制台
    2. 在左侧导航栏中,选择【存储桶列表】,进入存储桶管理页面。
    3. 找到需要操作的存储桶,单击该存储桶名称,进入存储桶配置页面。
    4. 在左侧导航栏中,选择【安全管理】>【防盗链设置】,进入防盗链设置页面。
    5. 在“防盗链设置”中,检查是否设置了防盗链。
    1. 执行以下命令,检查防盗链设置是否正确。
      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 参数保持一致,且区分大小写。
    1. 前往 API密钥管理,检查 API 密钥是否已启用。
    • 是,请 联系我们
    • 否,请启用该 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 命令。

    1. 判断客户端当前时间与服务器的时间是否存有偏差(时间偏差超过15分钟)。

    Message 为 “Request has expired”

    当您访问 COS 出现如下信息时:

    <Code>AccessDenied</Code>
    <Message>Request has expired</Message>
    

    产生的可能原因如下:

    • 发起请求的时间超过了签名的有效时间。
    • 本地系统时间和所在时区的时间不一致。

    需要您重新设置签名的有效时间,或者同步本地系统时间。若仍无法解决,请 联系我们

    Message 为 “SignatureDoesNotMatch”

    当您访问 COS 出现如下信息时:

    <Code>AccessDenied</Code>
    <Message>SignatureDoesNotMatch</Message>
    

    需要您执行以下操作:

    检查客户端计算的签名与服务端计算的签名是否一致。

    • 是,请 联系我们
    • 否,请参阅 请求签名 文档,并使用COS 签名工具检查自行实现的签名过程。