堆栈策略的CloudFormation条件

时间:2015-11-25 16:13:07

标签: amazon-cloudformation

我有办法为堆栈策略创建条件吗?

给出AWS文档中的简单CF模板:

{
"Statement" : [
{
  "Effect" : "Deny",
  "Action" : "Update:*",
  "Principal": "*",
  "Resource" : "LogicalResourceId/ProductionDatabase"
},
{
  "Effect" : "Allow",
  "Action" : "Update:*",
  "Principal": "*",
  "Resource" : "*"
}
]
}

我应该在哪里提出以下条件:

"Condition" : "CreateProdResources"

由于

1 个答案:

答案 0 :(得分:4)

您需要区分三种不同的,互不兼容的类型的Condition

  1. CloudFormation Resource Conditions。由堆栈模板的Conditions部分中的项目和引用该条件的资源中的相应Condition键定义。
  2. IAM Policy Condition元素/块。允许任何IAM策略根据指定的条件进一步限制权限。
  3. CloudFormation Stack Policy Condition元素。允许堆栈策略仅应用于特定类型的资源。
  4. 您无法在堆栈策略中添加#1类型的CloudFormation资源条件(例如CreateProdResources,它在堆栈模板examples中有条件地根据输入参数的值创建资源)。这些只能在您的模板中定义。

    您也不能在堆栈策略中使用#2类型的IAM策略条件;但是,您可以将IAM策略用作单独的安全层,以限制从CloudFormation创建/更新/删除资源的访问权限。有关如何使用IAM策略和堆栈策略的更多详细信息,请参阅AWS CloudFormation Security Best Practices博客文章,以获得更高的安全性。

    您只能向CloudFormation堆栈策略添加#3类型的条件,以使特定的Action仅适用于Condition指定的资源类型。例如,要设置不允许更新任何AWS::EC2::InstanceAWS::RDS::DBInstance资源的堆栈政策:

    {
      "Statement" : [
      {
        "Effect" : "Deny",
        "Principal" : "*",
        "Action" : "Update:*",
        "Resource" : "*",
        "Condition" : {
          "StringEquals" : {
            "ResourceType" : ["AWS::EC2::Instance", "AWS::RDS::DBInstance"]
          }
        }
      },
      {
        "Effect" : "Allow",
        "Principal" : "*",
        "Action" : "Update:*",
        "Resource" : "*"
      }
      ]
    }