メニュー
Amazon Simple Notification Service
開発者ガイド (API バージョン 2010-03-31)

評価論理

評価時の目標は、特定のリクエストを許可するか拒否するかを判断することです。評価論理は、以下の複数の基本ルールに従っています。

  • デフォルトでは、リソースの使用許可を求めるリクエストについては、リクエスタが自分自身である場合を除いて、拒否を適用する

  • 許可はすべてのデフォルトで拒否に優先する

  • 明示的な拒否はすべての許可に優先する

  • ポリシー評価の順序は重要ではない

以下のフローチャートと考察では、決定方法についての詳細説明を紹介します。

評価フローチャート
1

決定はデフォルトで拒否から始まります。

2

次に、エンフォースメントコードは、リクエストに適用可能なポリシーすべてを、リソース、プリンシパル、アクション、および条件に基づいて評価します。

エンフォースメントコードによるポリシー評価の順序は重要ではありません。

3

前述のすべてのポリシーにおいて、リクエストに適応する明示的な拒否のインストラクションがエンフォースメントコードによって検索されます。

仮に 1 つでも見つかった場合、エンフォースメントコードは拒否の決定を返し、プロセスを終了します (これは明示的な拒否となります。詳細については、明示的な拒否を参照してください)。

4

明示的な拒否が見つからなかった場合、リクエストに適応する許可のインストラクションがエンフォースメントコードによって検索されます。

仮に 1 つでも見つかった場合、エンフォースメントコードは許可の決定を返し、プロセスは完了します (サービスはリクエストのプロセスを継続します)。

5

許可が見つからなかった場合、最終決定は「拒否」となります (明示的な拒否または許可が見つからない場合、デフォルトで拒否としてみなされるためです。詳細については、デフォルトで拒否を参照してください)。

明示的な拒否とデフォルトで拒否の相互作用

ポリシーがリクエストに直接適用されない場合の結果は、[デフォルトで拒否] となります。例えば、ユーザーが Amazon SNS の使用をリクエストするが、トピックのポリシーではユーザーの AWS アカウントを全く参照しない場合、そのポリシーの適用結果は [デフォルトで拒否] となります。

ステートメントの条件が満たされていない場合においても、ポリシーの結果としてデフォルトで拒否となります。ステートメントのすべての条件が満たされている場合、ポリシーのエフェクトエレメントの値に基づいて、ポリシーの結果は許可または明示的な拒否のどちらかとなります。条件が満たされていない際にポリシーが行為を特定していない場合、デフォルトの結果としてデフォルトで拒否となります。

たとえば、南極大陸から来るリクエストを防ぐとします。その場合、南極大陸から来ていないリクエストにのみ許可を与えるポリシー (ポリシー A1 とする) を記述します。以下の図はポリシーについて解説しています。

 リクエストが南極大陸からのものでない限り、ポリシーによってリクエストが許可されます。

リクエストがアメリカから送られてきた場合、条件を満たしています (リクエストが南極大陸からのものでないため)。従って、そのリクエストは許可されます。リクエストが南極大陸から送られてきた場合、条件を満たしていないため、ポリシーの結果としてデフォルトで拒否となります。

以下の図のとおり、ポリシー (ポリシー A2 とする) を書き換えることにより、結果を明示的な拒否に変えることができます。南極大陸から送られてきた場合、ポリシーによってリクエストが明示的に拒否されます。

 リクエストが南極大陸からのものである限り、ポリシーによってリクエストが拒否されます。

リクエストが南極大陸から送られてきた場合、条件を満たしているため、ポリシーの結果として明示的な拒否となります。

デフォルトで拒否は、許可によって優先されますが、明示的な拒否は優先されないため、デフォルトで拒否と明示的な拒否との差異は重要となります。たとえば、リクエストが 2010 年 6 月 1 日に届いた場合、そのリクエストは許可されるという別のポリシーがあるとします。このポリシーが、南極大陸からのアクセスを制限しているポリシーと併用されている場合、全体の結果にどのような影響を及ぼすでしょうか?日付ベースのポリシー (ポリシー B とする) が前述のポリシー A1 および A2 と併用されている場合、全体の結果が比較されます。シナリオ 1 は、ポリシー A1 とポリシー B が併用されている場合、シナリオ 2 は、ポリシー A2 とポリシー B が併用されている場合です。以下の図と考察は、2010 年 6 月 1 日に南極大陸からリクエストが来た場合についての結果を示しています。

デフォルトで拒否に優先

このセクションの最初に説明したとおり、シナリオ 1 においては、ポリシー A1 はデフォルトで拒否を返します。2010 年 6 月 1 日に到着したリクエストは、当然のことながら許可されるため、ポリシー B は許可を返します。ポリシー B による許可は、ポリシー A1 のデフォルトで拒否に優先するため、結果としてリクエストは許可されます。

このセクションの最初に説明したとおり、シナリオ 2 においては、ポリシー B2 は明示的な拒否を返します。再度、ポリシー B は許可を返します。ポリシー A2 による明示的な拒否は、ポリシー B の許可に優先するため、結果としてリクエストは拒否されます。