【问题标题】:Enforce Tag Value强制执行标记值
【发布时间】:2017-10-23 20:51:09
【问题描述】:

我正在尝试一种策略来预定义标签值,以便如果您在启动时不创建所需的标签及其值,则不应创建实例,即实例应该具有成本中心和部门作为标签和值应该是 115 和产品。然后只有我们应该能够启动实例。有人可以帮助我制定这项政策吗?

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*",
        "ec2:GetConsole*"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:RunInstances"
      ],
      "Resource": [
        "arn:aws:ec2:region::image/*",
        "arn:aws:ec2:region:account:subnet/*",
        "arn:aws:ec2:region:account:network-interface/*",
        "arn:aws:ec2:region:account:security-group/*",
        "arn:aws:ec2:region:account:key-pair/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
        "arn:aws:ec2:region:account:instance/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/costcenter": "115",
          "aws:RequestTag/dept": "prod"
        },
        "ForAllValues:StringEquals": {
          "aws:TagKeys": [
            "costcenter",
            "dept"
          ]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags"
      ],
      "Resource": "arn:aws:ec2:region:account:*/*",
      "Condition": {
        "StringEquals": {
          "ec2:CreateAction": "RunInstances"
        }
      }
    }
  ]
}

【问题讨论】:

标签: amazon-web-services amazon-ec2 amazon


【解决方案1】:

你可以试试这个示例,如果只有一个标签存在,它会拒绝操作,你可以用你的标签修改代码多个块状态为多个策略:

{
    "Sid": "AllowLaunchOnlyWithRequiredTags1",
    "Effect": "Deny",
    "Action": "ec2:RunInstances",
    "Resource": "arn:aws:ec2:us-east-1:accountid:instance/*",
    "Condition": {
        "Null": {"aws:RequestTag/costcenter": "true"}
    }
},
{
    "Sid": "AllowLaunchOnlyWithRequiredTags2",
    "Effect": "Deny",
    "Action": "ec2:RunInstances",
    "Resource": "arn:aws:ec2:us-east-1:accountid:instance/*",
    "Condition": {
        "Null": {"aws:RequestTag/stack": "true"}
    }
}

此外,您可以将标签执行列为:

"Condition": {
    "StringEquals": {
      "aws:RequestTag/costcenter": "115",
      "aws:RequestTag/stack": "prod"
     },
     "ForAllValues:StringEquals": {
         "aws:TagKeys": ["costcenter","stack"]
     }
   }

According to AWS Documents for ForAllValues

ForAllValues 限定符要求列出所有请求的值 在政策中

另一种方式您可以使用StringLikeStringNotLike 执行某些操作,但如果适合您,则仅限于通配符。

类似的东西:

"Statement": [
{
  "Sid": "DenyMissingTags",
  "Effect": "Deny",
  "Action": "ec2:RunInstances",
  "Resource": "arn:aws:ec2:us-east-1:accountid:instance/*",
  "Condition": {
    "StringLike": [
      "aws:RequestTag/costcenter": "*",
      "aws:RequestTag/stack": "*"
      ]
    }
  }
]

Refer this

【讨论】:

  • 我正在尝试使用值强制标记上面的第一个块可以强制使用标记,而不管值如何。当我尝试使用第二个块时,它没有采用该条件来限制值
  • 这是2部分代码的示例,它是强制具有2个值的,您需要根据您的需要进行修改
  • 是的,伙计..!!我知道我需要修改我的意思是,即使我们没有那些强制的 2values 标签,它也允许启动实例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 2018-01-20
  • 2011-01-21
相关资源
最近更新 更多