如何在AWS中无需标签基于资源名称前缀配置访问权限限制
RDS前缀名权限限制实现方案
你之前的策略配置不生效,核心是两点错误:一是Resource字段未使用标准ARN格式,IAM会把非ARN格式字符串里的*识别为普通字面字符;二是部分RDS操作不支持资源级权限,无法直接通过资源字段做限制。
支持资源级权限的操作配置
IAM原生支持*作为任意长度字符串的通配符(不需要写正则,IAM采用简化的字符串匹配规则,不是标准正则匹配模式),只需要在Resource字段填写对应资源的完整ARN,带前缀通配的匹配规则就可以正常生效。
RDS实例的标准ARN格式为arn:aws:rds:<区域标识>:<账号ID>:db:<实例名称>,匹配所有以new-database-change-开头的RDS实例的配置示例如下:
{ "Sid": "AllowRDSOperationOnMatchInstances", "Effect": "Allow", "Action": [ "rds:AddTagsToResource", "rds:RestoreDBClusterToPointInTime", "rds-db:connect", "rds:DeleteDBInstance" ], "Resource": "arn:aws:rds:*:*:db:new-database-change-*" }
ARN中各通配符的作用:
- 第一个
*:匹配所有AWS区域,如果需要限定到指定区域,替换成对应区域码(如cn-north-1、us-east-1)即可 - 第二个
*:匹配所有AWS账号ID,需要限定到自有账号时,直接替换成你的12位账号ID即可 - 末尾的
new-database-change-*:匹配所有名称以指定字符串开头的RDS实例
如果需要同时匹配Aurora集群,只需要在Resource字段中新增集群对应的ARN条目arn:aws:rds:*:*:cluster:new-database-change-*即可,整个配置完全不需要依赖资源标签。
不支持资源级权限的操作处理
你之前策略里列出的rds:DescribeDBInstances、rds:DescribeDBClusters、rds:CreateDBInstance三个操作属于不支持资源级权限的类型,不能直接通过Resource字段限定访问范围,需要单独处理:
rds:DescribeDBInstances、rds:DescribeDBClusters属于列表查询类操作,这类操作必须设置Resource: "*"才能正常调用,IAM本身不支持对这类接口的返回结果做过滤,无法直接限制用户只能查询到指定前缀的实例。如果需要做可见范围限制,只能通过自定义权限边界或者上层应用的逻辑做过滤,IAM策略原生不支持该能力。rds:CreateDBInstance操作同样需要设置Resource: "*",但可以通过IAM条件键,强制用户创建的实例名称必须符合前缀要求,配置示例:
{ "Sid": "RestrictCreatedInstanceNamePrefix", "Effect": "Allow", "Action": "rds:CreateDBInstance", "Resource": "*", "Condition": { "StringLike": { "rds:DatabaseName": "new-database-change-*" } } }
添加该条件后,用户调用创建实例接口时,如果传入的实例名不符合new-database-change-前缀要求,请求会被直接拒绝。
内容的提问来源于stack exchange,提问作者Shravan Ram
相关产品推荐
相关产品推荐

