如何创建仅允许访问指定RDS实例的IAM策略?
问题分析与解决方案
你的IAM策略存在两个核心问题,直接导致用户能访问所有RDS实例:
- 第二个
Statement明确允许rds:DescribeDBInstances和rds:DescribeDBClusters操作作用于所有RDS实例(arn:aws:rds:*:<ACCOUNT_NUMBER>:db:*),这让用户能直接查看生产环境实例详情。 - 第一个
Statement的Action列表包含大量超出“读写操作”的冗余权限(比如创建实例、购买预留实例、创建子网组等),存在过度授权风险。
修正后的IAM策略
以下策略仅允许用户对development和staging两个运行中的RDS实例执行必要读写操作,且无法查看其他实例:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRDSOperationsOnDevStaging", "Effect": "Allow", "Action": [ "rds:DescribeDBInstances", "rds:ModifyDBInstance", "rds:RebootDBInstance", "rds:StartDBInstance", "rds:StopDBInstance", "rds:ListTagsForResource", "rds:DescribeDBLogFiles", "rds:DownloadDBLogFilePortion", "rds:DownloadCompleteDBLogFile", "rds:CreateDBSnapshot", "rds:DescribeDBSnapshots" ], "Resource": [ "arn:aws:rds:us-east-2:<ACCOUNT_NUMBER>:db:development", "arn:aws:rds:us-east-2:<ACCOUNT_NUMBER>:db:staging", "arn:aws:rds:us-east-2:<ACCOUNT_NUMBER>:snapshot:*development*", "arn:aws:rds:us-east-2:<ACCOUNT_NUMBER>:snapshot:*staging*" ], "Condition": { "StringEquals": { "rds:DBInstanceStatus": "available" } } } ] }
关键调整说明
- 移除全局Describe权限:删除原策略中允许所有实例Describe的语句,确保用户仅能看到指定的两个实例。
- 精简权限范围:仅保留与实例读写、状态管理、日志查看、快照操作相关的必要权限,剔除创建资源、全局配置等非必要操作。
- 添加运行状态限制:通过
Condition约束仅能访问状态为available(运行中)的实例,匹配你的需求。 - 扩展资源覆盖:包含两个实例相关的快照ARN,确保用户能管理对应实例的快照(不需要可直接移除这两行)。
验证步骤
- 将策略中的
<ACCOUNT_NUMBER>替换为你的AWS账号ID。 - 将修正后的策略重新附加到目标用户组。
- 使用测试用户登录AWS控制台,进入RDS服务,确认仅能看到
development和staging实例,无法查看生产实例。 - 测试实例的修改、重启等操作,确保权限正常生效。
内容的提问来源于stack exchange,提问作者Aditya Mohile
相关产品推荐
相关产品推荐

