给用户配置OBS系统权限或桶读写权限后仍然提示拒绝访问,请检查相应权限
原因
- 给用户配置了OBS系统权限
在IAM中给用户配置了OBS ReadOnlyAccess、OBS OperateAccess、OBS Buckets Viewer等系统权限后,实际上只允许执行一部分OBS操作,例如OBS OperateAccess可以执行列举桶、获取桶基本信息、获取桶元数据、列举对象(不包含多版本)、上传对象、下载对象、删除对象、获取对象ACL操作。
- 给用户配置了桶读写权限
通过桶策略给用户配置了桶的读写权限后,实际上授予的权限如下:
- GetObject:下载对象
- GetObjectVersion:下载多版本对象
- PutObject:上传对象
- DeleteObject:删除对象
- DeleteObjectVersion:删除多版本对象
上述每一个权限对应一个OBS功能接口,用户使用API或SDK可以正常调用这些接口。但是通过控制台或者客户端工具(OBS Browser+)登录时,加载桶列表、桶概览等页面时会调用获取桶列表(ListAllMyBuckets)等接口,加载对象列表时会调用列举桶内对象(ListBucket)等接口,其他页面也会调用其他的OBS接口。如果授予的权限中没有包含这些接口,则会提示“拒绝访问,请检查相应权限”,或者“不允许在请求的资源上执行此操作”。
例如桶概览页面会通过接口查看桶的生命周期规则、CORS规则等是否已经配置,如图1,而预置的系统权限并未包含这些操作权限。
解决方法
即使界面出现了权限不足的提示,也并不影响已有的权限生效。通过API或SDK可以正常调用相关接口。
对于控制台或客户端工具(OBS Browser+)而言,如果配置了OBS OperateAccess系统权限或桶读写操作,是可以进行对象上传、下载等操作的。
如果希望消除报错提示,需要在IAM中配置OBS自定义策略,授予更多的OBS权限,并将IAM用户加入到对应的用户组中。
关于OBS OperateAccess和OBS ReadOnlyAccess在控制台列举对象失败的问题说明
由于OBS提供的系统策略OBS OperateAccess和OBS ReadOnlyAccess中预置的列举权限只有列举对象(obs:bucket:ListBucket),而不包含列举多版本对象(obs:bucket:ListBucketVersions)。
所以当桶中存在多版本对象时,IAM用户通过控制台进入桶对象列表可能出现无法列举出对象的情况。此时需要额外授予列举多版本对象的权限(obs:bucket:ListBucketVersions)。