如何在AWS SAM应用中定义栈策略?以禁止删除数据留存表为例
在AWS SAM应用中定义栈策略的方法
直接通过SAM CLI deploy命令传递参数
SAM CLI的deploy命令原生支持--stack-policy-body和--stack-policy-url选项,用法和AWS CLI的create-stack完全一致:
- 从本地JSON文件加载策略:
sam deploy --stack-policy-body file://stack-policy.json - 从S3等远程URL加载策略:
sam deploy --stack-policy-url https://s3.amazonaws.com/your-bucket/policies/stack-protection.json
配置到samconfig.toml文件(持久化参数)
如果不想每次部署都手动输入参数,可以把栈策略配置写到项目根目录的samconfig.toml中,在对应的环境参数块下添加:
[default.deploy.parameters] stack_policy_body = "file://stack-policy.json" # 或者用URL # stack_policy_url = "https://s3.amazonaws.com/your-bucket/policies/stack-protection.json"
后续执行sam deploy时会自动读取这个配置。
示例:保护DynamoDB表不被销毁的栈策略
针对数据留存需求,你可以定义如下栈策略,禁止指定的DynamoDB表被删除或通过栈更新移除:
{ "Statement": [ { "Effect": "Allow", "Action": "cloudformation:*", "Resource": "*" }, { "Effect": "Deny", "Action": [ "cloudformation:DeleteStack", "cloudformation:UpdateStack" ], "Resource": "*", "Condition": { "StringEquals": { "cloudformation:ResourceType": "AWS::DynamoDB::Table" }, "StringLike": { "cloudformation:LogicalResourceId": "ProtectedDataTable*" } } } ] }
注意事项
- 栈策略仅在栈创建或更新时生效,若需修改已有栈的策略,需使用AWS CLI命令:
aws cloudformation set-stack-policy --stack-name your-sam-stack --stack-policy-body file://new-policy.json - 更新栈时传递栈策略参数会覆盖原有策略,需谨慎操作
- 确保策略中的
LogicalResourceId或ResourceType精准匹配你要保护的资源
内容的提问来源于stack exchange,提问作者Eric Scherrer
相关产品推荐
相关产品推荐

