【问题标题】:EC2 resourcetag with colon in aws在aws中带有冒号的EC2资源标签
【发布时间】:2013-11-10 21:13:58
【问题描述】:

我正在尝试限制对自动缩放组创建的任何实例的 EC2 操作。该组自动创建带有键“aws:autoscaling:groupName”和值“my_as_group”的标签。所以通常我会这样制定我的政策:

    {
  "Effect": "Allow",
  "Action": [
            "ec2:DescribeInstances", 
            "ec2:DescribeImages",
            "ec2:DescribeKeyPairs", 
            "ec2:DescribeSecurityGroups",
            "ec2:DescribeAvailabilityZones",
            "ec2:RunInstances", 
            "ec2:TerminateInstances",
            "ec2:StopInstances", 
            "ec2:StartInstances"
  ],
  "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*", // Yes, in reality I put my real id...
  "Condition": {
    "StringEquals": {
      "ec2:ResourceTag/aws:autoscaling:groupName": "my_as_group"
    }
  }
}

但在 aws.amazon.com 的 IAM 界面中,却显示错误:

我们在处理您的请求时遇到以下错误:

动作/条件只能包含一个冒号。

经过一些测试,我认为它不想在标签键中使用冒号...但是标签键是由亚马逊自动创建的。

知道如何将这些操作限制为 as 组创建的实例吗?

谢谢

【问题讨论】:

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


    【解决方案1】:

    由于以“aws:”开头的标签仅限于 AWS 内部使用(如 herehere 所述),如果错误表明您无法按照您的意愿执行操作会更有意义根据标签中的“aws:”做。

    但是,由于情况并非如此,而且错误更为普遍,这似乎与记录的行为不一致。根据以下陈述,您正在尝试做的事情似乎是合理的,这些陈述来自我在上一段中链接到的页面:

    约束:标签键区分大小写,最多接受 127 个 Unicode 字符。不能以 aws 开头:

    最大密钥长度 - 127 个 Unicode 字符

    标签对 Amazon EC2 没有任何语义意义,被严格解释为字符串

    如果: 在政策文档中的ec2:resourcetag 中无效,那么这些陈述中的某些内容是不准确或不完整的。

    当然,根据自动缩放添加的自动生成标签,文档中的下一句似乎也不正确:

    此外,标签不会自动分配给您的资源。

    哎呀,除了在这种情况下它们似乎是,并且文档应该这样说,或者应该更明确地说“aws:”标签可能是,但不是其他标签。

    如果文档准确和完整会很好,所以我建议您在 AWS 论坛中发布您的问题,看看您是否得到 AWS 人员的任何关注(假设您没有付费支持合同,在在这种情况下,我假设您会使用它)。

    另一方面,如果 aws:* 标签超出了我们可以访问的范围,我想我们不能抱怨太多,因为它们显然是“do not count against your limit of 10 tags per instance”。

    可能的解决方法

    也许您在论坛上发帖会很幸运,但如果是这样,您可能仍然会发现这些标签在设计上或由于政策声明的限制而无法访问,如果是这种情况,那么看起来像这样可能是解决方法:

    您可以定义一个自定义标签,用于指示该实例是自动扩展组的一部分,然后配置自动扩展组以将标签应用于您的实例。

    您现在最多可以向任何 Auto Scaling 组添加 10 个标签。如果愿意,您还可以将标签传播到从您的组启动的 EC2 实例。

    ——http://aws.typepad.com/aws/2012/01/new-tagging-features-for-auto-scaling-groups.html

    这听起来很有希望。

    您可以选择将 Auto Scaling 组标签传播到由 Auto Scaling 启动的 Amazon EC2 实例。您传播到 Amazon EC2 实例的 Auto Scaling 组标签可以像任何其他 Amazon EC2 实例标签一样使用[...]

    当您将 PropagateAtLaunch 标志与 as-create-or-update-tags 命令一起使用时,您创建的标签将应用于 Auto Scaling 组启动的新 Amazon EC2 实例。同样,当您修改标签时,更新的版本将应用于更改后 Auto Scaling 组启动的新实例。使用 as-create-or-update-tags 命令创建或修改的标签将不适用于在您使用该命令时已在运行的实例。

    ——http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/ASTagging.html

    只要您不担心您的自定义标签可能会被恶意应用到另一个实例,作为受影响的凭据获得对另一个资源的不适当控制的一种方式,这会处理该实例(尽管这意味着恶意方已经可以访问资源,所以可能不是问题)。

    这不会帮助您处理连接到 EC2 实例的卷,但自动缩放似乎并没有为这些卷添加标签,所以也许这可以满足您的需要。

    然而,最后一个想法是,我不确定您希望允许的某些操作是否与实例上的标签相关联...DescribeImagesec2:DescribeKeyPairs, ec2:DescribeSecurityGroups, ec2:DescribeAvailabilityZones, 据我所知,ec2:DescribeAvailabilityZones 不会与“实例”资源相关。

    【讨论】:

    • 很棒的答案,谢谢。最后一句话,是的,我可以这样做,但由于亚马逊自动给我一个标签,我认为使用它是个好主意:)
    猜你喜欢
    • 2019-06-30
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多