AWS Identity and Access Management
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

IAM JSON 策略元素: Condition

Condition 元素 (或 Condition) 允许您指定策略生效的条件。Condition 元素是可选的。在 Condition 元素中,您使用条件运算符 (等于、小于等) 构建表达式以使策略中的条件与请求中的值相匹配。条件值可包括日期、时间、请求者的 IP 地址、请求来源的 ARN、用户名称、用户 ID 以及请求者的用户代理。有些服务允许您在条件中指定其他值;例如,Amazon S3 允许您使用对服务具有唯一性的 s3:VersionId 键来编写条件。

条件块

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

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

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

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

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

一个条件中包含多个值

一个 Condition 元素可以包含多个条件,而每个条件又可以包含多个键值对。下图对此进行了说明。除非另行指定,否则所有键均可有多个值。

如果您希望仅在某个特定的数值 foo 等于 A 或 B,且另一个数值 bar 等于 C 时,John 才使用资源。您应创建如下图所示的条件块。

 包含两个 NumericEquals 条件的条件块

假如您还想要限制 John 在 2009 年 1 月 1 日之后的访问。您需要添加另一条件 DateGreaterThan,日期为 2009 年 1 月 1 日。这时,条件块将与下图类似。

 条件块包含 DateGreaterThan 条件

若存在多个条件运算符,或存在附加到单一条件运算符的多个键,则采用逻辑 AND 评估这些条件。如果单个条件运算符包含一个键的多个值,则采用逻辑 OR 评估该条件运算符。必须满足所有条件运算符才能做出允许或显式拒绝决定。如果任一条件运算符没有满足,那么结果为拒绝。

 条件块显示了如何将 AND 和 OR 应用于多个值

如上所述,AWS 已对条件运算符和键 (例如 aws:CurrentTime) 进行了预定义。单独的 AWS 产品也可定义特定服务的键。

例如,假设您允许用户 John 在下列条件下访问您的 Amazon SQS 队列:

  • 时间为 2013 年 8 月 16 日中午 12:00 之后

  • 时间为 2013 年 8 月 16 日下午 3:00 之前

  • 请求 (IAM 或 SQS) 或消息 (SNS) 需从 IP 地址范围为 192.0.2.0 至 192.0.2.255 203.0.113.0 至 203.0.113.255 发出。

在您的条件块中包含三个独立的条件运算符,而 John 必须满足所有三个条件运算符才能访问您的队列、主题或资源。

条件块在您策略中的样子如下所示。采用 OR 对 aws:SourceIp 的两个值将进行评估。将采用 AND 对三个独立的条件运算符进行评估。

"Condition" : { "DateGreaterThan" : { "aws:CurrentTime" : "2013-08-16T12:00:00Z" }, "DateLessThan": { "aws:CurrentTime" : "2013-08-16T15:00:00Z" }, "IpAddress" : { "aws:SourceIp" : ["192.0.2.0/24", "203.0.113.0/24"] } }

最后,在某些情况下,策略中的个别键可能包含多个值,您可以使用条件集合运算符 并根据策略中列出的一个或多个值测试这些多值键。有关更多信息,请参阅 创建测试多个键值的条件 (集合运算)

本页内容: