更新时间:2026-05-28 GMT+08:00
分享

AccessDenied

AccessDenied

报错描述

没有权限执行操作。

报错原因

权限不足通常与您配置的IAM策略桶策略ACL或其他策略有关,常见的权限不足原因有如下。

  • 原因1:未正确配置IAM策略、桶策略或ACL权限。
  • 原因2:跨账号访问资源时,仅配置了IAM策略、桶策略、ACL中的一种,权限不足。
  • 原因3:被已配置的IAM策略、桶策略、VPCEP策略、所属组织的服务控制策略拒绝访问。
  • 原因4:配置了防盗链,防盗链中配置了禁止访问的黑名单。
  • 原因5:桶启用了阻止公开访问(BPA),且桶策略/对象ACL中存在公开策略。
  • 原因6:IAM缓存导致策略未生效。由于缓存的存在,配置IAM策略后一般需要10~15分钟权限才能生效。请等待10~15分钟后再试。

处理建议

注意事项

  • GetObject场景下,返回错误码受对象状态和权限配置影响,详情如下:
    • 如果对象存在,校验GetObject权限,有权限正常访问,没有权限访问报错返回403。
    • 如果对象不存在,返回错误码情况如下:

      GetObject(下载对象)权限

      ListBucket(列举桶内对象)权限

      返回报错

      404

      403

      403

AccessDenied. User: <user> is not authorized to perform: <action>on resource: <resource> because no <policy_type> policy allows the <action_type> action.

报错描述

本次访问未得到明确授权。

报错原因

用户<user>没有权限操作资源<resource>,因为<policy_type>类型策略没有明确授权<action>操作。

参数

参数说明

user

参数解释:

鉴权失败的IAM用户,即该IAM用户发起的访问请求因为鉴权失败被拒绝。

格式为如下,其中domainid是华为账号ID,userid是IAM用户ID,agency-name是委托名,session-name是会话名,idp-id是身份提供商ID。

  • IAM用户:iam::domainid:user:userid
  • IAM委托或信任会话:sts::domainid:assumed-agency:agency-name/session-name
  • 虚拟联邦用户:sts::domainid:external-user:idp-id/session-name

取值范围:

resource

参数解释:

资源URN,即对该资源的访问请求因为鉴权失败被拒绝。

取值范围:

  • 访问桶时,格式为:obs:::bucket:BucketName
  • 访问对象时,格式为:obs:::object:BucketName/ObjectName

其中BucketName 为访问的桶名,ObjectName为访问的对象名。

policy_type

参数解释:

策略类型,即鉴权失败的原因是该类型的策略没有明确授予权限。

取值范围:

  • identity-based:IAM策略
  • resource-based:资源策略,包括桶策略或ACL策略
  • session:会话策略,即VPCEP策略
  • service control:服务控制策略

action

参数解释:

授权项,对应具体的操作,即鉴权失败的原因是该操作项缺失授权。

取值范围:

参见权限和授权项,每个授权项均对应一个桶或对象操作。

处理建议

请使用中响应消息中指定的策略(对应policy_type参数),为用户(对应user参数)增加指定资源(对应resource参数)的对应权限(对应action参数)。如果想进一步获取更多权限报错信息,可参考解密鉴权失败原因API解析响应体中的EncodedAuthorizationMessage字段。

样例

IAM用户(用户ID为user001)上传对象(对象名为obj1)到桶(桶名为bucket01),请求由于没有明确授权导致403。

响应消息如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
HTTP/1.1 403 Forbidden
Server: OBS
Content-Type: application/xml
Content-Length: 2893
Date: date
x-reserved-indicator: 2408

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Error>
  <Code>AccessDenied</Code>
  <Message>Access Denied. User: iam::domainid001:user:user001 is not authorized to perform: obs:object:putobject on resource: obs:::object:bucket01%2Fobj1 because no resource-based policy allows the obs:object:putobject action.</Message>1
  <EncodedAuthorizationMessage>Egpjbi1ub3J0aC......Ijrgcqjht9R4CeGDmJw==</EncodedAuthorizationMessage>
  <RequestId>0000019C41B3EA7C530608451D1F0447</RequestId>
  <HostId>Z9v+cC1sRnaWw6x0vi8pxxYA0YVnKxbYHUPAFpnxkX8sLV44u5b02Z+ailn2wCnR</HostId>
</Error>

根据响应消息可以看出,账号domainid001下的用户user001没有权限上传资源bucket01/obj1,原因是没有任何资源策略(桶策略或ACL)授权这个操作。

解决方式:

由桶bucket01的桶拥有者添加一条桶策略,给用户user001明确授予putObject权限。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
{
    "Statement": [
        {
            "Sid": "allow_put",
            "Action": [
                "PutObject"
            ],
            "Effect": "Allow",
            "Resource": "bucket01/*",
            "Principal": {
                "ID": [
                    "domain/domainid001:user/user001"
                ]
            }
        }
    ]
}

AccessDenied. User: <user> is not authorized to perform: <action> on resource: <resource> with an explicit deny in a/an/the <policy_type> policy.

报错描述

本次访问被明确拒绝。

报错原因

用户<user>没有权限操作资源<resource>,因为<policy_type>类型策略明确拒绝<action>操作。

参数

参数说明

user

参数解释:

鉴权失败的IAM用户,即该IAM用户发起的访问请求因为鉴权失败被拒绝。

格式为:iam::domainid:user/userid,其中domainid是华为账号ID,userid是IAM用户ID。

取值范围:

resource

参数解释:

资源URN,即对该资源的访问请求因为鉴权失败被拒绝。

取值范围:

访问桶时,格式为:obs:::bucket:BucketName

访问对象时,格式为:obs:::object:BucketName/ObjectName

其中BucketName 为访问的桶名,ObjectName为访问的对象名。

policy_type

参数解释:

策略类型,即鉴权失败的原因是该类型的策略没有明确授予权限。

取值范围:

  • identity-based:IAM策略
  • resource-based:资源策略,明确拒绝场景仅包含桶策略,不包含ACL策略
  • session:会话策略,即VPCEP策略
  • service control:服务控制策略

action

参数解释:

授权项,对应具体的操作,即鉴权失败的原因是该操作项缺失授权。

取值范围:

参见权限和授权项,每个授权项均对应一个桶或对象操作。

处理建议

排查响应消息中指定的策略(对应policy_type参数),是否Deny(拒绝)了指定用户(对应user参数)对指定资源(对应resource参数)的某项操作权限(对应action参数)。如果存在,请将Deny修改为Allow。如果想进一步获取更多权限报错信息,可参考解密鉴权失败原因API解析响应体中的EncodedAuthorizationMessage字段。

样例

IAM用户(用户ID为user001)下载桶(桶名为bucket01)中的对象(对象名为obj1),由于被桶策略设置为Deny拒绝,导致鉴权失败报错403。

响应消息如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
HTTP/1.1 403 Forbidden
Server: OBS
Content-Type: application/xml
Content-Length: 2893
Date: date
x-reserved-indicator: 2408

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Error>
  <Code>AccessDenied</Code>
  <Message>Access Denied. User: iam::domainid001:user:user001 is not authorized to perform: obs:object:putobject on resource: obs:::object:bucket01%2Fobj1 with an explicit deny in a resource-based policy.</Message>
  <EncodedAuthorizationMessage>Egpjbi1ub3J....Ppu/agFgw==</EncodedAuthorizationMessage>
  <RequestId>0000019C41C77CB55306084530520492</RequestId>
  <HostId>Z9v+cC1sRnaWw6x0vi8pxxYA0YVnKxbYHUPAFpnxkX8sLV44u5b02Z+ailn2wCnR</HostId>
</Error>

根据响应消息可以看出,账号domainid001下的用户user001没有权限下载资源bucket01/obj1,原因是桶策略明确拒绝了这个操作。

解决方式:

由桶bucket01的桶拥有者修改桶策略,将针对用户user001的GetObject的授权,从Deny修改为Allow。

由bucket01的所有者修改桶策略,去掉策略中明确拒绝的部分,例如:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
{
    "Statement": [
        {
            "Sid": "deny_put",
            "Action": [
                "GetObject"
            ],
            "Effect": "Allow",
            "Resource": "bucket01/obj1",
            "Principal": {
                "ID": [
                    "domain/domainid001:user/user001"
                ]
            }
        }
    ]
}

Invalid according to Policy: Policy Condition failed.

报错描述

Post请求中的Policy策略未满足。

报错原因

Post请求表单安全策略中的条件校验失败。

处理建议

检查Post请求表单中policy的"conditions"里指定的内容与请求实际携带的是否一致。了解更多表单安全策略相关内容请参考条件元素:Conditions

Invalid according to Policy: Policy expired.

报错描述

Post请求中的Policy策略已过期。

报错原因

Post请求表单安全策略已过期。

处理建议

检查Post请求表单中policy的"expiration"字段是否错误。

Anonymous access is forbidden for this operation.

报错描述

操作禁止匿名访问。

报错原因

匿名用户无法执行这个操作。例如匿名用户无法进行列举桶操作。

处理建议

以非匿名方式进行操作,即在请求中携带用户身份信息进行操作,详情参考OBS签名机制概述

custom domain name can not be visit directly, please use custom domain name.

报错描述

当前域名无法直接访问。

报错原因

使用的域名不是可用域名。(非自定义域名访问且域名在禁用域名名单中)

处理建议

请使用自定义域名或其他域名进行访问。

OBS authentication requires a valid Date or x-obs-date header

报错描述

拒绝访问,请求没有携带日期头域或者头域格式错误。

报错原因

API请求消息中,需要携带日期相关头域(Datex-obs-date二选一),未携带则报错403。

处理建议

携带正确的日期日期头域,示例如下:

  • 使用Date携带日期:
    PUT / HTTP/1.1
    User-Agent: curl/7.29.0
    Host: examplebucket.obs.cn-north-4.myhuaweicloud.com
    Accept: */*
    Date: Wed, 02 Apr 2025 09:54:15 GMT
    Authorization: OBS H4IPJX0TQTHTHEBQQCEC:75/Y4Ng1izvzc1nTGxpMXTE6ynw=
    Content-Length: 157
    <CreateBucketConfiguration xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/"> 
        <Location>cn-north-4</Location>
    </CreateBucketConfiguration>
  • 使用x-obs-date携带日期:
    PUT / HTTP/1.1
    User-Agent: curl/7.29.0
    Host: examplebucket.obs.cn-north-4.myhuaweicloud.com
    Accept: */*
    x-obs-date: Wed, 02 Apr 2025 09:54:15 GMT
    Authorization: OBS H4IPJX0TQTHTHEBQQCEC:75/Y4Ng1izvzc1nTGxpMXTE6ynw=
    Content-Length: 157
    <CreateBucketConfiguration xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/"> 
        <Location>cn-north-4</Location>
    </CreateBucketConfiguration>

参数说明如下:

头域

参数类型

是否必选

描述

Date

String

没有x-obs-date时必选

参数解释:

请求发起端的日期和时间,例如:Wed, 02 Apr 2025 09:54:15 GMT

约束限制:

如果是匿名请求或者消息头中带了x-obs-date字段,则可以不带该字段,其他情况下必选。与x-obs-date同时存在时,以x-obs-date为准。

取值范围:

不涉及

默认取值:

不涉及

x-obs-date

String

没有Date时必选

参数解释:

请求发起端的日期和时间,例如:Wed, 02 Apr 2025 09:54:15 GMT

约束限制:

如果是匿名请求或者消息头中带了Date字段,则可以不带该字段,其他情况下必选。与Date同时存在时,以x-obs-date为准。

取值范围:

不涉及

默认取值:

不涉及

The object you specified is immutable, can not delete

报错描述

您指定的对象不可变,无法删除。

报错原因

对象受WORM策略保护,保留期到期前无法被删除。

处理建议

WORM保留期到期后,再执行删除操作。

Action PutBucketPolicy on bucket: <BucketName> is restricted because public policies are blocked by the BlockPublicPolicy block public access setting

报错描述

配置桶策略操作(PutBucketPolicy)在存储桶 BucketName上被拒绝,因为BlockPublicPolicy配置禁止设置含公开语义的桶策略。

报错原因

当桶开启BPA功能的BlockPublicPolicy配置后,如果桶策略包含公开语义,那么配置桶策略操作会被拒绝。

处理建议

修改桶策略,使其不包含公开语义。

Action PutBucketAcl on bucket: <BucketName> is restricted because public access control lists (ACLs) are blocked by the BlockPublicAcls block public access setting

报错描述

配置桶ACL操作(PutBucketAcl)在存储桶 BucketName上被拒绝,因为BlockPublicAcls配置禁止设置含公开语义的桶ACL。

报错原因

当桶开启BPA功能的BlockPublicAcls配置后,如果桶ACL包含公开语义,那么配置桶ACL操作会被拒绝。

处理建议

修改桶ACL,使其不包含公开语义。

Action PutObject on object: <BucketName/ObjectName> is restricted because public access control lists (ACLs) are blocked by the BlockPublicAcls block public access setting

报错描述

向桶BucketName中上传对象ObjectName被拒绝,因为BlockPublicAcls配置禁止设置含公共语义的对象ACL。

报错原因

当桶开启BPA功能的BlockPublicAcls配置后,如果上传对象时配置的对象ACL包含公开语义,那么操作会被拒绝。

处理建议

修改对象ACL,使其不包含公开语义。

相关文档