我有办法为堆栈策略创建条件吗?
给出AWS文档中的简单CF模板:
{ "Statement" : [ { "Effect" : "Deny", "Action" : "Update:*", "Principal": "*", "Resource" : "LogicalResourceId/ProductionDatabase" }, { "Effect" : "Allow", "Action" : "Update:*", "Principal": "*", "Resource" : "*" } ] }
我应该在哪里提出以下条件:
"Condition" : "CreateProdResources"
由于
答案 0 :(得分:4)
您需要区分三种不同的,互不兼容的类型的Condition
:
Conditions
部分中的项目和引用该条件的资源中的相应Condition
键定义。Condition
元素/块。允许任何IAM策略根据指定的条件进一步限制权限。Condition
元素。允许堆栈策略仅应用于特定类型的资源。您无法在堆栈策略中添加#1类型的CloudFormation资源条件(例如CreateProdResources
,它在堆栈模板examples中有条件地根据输入参数的值创建资源)。这些只能在您的模板中定义。
您也不能在堆栈策略中使用#2类型的IAM策略条件;但是,您可以将IAM策略用作单独的安全层,以限制从CloudFormation创建/更新/删除资源的访问权限。有关如何使用IAM策略和堆栈策略的更多详细信息,请参阅AWS CloudFormation Security Best Practices博客文章,以获得更高的安全性。
您只能向CloudFormation堆栈策略添加#3类型的条件,以使特定的Action仅适用于Condition指定的资源类型。例如,要设置不允许更新任何AWS::EC2::Instance
或AWS::RDS::DBInstance
资源的堆栈政策:
{
"Statement" : [
{
"Effect" : "Deny",
"Principal" : "*",
"Action" : "Update:*",
"Resource" : "*",
"Condition" : {
"StringEquals" : {
"ResourceType" : ["AWS::EC2::Instance", "AWS::RDS::DBInstance"]
}
}
},
{
"Effect" : "Allow",
"Principal" : "*",
"Action" : "Update:*",
"Resource" : "*"
}
]
}