仅使用策略进行授权但无法找到错误提示信息中的授权项
问题描述
管理员仅使用系统策略或自定义策略给IAM用户授权。如果IAM用户执行了授权范围之外的操作,此时将会被提示没有权限执行该操作,但是管理员在策略中无法找到该提示信息中的授权项。
可能原因
该提示信息中的授权项不属于策略的授权项,而属于身份策略的授权项。
解决方法
- 可以使用身份策略进行授权,选择提示信息中的身份策略授权项进行授权即可。
- 如果只希望使用策略进行授权,需要找到身份策略授权项对应的策略授权项别名,通过在策略中授予这个身份策略授权项的别名来进行解决。
在使用第二种解决方法之前,需要先了解策略和身份策略生效逻辑,如图1所示。
显式拒绝和隐式拒绝的区别见策略和身份策略鉴权规则。当综合鉴权结果为隐式拒绝时,系统提示没有对应授权项的权限,如下所示:
"error_msg": "User: xxx is not authorized to perform action ecs:cloudServers:get on resource ecs:cn-north-5:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy:instance:zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz because no identity-based policy allows the ecs:cloudServers:get action."
当综合鉴权结果为显式拒绝时,系统提示没有对应授权项的权限,如下所示:
"error_msg": "User: xxx is not authorized to perform action ecs:cloudServers:get on resource ecs:cn-north-5:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy:instance:zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz with an explicit deny in an identity-based policy."
其中,提示信息中说明无权限的授权项以及涉及的资源,但是授权项属于策略还是身份策略并不固定,IAM会根据策略和身份策略的不同拒绝方式来进行综合判断,相关逻辑如图2所示。
因此,如果您仅使用策略授权且进行了授权范围之外的操作,那么策略和身份策略的鉴权结果都将是隐式拒绝,所以提示信息中的授权项将来源于身份策略。此时,如果您不想使用身份策略授权,但是您又在策略中找不到该授权项,则说明提示信息中的身份策略授权项有一个策略授权项别名,且该身份策略授权项与其别名不一致,可以通过在策略中授予这个身份策略授权项别名来进行解决,身份策略授权项与其别名的对应关系请详见身份策略授权参考。