IAM策略添加Condition块后失效问题排查求助
IAM策略条件块失效问题排查与解决
我要限制特定IAM角色只能访问标记为dev环境的RDS资源,但给策略加了Condition块后直接失效,把Condition删掉就正常用了。目前用的IAM策略代码是这样的:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "RdsAccess", "Effect": "Allow", "Action": "rds:*", "Resource": "*", "Condition": { "StringEquals": { "rds:db-tag/Environment": "dev" } } } ] }
问题原因
- 先确认RDS实例有没有正确加
Environment=dev的标签,标签的键值要完全匹配,大小写也不能错。 - 不是所有RDS操作都支持
rds:db-tag/Environment这个条件键,比如像rds:DescribeDBEngines这类全局操作,根本不关联具体的RDS实例,没法用实例标签限制,这类操作会因为条件不满足被拒绝,最后整个策略看起来就像“失效”了。 - 当Resource设成
*的时候,策略会给所有RDS操作都套上这个条件,但很多操作匹配不上标签条件,结果就是本该允许的操作也被拦了。
解决办法
- 拆分策略语句:把需要标签限制的实例级操作和不需要的全局操作分开写:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "RdsInstanceLevelAccess", "Effect": "Allow", "Action": [ "rds:DescribeDBInstances", "rds:StartDBInstance", "rds:StopDBInstance" // 自己按需加其他需要标签限制的实例级操作 ], "Resource": "arn:aws:rds:*:*:db:*", "Condition": { "StringEquals": { "rds:db-tag/Environment": "dev" } } }, { "Sid": "RdsGlobalAccess", "Effect": "Allow", "Action": [ "rds:DescribeDBEngines", "rds:DescribeDBParameterGroups" // 自己按需加不需要标签限制的全局操作 ], "Resource": "*" } ] }
- 核对标签:检查RDS实例的
Environment标签键是不是完全一致,别把大小写搞混了,比如environment和Environment是两个不同的标签键。 - 缩小资源范围:尽量写具体的RDS资源ARN,别用
*,减少不必要的操作匹配。
内容的提问来源于stack exchange,提问作者Vehbi Restelica
相关产品推荐
相关产品推荐

