单值和多值上下文键 - Amazon Identity and Access Management
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

单值和多值上下文键

单值键和多值上下文键之间的差异取决于请求上下文中的值数量,而不是策略条件中的值数量。

  • 单值上下文键在请求上下文中最多有一个值。例如,您可以在 Amazon 中标记资源。资源标签存储为标签键值对。资源标签键可以具有单个标签值。因此,aws:ResourceTag/tag-key 是单值上下文键。请勿将条件集合运算符用于单值上下文键。

  • 多值上下文键在请求上下文中可以有多个值。例如,您可以在 Amazon 中标记资源并在请求中包含多个标签键值对。因此,aws:TagKeys 是多值上下文键。多值上下文键需要条件条件集合运算符。

重要

多值上下文键需要条件条件集合运算符。请勿将条件集合运算符 ForAllValues 或 ForAnyValue 用于单值上下文键。要了解有关条件集合运算符的更多信息,请参阅 多值上下文键

单值多值分类作为值类型包含在 Amazon 全局条件上下文密钥 主题每个条件上下文键的描述中。服务授权参考对多值上下文键使用不同的值类型分类,格式如下:ArrayOf 前缀后跟条件运算符类别类型。例如,ArrayOfStringArrayOfARN

您可以使用任何可用的单值上下文键作为策略变量。您不能使用多值上下文键作为策略变量。有关策略变量的更多信息,请参阅 IAM policy 元素:变量和标签

多值上下文键需要条件集合运算符 ForAllValuesForAnyValue。包含键值对的上下文键(例如 aws:RequestTag/tag-key 和 aws:ResourceTag/tag-key)可能会导致混乱,因为可能有多个 tag-key 值。但是因为每一个 tag-key 只能有一个值,aws:RequestTagaws:ResourceTag 都是单值上下文键。使用带有单值上下文键的条件集合运算符可能会导致过于宽容的策略。

多值上下文键

要将条件上下文键与具有多个键值的请求上下文键进行比较,必须使用 ForAllValues 或 ForAnyValue 集合运算符。这些集合运算符用于比较两组值,例如请求中的标签集和策略条件中的标签集。

限定词 ForAllValuesForAnyValue 为条件运算符添加了集合运算功能,以便您可以针对策略条件中的多个上下文键值测试具有多个值的请求上下文键。此外,如果在策略中包含带有通配符或变量的多值字符串上下文键,则还必须使用 StringLike 条件运算符。如果有多个条件键值,则必须像数组一样用方括号括起来。例如,"Key2":["Value2A", "Value2B"]

  • ForAllValues – 此限定词测试请求集的每个成员的值是否为条件上下文键集的子集。如果请求中的每个上下文键值均与策略中的至少一个上下文键值匹配,则条件返回 true。如果请求中没有上下文键或者上下文键值解析为空数据集(如空字符串),则也会返回 true。为了防止缺失的上下文键或具有空值的上下文键评估为 true,您可以在策略中包含具有 false 值的 Null 条件运算符,以检查上下文键是否存在且其值不为空。

    重要

    如果将 ForAllValues 与 Allow 效果一起使用,请小心谨慎,因为如果请求上下文中意外出现缺失的上下文键或具有空值的上下文键,则策略可能会过于宽松。您可以在策略中包含具有 false 值的 Null 条件运算符,以检查上下文键是否存在且其值不为空。有关示例,请参阅 根据标签键控制访问

  • ForAnyValue – 此限定此测试请求上下文键值集中的至少一个成员是否与策略条件中上下文键值集中的至少一个成员匹配。如果请求中的任何一个上下文键值与策略中的任何一个上下文键值匹配,则上下文键返回 true。对于没有匹配的上下文键或空数据集,条件返回 false。

注意

单值键和多值上下文键之间的差异取决于请求上下文中的值数量,而不是策略条件中的值数量。