【问题标题】:Use of AWS null condition to prevent empty or missing tags?使用 AWS 空条件来防止空标签或缺失标签?
【发布时间】:2017-09-10 03:46:34
【问题描述】:

我的政策文件的目标:

  1. 如果没有适当的标签,则阻止资源创建
  2. 要求为特定标签赋予特定值(例如,env 标签必须是 dev OR stg OR prd 等)

没有。 2 按预期工作;但是,如果用户创建了一个标签为空的 EC2 实例,或者只是忘记添加它,该策略仍然允许用户创建该实例。

我尝试了 null 运算符(引用 here),但它似乎不起作用。

另一种尝试是使用匹配 aws:tag-keys 值的条件(引用 here),但它似乎仅在使用 StringLike 比较运算符检查单个值时才有效

这是 Lambda 函数关闭开发实例的先决条件。


 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "RequireEnvTags",
            "Effect": "Deny",
            "Action": [
                "ec2:RunInstances"
            ],
            "Condition": {
                "ForAnyValue:StringNotEquals": {
                    "ec2:ResourceTag/env": [
                        "dev",
                        "stg",
                        "prd",
                        "dev-noshutdown"
                    ]
                }
            },
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "RequireDataSensitivity1",
            "Effect": "Deny",
            "Action": [
                "ec2:RunInstances"
            ],
            "Condition": {
                "ForAnyValue:StringNotEquals": {
                    "ec2:ResourceTag/data-sensitivity": [
                        "public",
                        "internal",
                        "confidential",
                        "highly confidential"
                    ]
                }
            },
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "NullChecksDontSeemToWork0",
            "Effect": "Deny",
            "Action": [
                "ec2:RunInstances"
            ],
            "Condition": {
                "Null": {
                    "ec2:ResourceTag/Name": "true"
                }
            },
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "NullChecksDontSeemToWork1",
            "Effect": "Deny",
            "Action": [
                "ec2:RunInstances"
            ],
            "Condition": {
                "Null": {
                    "ec2:ResourceTag/team": "true"
                }
            },
            "Resource": [
                "*"
            ]
        }
    ]
}

【问题讨论】:

    标签: amazon-ec2 null key amazon-iam policy


    【解决方案1】:

    在处理完这个之后,我发现它只需要稍微调整一下。出于某种原因,AWS 需要明确允许同一策略文档中的操作(即使附加到同一用户的另一个策略文档明确声明了允许)才能正确实施预期的策略:

    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:*::image/ami-*",
                "arn:aws:ec2:*:ACCOUNT_ID:subnet/*",
                "arn:aws:ec2:*:ACCOUNT_ID:network-interface/*",
                "arn:aws:ec2:*:ACCOUNT_ID:volume/*",
                "arn:aws:ec2:*:ACCOUNT_ID:key-pair/*",
                "arn:aws:ec2:*:ACCOUNT_ID:security-group/*"
            ],
            "Sid": "AllowRunInstances"
        },
        {
            "Effect": "Deny",
            "Action": "ec2:RunInstances",
            "Resource": "arn:aws:ec2:*:ACCOUNT_ID:instance/*",
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/env": [
                        "dev",
                        "stg",
                        "prd",
                        "dev-noshutdown",
                        "trn",
                        "tst"
                    ]
                }
            },
            "Sid": "RequireSpecificEnvTags"
        }
    ]
    }
    

    而且它有效!

    快速说明:目前此政策似乎不允许创建 Spot 实例(因为 Spot 请求处理标签的方式不同)。我向 AWS 提交了功能请求。

    【讨论】:

    • 非常感谢,我正在寻找确切的要求,但无法编写策略。我会测试一下然后回来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2011-02-18
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多