【问题标题】:CloudFormation condition for stack policy堆栈策略的 CloudFormation 条件
【发布时间】:2017-01-25 05:24:07
【问题描述】:

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

鉴于 AWS 文档中的简单 CF 模板:

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

我应该把以下条件放在哪里:

"Condition" : "CreateProdResources"

谢谢

【问题讨论】:

标签: amazon-cloudformation


【解决方案1】:

Condition实际上有三种不同、互不兼容的类型,你需要区分:

  1. CloudFormation Resource Conditions。由堆栈模板的 Conditions 部分中的项目和引用条件的资源中的相应 Condition 键定义。
  2. IAM Policy Condition 元素/块。允许任何 IAM 策略根据指定条件进一步限制权限。
  3. CloudFormation Stack Policy Condition 元素。允许堆栈策略仅适用于特定类型的资源。

您不能将#1-type CloudFormation 资源条件(例如CreateProdResources,在堆栈模板examples 中根据输入参数的值有条件地创建资源)添加到堆栈策略。这些只能在您的模板中定义。

您也不能在堆栈策略中使用#2-type IAM 策略条件;但是,您可以将 IAM 策略用作单独的安全层,以限制对从 CloudFormation 创建/更新/删除资源的访问。请参阅 AWS CloudFormation Security Best Practices 博客文章,详细了解如何使用 IAM 策略和堆栈策略来提高安全性。

您只能将#3 类型条件添加到 CloudFormation 堆栈策略,以使特定操作仅适用于条件指定的资源类型。例如,设置堆栈策略禁止更新任何 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" : "*"
  }
  ]
}

【讨论】:

    猜你喜欢
    • 2021-10-12
    • 2018-11-23
    • 2021-03-09
    • 2018-06-05
    • 2016-06-24
    • 1970-01-01
    • 2014-02-24
    • 2021-07-31
    • 1970-01-01
    相关资源
    最近更新 更多