如何限制Serverless用户仅删除自身创建的API Gateway部署资源?
解决方案:限制Serverless用户仅删除指定范围的API Gateway资源
方案1:标签+IAM条件键实现细粒度控制
API Gateway支持通过标签识别资源,结合IAM条件可精准限制删除权限:
- 先在
serverless.yml中配置自动为创建的API添加专属标签(比如CreatedBy: serverless-deploy-user):provider: name: aws apiGateway: tags: CreatedBy: serverless-deploy-user - 更新用户的IAM策略,仅允许删除带有指定标签的API Gateway资源:
此策略仅允许用户删除自身创建的(带指定标签)API资源,避免开放全量删除权限。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "apigateway:DELETE", "Resource": [ "arn:aws:apigateway:*::/restapis/*", "arn:aws:apigateway:*::/restapis/*/deployments/*", "arn:aws:apigateway:*::/restapis/*/resources/*", "arn:aws:apigateway:*::/restapis/*/methods/*" ], "Condition": { "StringEquals": { "aws:ResourceTag/CreatedBy": "serverless-deploy-user" } } } ] }
方案2:名称前缀+自定义验证Lambda(进阶场景)
如果需要严格基于名称前缀控制,可通过自定义Lambda做权限校验:
- 在
serverless.yml中强制API名称使用指定前缀(比如sls-prod-):provider: name: aws apiGateway: name: sls-prod-${self:service}-${self:stage} - 创建一个Lambda函数,调用API Gateway的
getRestApi接口获取目标API名称,校验是否符合前缀规则后返回授权决策。 - 更新IAM策略,将
apigateway:DELETE权限的判断委托给该Lambda:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "apigateway:DELETE", "Resource": "*", "Condition": { "StringEquals": { "lambda:FunctionArn": "arn:aws:lambda:us-east-1:XXXXXXXXXXX:function:api-delete-validator" } } } ] }
方案3:资源组+IAM访问分析器(辅助审计)
创建资源组归类所有符合前缀/标签的API资源,配合IAM Access Analyzer监控用户的删除操作,及时发现权限滥用风险。
注意:方案1是最轻量化的实现,无需额外开发,适合大多数生产场景;方案2适合对名称前缀有严格要求的场景,但需要维护验证Lambda。
内容的提问来源于stack exchange,提问作者Salim Shamim
相关产品推荐
相关产品推荐

