默认情况下,有更新操作权限的账号可以对资源栈的所有可更新资源进行更新。但是在更新资源栈时,我们会希望一些资源栈的资源在更新中不会被意外更新或者删除。
堆栈策略是一个JSON格式的文档,该文档定义可对指定资源执行的更新操作。堆栈策略仅仅在更新过程中起作用,每个资源栈只能定义一个堆栈策略。
堆栈策略示例:
{
"Statement" : [
{
"Effect" : "Allow",
"Action" : "Update:*",
"Principal": "*",
"Resource" : "*"
},
{
"Effect" : "Deny",
"Action" : "Update:*",
"Principal": "*",
"Resource" : "LogicalResourceId/MyEcsInstance"
}
]
}
部分语法解释:
Effect:(必选)
支持Allow和Deny,Deny覆盖Allow。如果配置了堆栈策略,所有资源所有操作默认Deny。
Action:(Action或NotAction必选一)
可选值如下:
- Update:Modify 指定在对资源应用更改期间不会中断或有某些中断的更新操作。所有资源都保持其物理 ID。
- Update:Delete 指定删除资源的更新操作。从堆栈模板中完全删除资源的更新都需要此操作。
- Update:* 指定所有更新操作。星号是通配符,代表所有更新操作。
Principal:(必选)
只能取值*
Resource:(Resource或NotResource必选一)
可选值如下:
- *
- LogicalResourceId/
<pattern>
取值可以是字符串,也可以是字符串列表
在控制台设置堆栈策略
一、新建资源栈时设置:
- 打开资源编排(ROS)控制台 https://ros.console.aliyun.com
- 选择新建资源栈
- 在第二步启动栈,在高级配置选项卡中勾选使用堆栈策略,并输入JSON格式的堆栈策略文本
二、更新资源栈时可以设置临时堆栈更新策略:
- 选择已创建的资源栈,右侧操作中选择更新堆栈。
- 在第二步启动栈,在高级配置选项卡中选择使用临时堆栈策略,并输入JSON格式的堆栈策略文本
三、修改堆栈策略
- 选择已创建的资源栈,点击名称进入资源栈详情
- 选择策略选项,点击修改更新策略
- 输入新的堆栈更新策略
堆栈策略相关API
-
CreateStack 设置堆栈策略
- StackPolicy
-
UpdateStack 设置堆栈策略,设置临时堆栈策略
- StackPolicy
- StackPolicyDuringUpdate
- GetStackPolicy 获取堆栈策略
- SetStackPolicy 设置堆栈策略