求可阻止创建无指定后缀资源的AWS IAM策略
正确的AWS IAM策略配置方案
原策略的核心问题
- 逻辑完全颠倒:你写的策略是拒绝创建符合命名规范(以
-mySuffix结尾)的资源,和需求正好相反。 - 条件键错误:
*:ResourceArn不是有效的IAM条件键,应该使用全局条件键aws:ResourceArn,或者对应服务的特定条件键。
通用型策略(覆盖多数支持ARN匹配的服务)
这个策略通过匹配资源ARN的结尾,拒绝所有名称不以-mySuffix结尾的资源创建请求:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "*:Create*" ], "Resource": "*", "Condition": { "StringNotLike": { "aws:ResourceArn": "*-mySuffix" } }, "Sid": "DenyCreateNonCompliantResources" } ] }
注意:部分服务的Create动作不支持aws:ResourceArn条件匹配(比如部分全局服务或特殊资源类型),这时需要补充特定服务的配置。
针对常见服务的精确配置(可靠性更高)
如果通用策略存在覆盖不全的问题,可以针对S3、SQS、DynamoDB等核心服务单独配置,利用服务专属的条件键精准匹配资源名称:
{ "Version": "2012-10-17", "Statement": [ // S3桶 { "Effect": "Deny", "Action": "s3:CreateBucket", "Resource": "*", "Condition": { "StringNotLike": { "s3:BucketName": "*-mySuffix" } }, "Sid": "DenyCreateNonCompliantS3Bucket" }, // DynamoDB表 { "Effect": "Deny", "Action": "dynamodb:CreateTable", "Resource": "*", "Condition": { "StringNotLike": { "dynamodb:TableName": "*-mySuffix" } }, "Sid": "DenyCreateNonCompliantDynamoDBTable" }, // SQS队列 { "Effect": "Deny", "Action": "sqs:CreateQueue", "Resource": "*", "Condition": { "StringNotLike": { "sqs:QueueName": "*-mySuffix" } }, "Sid": "DenyCreateNonCompliantSQSQueue" }, // EC2实例(通过实例名称标签匹配) { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringNotLike": { "aws:RequestTag/Name": "*-mySuffix" } }, "Sid": "DenyCreateNonCompliantEC2Instance" } ] }
说明:
- EC2实例没有直接的创建时名称参数,需要通过强制
Name标签符合规范来实现,同时建议配合标签策略确保标签合规。 - 可以根据公司实际使用的服务,继续添加对应的条目,每个服务的条件键可参考AWS官方文档中的服务特定条件键列表。
额外注意事项
- 测试策略:正式应用前,一定要通过IAM Access Analyzer或实际测试验证策略效果,避免误拦截合法请求或漏拦截违规请求。
- 权限边界:如果使用IAM角色,建议将该策略设置为角色的权限边界,确保即使角色有其他允许权限,也无法绕过命名规范限制。
- 例外情况:如果有部分资源不需要遵循命名规范,可以在策略中添加
NotResource或Condition例外规则。
内容的提问来源于stack exchange,提问作者Sierra6
相关产品推荐
相关产品推荐

