AWS Identity and Access Management
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

IAM JSON 策略元素:Condition

Condition 元素(或 Condition)允许您指定策略生效的条件。Condition 元素是可选的。在 Condition 元素中,您可构建表达式并使用条件运算符(等于、小于等)将策略中的条件与请求中的值相匹配。例如,您可以在条件值中使用日期或请求者的 IP 地址。有些服务允许您在条件中指定其他值;例如,Amazon EC2 允许您使用对服务具有唯一性的 ec2:InstanceType 键来编写条件。

条件键名称 不区分大小写。例如,包含 aws:SourceIP 条件键等效于测试 AWS:SourceIp。条件键 是否区分大小写取决于您使用的条件运算符。例如,以下条件包含 StringEquals 运算符,以确保只有 johndoe 提出的请求才符合条件。名为 JohnDoe 的用户会被拒绝访问。

"Condition" : { "StringEquals" : { "aws:username" : "johndoe" }}

以下条件使用 StringEqualsIgnoreCase 运算符来匹配名为 johndoeJohnDoe 的用户。

"Condition" : { "StringEqualsIgnoreCase" : { "aws:username" : "johndoe" }}

某些条件键支持允许您指定键名称的一部分的键值对。示例包括 aws:RequestTag/tag-key 全局条件键、AWS KMS kms:EncryptionContext:encryption_context_key 和多个服务支持的 ResourceTag/tag-key 条件键。如果您对 Amazon EC2 等服务使用 ResourceTag/tag-key 条件键,则必须指定 tag-key 的键名称 。键名称不区分大小写。 这意味着,如果在策略的条件元素中指定 "ec2:ResourceTag:TagKey1": "Value1",该条件将匹配名为 TagKey1tagkey1 的资源标签键,但不能同时匹配两者。支持这些属性的 AWS 服务可能允许您创建多个仅大小写不同的键名称。一个示例是使用 foo=bar1Foo=bar2 标记 Amazon EC2 实例。在使用 "ec2:ResourceTag:Foo": "bar1" 等条件以允许访问该资源时,键名称匹配两个标签,但仅一个值匹配。这可能会导致意外的条件失败。

重要

最佳实践是,在命名键值对属性时,请确保您的账户成员遵循一致的命名约定。示例包括标签或 AWS KMS 加密上下文。您可以使用 aws:TagKeys 条件键(对于标记)或 kms:EncryptionContextKeys(对于 AWS KMS 加密上下文)强制实现此目的。

条件块

以下示例显示 Condition 元素的基本格式:

"Condition": { "DateGreaterThan" : { "aws:CurrentTime" : "2013-12-15T12:00:00Z" } }

请求中的值由键表示,在此示例中为 aws:CurrentTime。键值将与您指定的文本值 (2013-08-16T12:00:00Z) 或策略变量进行比较,我们稍后会解释此内容。要进行的比较类型由条件运算符指定 (此处为 DateGreaterThan)。您可以使用典型的布尔比较(例如等于、大于和小于)来创建与字符串、日期、数字等比较的条件。

在某些情况下,键可能包含多个值。例如,对 Amazon DynamoDB 的请求可能需要从表返回或更新多个属性。访问 DynamoDB 表的策略可能包含 dynamodb:Attributes 键,此键包含请求中列出的所有属性。您可以使用 Condition 元素中的集合运算符,根据策略中的允许属性列表测试请求中的多个属性。有关更多信息,请参阅 创建具有多个键或值的条件

在请求期间评估策略时,AWS 会将键替换为请求中的相应值。(在此示例中,AWS 将使用请求的日期和时间。) 将对条件进行评估以返回 true 或 false,然后再整体考虑策略是允许还是拒绝请求。

一个条件中包含多个值

一个 Condition 元素可以包含多个条件,而每个条件又可以包含多个键值对。下图对此进行了说明。

有关更多信息,请参阅 创建具有多个键或值的条件

本页内容: