amazon-web-services - AWS IAM Bool v/s BoolIfExists
问题描述
我无法理解 AWS IAM 策略条件中 Bool 和 BoolIfExists 之间的区别。有人可以解释一下吗?
例如:“条件”:{“BoolIfExists”:{“aws:MutliFactorAuthPresent”:假}}
"Condition" : {"Bool" : {"aws:MutliFactorAuthPresent" : false}}
解决方案
首先,不存在这样的条件aws:MutliFactorAuthPresent
。应该是aws:MultiFactorAuthPresent
。其次,aws:MultiFactorAuthPresent
是global 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
密钥不适用于卷。
推荐阅读
- asp.net - dotnet 核心中可能需要 ViewModel 的枚举?
- android - kotlin 和 android:是否有必要取消以前设置的回调?
- javascript - 如何从 npm 模块导入 css 文件 - webcomponent
- yocto - 如何让spi连接mcp251x和yocto?
- java - 如何使edittext适合两个按钮?
- python-sphinx - 在主文档中包含指令
- powerbi - 当我在本地计算机上使用 Power BI Desktop 处理 Power BI 报表时,数据存储在哪里?
- bash - 源命令输出行
- python - Python setup.py 未添加 console_script
- c - 有人可以告诉为什么“-'0'”在以下函数的第五行完成