首页 > 解决方案 > 请求具有任何值的密钥的 IAM 策略条件

问题描述

我有一个有效的 IAM 策略,仅当给定标签存在时才允许用户创建 EBS 设备,现在它具有一组预定义的输入列表,但我的要求是我要检查键,而不是值,所以问题是:可以我们有一个可以接受任何用户输入值的键吗?

如果使用标签键,"aws:RequestTag/Environment": ["dev", "stage", "prod"]那么它可以工作,但我需要一个解决方案,我可以在创建 EBS 时传递任何值,并且应该被 IAM 策略接受。

"Condition": {
    "StringEquals": {
        "aws:RequestTag/owner": ["*"],
        "aws:RequestTag/Environment": ["dev", "stage", "prod" ]
    },
    "ForAllValues:StringEquals": {
        "aws:TagKeys": ["Environment]
    },
    "ForAnyValue:StringEquals": {
        "aws:TagKeys": ["owner"]
    }
}

我们如何才能接受给定键的任何值?

标签: amazon-web-servicesamazon-iam

解决方案


具有任何值的标记 = 拒绝没有此标记的请求。

因此,如果标签不存在,您可以添加另一个语句来拒绝请求。

Null 条件运算符检查在授权时是否存在条件键。Null 条件中的键可以将 true 或 false 作为其值:

  1. True:键不存在,因此表达式的计算结果为 null 并且条件返回 true。
  2. False:键存在,且其值不为空。条件失败。

所以你需要三个语句来实现这个逻辑:

  • 明确允许该操作。
  • 如果标签丢失,则拒绝该操作。
  • 如果标签为空,则拒绝该操作。
{
   "Sid": "AllowTheActionHere",
   ...
},
{
    "Sid": "EnforceOwnerTag",
    ...
    "Effect": "Deny",
    "Condition": {
        "Null": {"aws:RequestTag/owner": "true"}
    }
},
{
    "Sid": "PreventEmptyOwnerTag",
    ...
    "Effect": "Deny",
    "Condition": {
        "StringLike": {
            "aws:RequestTag/owner": ""
        }
    }
}


推荐阅读