

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon SQS 访问策略语言中显式拒绝和默认拒绝之间的关系
<a name="sqs-creating-custom-policies-relationships-between-explicit-default-denials"></a>

如果 Amazon SQS 策略不直接应用于请求，则该请求会导致 *[默认拒绝](sqs-creating-custom-policies-key-concepts.md#default-deny)*。例如，如果用户请求使用 Amazon SQS 的权限，但应用于该用户的唯一策略可使用 DynamoDB，则该请求会导致 **default-deny**。

如果未能满足语句中的某个条件，则该请求的结果为**默认拒绝**。如果满足了语句中的所有条件，那么根据策略中 *[效果](sqs-creating-custom-policies-key-concepts.md#effect)* 元素的值，该请求的结果可能为 *[允许](sqs-creating-custom-policies-key-concepts.md#allow)* 或 *[显式拒绝](sqs-creating-custom-policies-key-concepts.md#explicit-deny)*。如果策略没有指定如何处理未满足某个条件的情况，那么在这种情况下默认结果为**默认拒绝**。例如，您想要阻止来自南极洲的请求。您编写了策略 A1，只要请求不是来自于南极洲，就接受请求。下图说明了 Amazon SQS 策略。

![在策略 A1 中，“Effect”为“Allow”，“Condition”为“if request is not from Antarctica”。](http://docs.aws.amazon.com/zh_cn/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-security-custom-policy-allow-request-if-not-from-antarctica.png)


如果用户从美国发出请求，那么条件已经满足（该请求不是来自南极洲），则该请求的结果是**允许**。但是，如果用户从南极洲发出请求，那么条件未满足，该请求的默认结果为**默认拒绝**。您可以编写策略 A2，显式拒绝来自南极洲的请求，这样结果就变为**显式拒绝**。下列示意图说明了该策略。

![在策略 A2 中，“Effect”为“Deny”，“Condition”为“if request is from Antarctica”。](http://docs.aws.amazon.com/zh_cn/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-security-custom-policy-explicitly-deny-request-if-from-antarctica.png)


如果用户从南极洲发出请求，那么条件已经满足，则该请求的结果为**显式拒绝**。

**默认拒绝**和**显式拒绝**之间的区别很重要，因为**允许**可以覆盖前者但不能覆盖后者。例如，策略 B 允许在 2010 年 6 月 1 日到达的请求。下图比较了将此策略与策略 A1 和策略 A2 进行组合的情况。

![情景 1 和方案 2 的 side-by-side比较。](http://docs.aws.amazon.com/zh_cn/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-security-custom-policy-compare-allow-request-deny-request-policies-override.png)


在场景 1 中，策略 A1 的结果为**默认拒绝**，策略 B 的结果为**允许**，因为该策略允许 2010 年 6 月 1 日传入的请求。策略 B 返回的**允许**结果将覆盖策略 A1 的**默认拒绝**结果，因此，请求获得允许。

在场景 2 中，策略 B2 的结果为**显式拒绝**，策略 B 的结果为**允许**。从策略 A2 发出的**显式拒绝**将覆盖从策略 B 发出的**允许**，因此该请求会被拒绝。