如何创建仅允许IAM用户部署指定ACU范围RDS Aurora Serverless实例的AWS IAM策略
实现方案说明
该需求有成熟的原生IAM配置方案可以落地,不需要额外部署自定义服务,核心是利用RDS服务支持的ACU配置类专用条件键做请求参数校验。
核心配置逻辑
你之前只用到了数据库引擎的匹配规则,但RDS的API操作支持的条件键远不止引擎类型:
- 针对Aurora Serverless v2(当前主流的Serverless版本),创建、修改集群时传入的最小、最大ACU参数,分别对应专属条件键
rds:ServerlessV2MinCapacity、rds:ServerlessV2MaxCapacity - 针对已停止新建入口的旧版Aurora Serverless v1,对应的条件键为
rds:MinACU、rds:MaxACU,配置逻辑完全一致 - ACU值为浮点型数值,需要使用数值类的条件运算符做范围匹配,而非字符串匹配类规则
策略优化注意事项
原策略存在两个会导致权限绕过的漏洞,配置时需要修正:
- 不要直接授予全量
rds:*权限,全权限会让用户无限制调整集群所有配置,容易绕过ACU范围限制 - 仅对创建集群的动作加限制是不够的,必须同时对修改集群的动作加相同的条件规则,否则用户可以先创建符合ACU要求的集群,再通过修改操作把ACU调整到超范围值
参考策略示例
以限制用户仅能创建最小ACU不低于2、最大ACU不高于8的Aurora PostgreSQL Serverless v2集群为例,可使用如下策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds:CreateDBCluster", "rds:ModifyDBCluster" ], "Resource": "*", "Condition": { "StringEquals": { "rds:DatabaseEngine": "aurora-postgresql" }, "NumericGreaterThanEquals": { "rds:ServerlessV2MinCapacity": "2" }, "NumericLessThanEquals": { "rds:ServerlessV2MaxCapacity": "8" }, "NumericGreaterThanEquals": { "rds:ServerlessV2MaxCapacity": "2" } } } ] }
配置完成后,用户发起创建/修改Aurora集群的请求时,不管是通过控制台、CLI还是SDK发起的调用,IAM都会直接校验请求里传入的ACU范围参数,不符合规则的请求会被直接拦截。
内容的提问来源于stack exchange,提问作者Szymon
相关产品推荐
相关产品推荐

