本文介绍OSS返回403错误的原因和解决方案。

AccessDenied

The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint

  • 问题原因:访问Bucket时使用的Endpoint不正确。

  • 解决方案:确保使用正确的Endpoint访问Bucket。例如Bucket所在地域为oss-cn-hangzhou,则外网Endpoint为oss-cn-hangzhou.aliyuncs.com。关于Endpoint的更多信息,请参见OSS访问域名使用规则

This request is forbidden by kms

  • 问题原因:没有KMS使用权限。

  • 解决方案:请确保对指定的CMK ID具有使用权限。详情请参见服务器端加密

AccessDenied

  • 问题原因:没有相应的访问权限。

  • 解决方案:

    • 确认使用了正确的AccessKey ID和AccessKey Secret。详情请参见创建AccessKey

    • 确认RAM用户是否拥有Bucket或Object相关操作权限。

You have no right to access this object

Anonymous user has no right to access this bucket

Anonymous user has no right to access this object

You are denied by bucket referer policy

  • 问题原因:防盗链校验

  • 解决方案:通过设置Referer白名单以及是否允许空Referer,限制仅白名单中的域名可以访问Bucket内的资源。详情请参见设置防盗链

Invalid according to Policy: Policy expired

  • 问题原因:PostObject中的Policy表单域无效。

  • 解决方案:Post请求的Policy表单域用于验证请求的合法性。Policy为一段经过UTF-8和Base64编码的JSON文本,声明了Post请求必须满足的条件。Post Policy格式如下:

    { "expiration": "2014-12-01T12:00:00.000Z",
      "conditions": [
        {"bucket": "johnsmith" },
        ["starts-with", "$key", "user/eric/"]
      ]
    }

    关于Policy中支持的Conditions详情,请参见附录:Post Policy

Invalid according to Policy: Policy Condition failed: " + RelatedUnit; //XXX

  • 问题原因:Policy表单域中指定的Conditions无效。

  • 解决方案:确保在Policy表单域中指定有效的Conditions。关于Policy表单域中支持的Conditions以及Conditions匹配方式详情,请参见附录:Post Policy

Invalid according to Policy: Policy Condition failed: ["eq", "$Content-Type", "image/png"]

  • 问题原因:上传的文件类型与指定的Content-Type类型不符。

  • 解决方案:Policy中的Content-Type用于限制表单上传时的文件类型。如果Content-Type限制为image/png,则仅支持上传image/png类型的文件。如果您需要上传其他类型的文件,请添加对应的Content-Type类型。关于常见的Content-Type类型列表,请参见如何设置Content-Type(MIME)?

Target object does not reside in the same data center as source object

  • 问题原因:不支持跨地域拷贝文件。

  • 解决方案:仅支持拷贝同一地域下相同或不同存储空间(Bucket)之间的文件(Object)。详情请参见CopyObject

Query string authentication requires the Signature, Expires and OSSAccessKeyId parameters

  • 问题原因:URL签名缺少必要参数。

  • 解决方案:URL签名必须至少包含SignatureExpiresOSSAccessKeyId参数。URL签名示例为http://oss-example.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?OSSAccessKeyId=nz2pc56s936**9l&Expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv****。关于URL签名的详情,请参见在URL中包含签名

Invalid date (should be seconds since epoch)

  • 问题原因:请求的时间戳无效。

  • 解决方案:Expires参数的值是一个Unix time(自UTC时间1970年1月1号开始的秒数),用于标识该URL的超时时间。

Request has expired

You do not have read permission on this object

  • 问题原因:没有该Object的读取权限。

  • 解决方案:请联系Object拥有者授予您对Object的读取权限。

You do not have write permission on this object

  • 问题原因:没有该Object的写入权限。

  • 解决方案:请联系Object拥有者授予您对Object的写入权限。

You do not have read acl permission on this object

  • 问题原因:没有该Object的ACL读取权限。

  • 解决方案:请联系Object拥有者授予您GetObjectACL的权限。

