首页 > 解决方案 > AWS IAM Bool v/s BoolIfExists

问题描述

我无法理解 AWS IAM 策略条件中 Bool 和 BoolIfExists 之间的区别。有人可以解释一下吗?

例如:“条件”:{“BoolIfExists”:{“aws:MutliFactorAuthPresent”:假}}

"Condition" : {"Bool" : {"aws:MutliFactorAuthPresent" : false}}

标签: amazon-web-servicesamazon-iam

解决方案


首先,不存在这样的条件aws:MutliFactorAuthPresent。应该是aws:MultiFactorAuthPresent。其次,aws:MultiFactorAuthPresentglobal key,所以它总是存在的。没有理由使用IfExists它。

无论如何,您需要记住 IAM 条件键(全局条件键除外)是特定于资源的。例如,ec2:InstanceType仅适用于 EC2 实例,而ec2:VolumeSize仅适用于 EBS 卷。

此外,某些 IAM 操作(例如ec2:runinstance)需要访问多个资源,例如 ec2 实例和 ebs-volumes 等。

因此,当您使用对多个资源(例如 , )操作的操作来制作 IAM 语句ec2:runinstance并且您想要创建条件时,您可能经常会遇到不匹配的情况,因为并非您的所有条件键都适用于将被访问的所有资源。

例如,条件键ec2:VolumeSize不适用于 EC2 实例,但适用于 EBS 卷。失败的原因如下

请求中不存在的密钥被视为不匹配。

因此,您可以使用...IfExists 条件运算符来确保在这种情况下没有失败。

此类 IAM 语句的示例是:

        {
            "Sid": "RunInstance",
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": "*",
            "Condition": {
                "StringLikeIfExists": {
                    "ec2:InstanceType": [
                        "t1.*",
                        "t2.*",
                        "m3.*"
             ]}}
        }

如果没有IfExists,则会出现不匹配,因为ec2:RunInstances需要访问 EBS 卷,并且ec2:InstanceType密钥不适用于卷。


推荐阅读