AWS IAM策略配置:如何实现仅携带指定标签才可创建任意资源
问题排查及修复方案
核心故障原因
- 条件逻辑配置错误:你使用的
ForAllValues:StringLike条件在请求完全不带任何标签时,会因为aws:TagKeys参数为空集合,默认判定条件成立,直接放行无标签的创建请求,完全没有起到强制带标签的效果。 - 操作覆盖不完整:多数AWS服务的资源创建、标签编辑是独立API(比如EC2的
RunInstances和CreateTags是两个独立动作),当前策略没有对独立的标签操作做限制,也没有覆盖你需要的Redshift服务权限。 - 条件匹配规则偏差:当前规则仅要求所有传入的标签键只能是
ProjectCode,不允许同时带其他自定义标签,不符合常规使用需求。
修复后的策略示例
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCreateWithMandatoryTag", "Effect": "Allow", "Action": [ "ec2:RunInstances", "rds:CreateDBInstance", "redshift:CreateCluster" // 可按需补充其他服务的创建类操作 ], "Resource": "*", "Condition": { "Null": { "aws:RequestTag/ProjectCode": "false" } } }, { "Sid": "AllowTagOperationsWithProtectedTag", "Effect": "Allow", "Action": [ "ec2:CreateTags", "ec2:DeleteTags", "rds:AddTagsToResource", "rds:RemoveTagsFromResource", "redshift:CreateTags", "redshift:DeleteTags" ], "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": [ "ProjectCode", // 可按需补充其他允许使用的标签键 "Name", "Environment" ] }, "Null": { "aws:ResourceTag/ProjectCode": "false" } } } ] }
策略说明
- 第一部分规则限制所有资源创建操作,必须在请求中传入
ProjectCode标签才会被允许,不带标签直接创建会被拒绝 - 第二部分规则限制标签编辑操作:不允许删除已有的
ProjectCode标签,仅允许添加规则中指定的合法标签键 - 你可以根据业务需求,补充其他需要管控的服务操作到Action列表中
验证建议
配置完成后,先使用IAM策略模拟器,分别测试不带标签创建EC2、带ProjectCode标签创建EC2两种场景,确认规则生效后再正式投入使用。
内容的提问来源于stack exchange,提问作者Kamlesh Gallani
相关产品推荐
相关产品推荐

