开发者社区> 问答> 正文

如何实现OSS 权限问题及排查?



OSS 403问题


OSS 403指OSS返回的HTTP状态码是403,可以简单的理解为没有权限访问,服务器收到请求但拒绝提供服务。OSS 403错误及原因如下表:

错误错误码错误信息错误原因解决办法
SignatureDoesNotMatchErrorCode: SignatureDoesNotMatchErrorMessage: The request signature we calculated does not match the signature you provided. Check your key and signing method.客户端和服务计算的签名不符OSS 403错误及排查
PostObjectErrorCode: AccessDeniedErrorMessage: Invalid according to Policy: Policy expired.ErrorCode: AccessDenied ErrorMessage: Invalid according to Policy: Policy Condition failed: …PostObject中Policy无效PostObject
CorsErrorCode: AccessForbiddenErrorMessage: 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.CORS没有配置或配置不对OSS设置跨域访问
RefersErrorCode: AccessDeniedErrorMessage: You are denied by bucket referer policy.请检查Bucket的Referer配置OSS防盗链
AccessDenied见以下权限常见错误无权限下面详细讲述

其中,权限问题是403错误的一部分。权限问题的错误是AccessDenied。以下将详细讲述这类错误。

权限常见错误


权限问题是当前用户没有指定操作的权限。OSS返回的错误及原因见下表:
序号错误原因
1ErrorCode: AccessDeniedErrorMessage: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.Bucket和Endpoint不符
2ErrorCode: AccessDeniedErrorMessage: You are forbidden to list buckets.无listBuckets权限
3ErrorCode: AccessDeniedErrorMessage: You do not have write acl permission on this object无setObjectAcl权限
4ErrorCode: AccessDeniedErrorMessage: You do not have read acl permission on this object.无getObjectAcl权限
5ErrorCode: AccessDeniedErrorMessage: The bucket you visit is not belong to you.子用户没有Bucket管理的权限(如getBucketAcl CreateBucket、deleteBucket setBucketReferer、 getBucketReferer等)
6ErrorCode: AccessDeniedErrorMessage: You have no right to access this object because of bucket acl.子用户/临时用户没有访问Object的权限(如putObject getObject、appendObject deleteObject、postObject)等
7ErrorCode: AccessDeniedErrorMessage: Access denied by authorizer’s policy.临时用户访问无权限,该临时用户角色扮演指定授权策略,该授权策略无权限
8ErrorCode: AccessDeniedErrorMessage: You have no right to access this object.子用户/临时用户无当前操作权限(如initiateMultipartUpload等)


权限问题排查


辨别密钥是主用户、子用户还是临时用户的。

  • 是否是主用户的密钥:
    需要到 控制台 查看AccessKeyID是否存在,如果存在说明是主用户。

  • 查看子用户的权限,即该子用户的授权策略:
    控制台[backcolor=transparent]访问控制>[backcolor=transparent]用户管理>[backcolor=transparent]管理>[backcolor=transparent]用户详情>[backcolor=transparent]用户AccessKey,查看子用户的AccessKeyID,并找到对应的子用户;在控制台[backcolor=transparent]访问控制>[backcolor=transparent]用户管理>[backcolor=transparent]管理([backcolor=transparent]操作下方)>[backcolor=transparent]用户授权策略>[backcolor=transparent]个人授权策略/[backcolor=transparent]加入组的授权策略>查看子账户的权限。

  • 查看临时用户的权限,即对应角色的权限:
    临时用户的密钥的AccessKeyID,以STS开头比较好辨认,如“STS.MpsSonrqGM8bGjR6CRKNMoHXe”。 在控制台[backcolor=transparent]访问控制>[backcolor=transparent]角色管理>[backcolor=transparent]管理([backcolor=transparent]操作下方)>[backcolor=transparent]角色授权策略> 查看权限。

访问权限错误流程如下图:

权限检查流程如下:
  1. 列出需要的权限和资源。
  2. 检查Action是否有需要的操作。
  3. Resource是否是需要的操作对象。
  4. Effect是否是Allow而不是Deny。
  5. Condition是否正确。

如果检查无法发现错误,需要调试步骤如下:
  1. 如果有Condition的话先将其去掉。
  2. Effect中去除Deny。
  3. Resource换成”Resource”: “*”。
  4. Action换成”Action”: “oss:*”。

提示:

展开
收起
青衫无名 2017-10-23 14:34:17 8493 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
OSS运维进阶实战手册 立即下载
《OSS运维基础实战手册》 立即下载
OSS运维基础实战手册 立即下载