You do not have write acl permission on this object

  • 问题原因:没有该Object的ACL写入权限。

  • 解决方案:请联系Object拥有者授予您PutObjectACL的权限。

You have no right to access this object because of bucket acl

  • 问题原因:没有该Object的访问权限。

  • 解决方案:请授予访问者OSS相关访问权限,例如PutObjectGetObjectAppendObject等。详情请参见RAM Policy常见示例

Anonymous access is forbidden for this operation

Access denied by bucket policy

Access denied by VPC endpoint policy

  • 问题原因:客户端所在VPC添加了Policy授权策略,导致未授权的Bucket无法在VPC环境内访问。

  • 解决方案:请检查您的客户端所在VPC配置的Policy授权策略。

Access denied by authorizer's policy

  • 问题原因:出现该报错通常是无权限执行相关操作。

  • 解决方案:临时访问凭证最终获取的权限是步骤四设置的角色权限和步骤五中Policy设置权限的交集。请通过以下示例检查您在这两个步骤中设置的权限交集。

    • 示例1

      如下图所示,A代表RAM角色的权限,B代表通过policy参数设置的权限,C代表临时访问凭证最终的权限。

      1.jpg

    • 示例2

      如下图所示,A代表RAM角色权限,B代表通过policy参数设置的权限,且policy参数设置的权限是RAM角色权限的子集。因此,B代表临时访问凭证的最终权限。

      2.jpg

AccessForbidden

CORSResponse: This CORS request is not allowed. This is usually because the evalution of Origin, request method / Access-Control-Request-Method or Access-Control-Requet-Headers are not whitelisted by the resource's CORS spec

PermanentRedirect

The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint

  • 问题原因:通过SDK访问OSS中的Bucket时,未指定Endpoint或者指定的Endpoint有误。例如创建的Bucket位于青岛地域,使用了默认配置的oss-cn-hangzhou.aliyuncs.com的Endpoint地址发起请求,则出现该报错。

  • 解决方案:确认请求的Endpoint地址与Bucket实际的Endpoint地址一致。例如需要访问青岛和杭州两个节点的Bucket,建议创建多个ossclient,并在ossclient中添加oss-cn-hangzhou.aliyuncs.comoss-cn-qingdao.aliyuncs.com两个Endpoint。

SecondLevelDomainForbidden

The bucket you are attempting to access must be addressed using OSS third level domain

  • 问题原因:Bucket的请求域名不为三级域名。

  • 解决方案:针对OSS的网络请求,请确保除了GetService (ListBuckets)API以外,其他所有请求的域名均由带有指定Bucket信息的三级域名组成。其中,访问域名结构为BucketName.Endpoint,BucketName为您的存储空间名称,Endpoint为存储空间对应的地域域名。例如https://examplebucket.oss-cn-hangzhou.aliyuncs.com

Please use virtual hosted style to access

  • 问题原因:Host错误。

  • 解决方案:通过外网访问OSS服务时,以URL的形式表示访问的OSS资源。OSS的URL结构为<Schema>://<Bucket>.<外网Endpoint>/<Object> 。其中Schema包含HTTP或者HTTPS,Bucket表示存储空间名称,外网Endpoint为Bucket所在数据中心供外网访问的Endpoint,Object填写上传到OSS上的文件的访问路径。

    例如您的Region为华东1(杭州),Bucket名称为examplebucket,Object访问路径为destfolder/example.txt,则外网访问地址为https://examplebucket.oss-cn-hangzhou.aliyuncs.com/destfolder/example.txt

NonStandardHostForbidden

Your host is invalid. Please use Open Storage Service standard host

  • 问题原因:Host错误。

  • 解决方案:请使用标准的域名格式访问OSS资源。详情请参见OSS访问域名使用规则

KmsUbsmsInvalidBid

Your account partner does not have KMS Service

  • 问题原因:请求者未开通KMS服务。

  • 解决方案:使用SSE-KMS对OSS数据进行加密前,请先开通KMS服务。详情请参见开通密钥管理服务

