在身份策略中使用NotAction时权限不符合预期怎么办
问题描述
管理员在IAM新版控制台创建Deny语句的身份策略时,使用NotAction排除A云服务授权项之后,发现B云服务的授权项并没有被Deny限制。例如组织中成员账号拥有所有云服务权限时,管理员在创建Deny语句身份策略时使用NotAction排除VPC服务授权项后,发现EIP服务授权项没有被Deny限制。对应的身份策略示例如下:
{ "Version": "5.0", "Statement": [{ "Effect": "Deny", "NotAction": [ "VPC:*:*" ] }] }
可能原因
A云服务的某些授权项是B云服务某些授权项的别名。例如,EIP服务为兼容旧版控制台权限,会将VPC服务某些授权项作为EIP服务某些授权项的别名。在身份策略鉴权时,存在别名关系的授权项代表的含义是相同的,因此VPC授权项也会被当做EIP授权项,在配置NotAction排除VPC授权项后,实际上EIP授权项也被排除了,因此EIP授权项最终未被Deny限制。
解决方法
针对如上场景,如果用户需要Allow A云服务且同时Deny B云服务的授权项,那么在使用NotAction排除A云服务授权项时,还需要单独添加一条明确的Deny语句来拒绝B云服务的授权项。例如用户通常需要允许VPC且拒绝EIP的授权项,那么可以在Deny时通过NotAction来排除VPC授权项,然后再单独添加一条明确的Deny语句来拒绝EIP授权项。对应的身份策略示例如下:
{ "Version": "5.0", "Statement": [{ "Effect": "Deny", "NotAction": [ "VPC:*:*" ] }, { "Effect": "Deny", "Action": [ "EIP:*:*" ] } ] }