You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 01:49:50