KmsInDebt

Current user is indebted

  • 问题原因:当您的阿里云账户进入欠费状态时,您会收到相应的通知。同时,您对密钥管理服务KMS(Key Management Service)的访问会被拒绝。

  • 解决方案:如需正常使用KMS服务时,请确保您的阿里云账户不欠费。

KmsInDebtOverdue

Current user is indebted Overdue

  • 问题原因:KMS服务欠费已逾期。

  • 解决方案:如需正常使用KMS服务,请及时续费。

WORMConfigurationLocked

The WORM Configuration is locked

  • 问题原因:合规保留策略锁定后试图删除策略。

  • 解决方案:若保留策略已提交锁定,则不允许删除此策略,且无法缩短策略保护周期,仅可以延长保护周期。详情请参见保留策略

BucketNotBelongTo

The bucket you access does not belong to you

  • 问题原因:当前用户不是目标Bucket的拥有者。

  • 解决方案:仅Bucket拥有者有权限执行此操作。

InvalidAccessKeyId

The OSS Access Key Id you provided is disabled

  • 错误原因:AccessKey ID处于禁用状态。

  • 解决方案:重新启用AccessKey。

The OSS Access Key Id you provided does not exist in our records

  • 错误原因:临时访问凭证已过期,过期后自动失效。

  • 解决方案:请使用临时访问密钥(AccessKeyId和AccessKeySecret)向App服务器申请新的临时访问凭证。具体操作,请参见获取临时访问凭证

The OSS Access Key Id contains non-acceptable characters, which accepts only alphanumeric characters[0-9a-zA-Z] and several special characters[._=]

  • 错误原因:输入了无效的AccessKey ID。

  • 解决方法:请重新输入RAM用户或者阿里云账号的AccessKey ID。更多信息,请参见创建AccessKey

SignatureDoesNotMatch

