单值和多值上下文键
单值键和多值上下文键之间的差异取决于请求上下文中的值数量,而不是策略条件中的值数量。
-
单值上下文键在请求上下文中最多有一个值。例如,当您在 AWS 中标记资源时,每个资源标签都存储为键值对。由于资源标签键只能具有单个标签值,因此 aws:ResourceTag/tag-key 为单值上下文键。请勿将条件集合运算符用于单值上下文键。
-
多值上下文键在请求上下文中可以有多个值。例如,当您在 AWS 中标记资源时,您可以在请求中包含多个标签键值对。因此,aws:TagKeys 是多值上下文键。多值上下文键需要条件条件集合运算符。
重要
多值上下文键需要条件条件集合运算符。请勿将条件集合运算符 ForAllValues
或 ForAnyValue
用于单值上下文键。要了解有关条件集合运算符的更多信息,请参阅 多值上下文键。
单值和多值分类作为值类型包含在 AWS 全局条件上下文密钥 主题每个条件上下文键的描述中。服务授权参考对多值上下文键使用不同的值类型分类,使用 ArrayOf
前缀后跟条件运算符类别类型,如 ArrayOfString
或 ArrayOfARN
。
例如,一个请求最多可以来自一个 VPC 端点,因此 aws:SourceVpce 是单值上下文键。由于服务可以有多个属于该服务的服务主体名称,因此 aws:PrincipalServiceNamesList 是多值上下文键。
您可以使用任何可用的单值上下文键作为策略变量,但不能使用多值上下文键作为策略变量。有关策略变量的更多信息,请参阅 IAM policy 元素:变量和标签。
使用包含键值对的上下文键时,请务必注意,尽管可以有多个标签键值,但每个
只能有一个值。因此,tag-key
aws:RequestTag
和 aws:ResourceTag
都是单值上下文键。使用带有单值上下文键的条件集合运算符可能会导致过于宽容的策略。
多值上下文键
要将条件上下文键与具有多个键值的请求上下文键进行比较,必须使用 ForAllValues
或 ForAnyValue
集合运算符。这些集合运算符用于比较两组值,例如请求中的标签集和策略条件中的标签集。
限定词 ForAllValues
和 ForAnyValue
为条件运算符添加了集合运算功能,从而使您可以针对策略条件中的多个上下文键值测试具有多个值的请求上下文键。此外,如果在策略中包含带有通配符或变量的多值字符串上下文键,则还必须使用 StringLike
条件运算符。如果有多个条件键值,则必须像数组一样用方括号括起来,例如 "Key2":["Value2A", "Value2B"]
。
-
ForAllValues
– 此限定词测试请求集的每个成员的值是否为条件上下文键集的子集。如果请求中的每个上下文键值均与策略中的至少一个上下文键值匹配,则条件返回true
。如果请求中没有上下文键或者上下文键值解析为空数据集(如空字符串),则也会返回true
。为了防止缺失的上下文键或具有空值的上下文键评估为true
,您可以在策略中包含具有false
值的 Null 条件运算符,以检查上下文键是否存在且其值不为空。重要
如果将
ForAllValues
与Allow
效果一起使用,请小心谨慎,因为如果请求上下文中意外出现缺失的上下文键或具有空值的上下文键,则策略可能会过于宽松。您可以在策略中包含具有false
值的Null
条件运算符,以检查上下文键是否存在且其值不为空。有关示例,请参阅根据标签键控制访问。 -
ForAnyValue
– 此限定此测试请求上下文键值集中的至少一个成员是否与策略条件中上下文键值集中的至少一个成员匹配。如果请求中的任何一个上下文键值与策略中的任何一个上下文键值匹配,则上下文键返回true
。对于没有匹配的上下文键或空数据集,条件返回false
。
注意
单值键和多值上下文键之间的差异取决于请求上下文中的值数量,而不是策略条件中的值数量。