The request signature we calculated does not match the signature you provided

  • 问题原因:使用API接口或者SDK访问OSS时,客户端需要携带签名信息以供OSS服务端进行身份认证。如果服务器返回如上所示的响应,说明您在请求中提供的签名与服务端计算的不一致,导致请求被拒绝。

  • 解决方案:请参考以下步骤进行排查。

    1. 确认签名所用的AccessKey ID与AccessKey Secret是否填写正确。

      您可以使用AccessKey ID与AccessKey Secret登录ossbrowser来验证正确性。具体步骤,请参见安装并登录ossbrowser

    2. 检查签名算法是否正确。

      OSS提供两种携带签名的请求方式,分别为在Header中包含签名在URL中包含签名。关于这两种签名方式的算法说明如下:

      • 在Header中包含签名

        StringToSign = VERB + "\n"
                      + Content-MD5 + "\n" 
                      + Content-Type + "\n" 
                      + Date + "\n" 
                      + CanonicalizedOSSHeaders
                      + CanonicalizedResource
        Signature = base64(hmac-sha1(AccessKeySecret, StringToSign)
      • 在URL中包含签名

        StringToSign = VERB + "\n" 
                      + CONTENT-MD5 + "\n" 
                      + CONTENT-TYPE + "\n" 
                      + EXPIRES + "\n" 
                      + CanonicalizedOSSHeaders
                      + CanonicalizedResource
        Signature = urlencode(base64(hmac-sha1(AccessKeySecret, StringToSign)))

      如果业务场景允许,推荐您使用SDK访问OSS,免去手动计算签名的过程。具体步骤,请参见使用阿里云SDK发起请求概述

    3. 比对响应体中的StringToSign字段与您发起请求的内容是否存在差异。

      StringToSign字段表示待签字符串,即签名算法中需要使用AccessKey Secret进行加密的内容。

      请求示例如下:

      PUT /bucket/abc?acl
      Date: Wed, 24 May 2023 02:12:30 GMT
      Authorization: OSS qn6q**************:77Dv****************
      x-oss-abc: mymeta

      以上请求计算得到的待签字符串应为:

      PUT\n\n\nWed, 24 May 2023 02:12:30 GMT\nx-oss-abc:mymeta\n/bucket/abc?acl

    关于签名错误常见场景的更多信息,请参见0002-00000040

TransferAccelerationDisabled

Transfer acceleration is disabled

  • 问题原因:未开启传输加速服务。

  • 解决方案:如果您需要远距离数据传输加速、加速上传和下载GB或TB级大文件以及非静态、非热点数据下载加速等场景,请开启传输加速服务。详情请参见传输加速

InvalidSecurityToken

The security token you provided is invalid

AccessKeyIdAndSecurityTokenNotMatch

The OSS access key id and security token you provided does not match

SecurityTokenExpired

The security token you provided has expired

  • 问题原因:临时访问凭证已过期。

  • 解决方案:重新请求STS服务获取临时访问凭证。

AbnormalBucketOwnerStatus

The status of the bucket owner is abnormal

  • 问题原因:暂未向目标Bucket的所属用户提供服务。

  • 解决方案:请检查用户的阿里云账号是否已注销或因安全等原因被管控,是否因欠费原因被运营商暂停服务。

SecurityTokenNotSupported

This interface does not support security token

  • 问题原因:当前接口暂不允许通过临时访问凭证权限进行调用。

  • 解决方案:STS Token仅适用于临时授权给特定用户访问OSS资源。如果您需要将Bucket开放给他人访问,请参见访问控制概述选择适用的授权机制。

Security token is not supported in this region

  • 问题原因:暂不支持在当前地域使用STS Token。

  • 解决方案:关于哪些地域支持使用STS Token的详情,请参见接入地址

RequestTimeTooSkewed

The difference between the request time and the current time is too large

  • 问题原因:请求发起的时间超过OSS服务器当前时间15分钟。

  • 解决方案:请检查发送请求设备的系统时间,并根据时区调整到正确时间。

    发送请求的机器或设备的系统时间,调整标准如下:

    • OSS的系统时间采用GMT时间,您的设备的系统时间需要调整到GMT时间,或与其相对应的时区时间。GMT是零时区的区时,即世界标准时间。

      • Windows系统查看时区的方法:单击控制面板 > 时钟、语言和区域 > 设置日期和时间

        例如,时区栏的+08:00表示您的设备系统时区是东八区。

      • Linux或Unix系统查看时区的方法:执行date -R查看时间和时区。

        下图中的+0800表示您的设备系统时区是东八区。+0800

    • 支持在多个地域使用OSS。每个地域都使用GMT时间,您发送请求的设备系统时间也是GMT时间。

ImageDamage

The image file may be damaged

  • 问题原因:图片文件有部分信息丢失或损坏,导致无法正常识别或处理。

  • 排查方法:请确保源文件没有损坏,如有损坏请重新上传本地文件。

UserDisable

UserDisable

  • 问题原因:

    • 账号欠费或者由于安全原因,账号被禁用。

    • 未开通OSS服务。

  • 解决方案:

    • 请检查账号是否已欠费,或联系技术支持进行安全受限核查。

    • 开通OSS服务。

BucketDisable

BucketDisable

  • 问题原因:Bucket因安全原因被禁用。

  • 解决方案:请检查账号是否已欠费,或联系技术支持进行安全受限核查。

CnameDenied

The cname belongs to another user

  • 问题原因:该域名已绑定至其他Bucket。

  • 解决方案:请更换域名或通过验证域名所有权强制绑定域名,验证域名所有权会解除域名与其他Bucket的绑定关系。请参见绑定自定义域名进行排查。

InvalidObjectState

The operation is not valid for the object's state

  • 问题原因:下载归档类型Object时,以下两种情况会导致报错无效的Object状态。

    • 未提交RestoreObject请求或者上一次提交RestoreObject已超时。

    • 已提交RestoreObject请求,但数据的RestoreObject操作还没有完成。

  • 解决方案:请参见RestoreObject进行排查。