

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon SNS 存取政策關鍵概念
<a name="sns-access-policy-language-key-concepts"></a>

以下章節說明使用存取原則語言所需要了解的概念。它們是以邏輯順序列出，清單的前面項目是您首先需要知道的項目。

## 權限
<a name="permissions"></a>

*許可*的概念是有關允許或不允許特定資源的一些存取類型。許可尤其遵照此形式：「A 有/無許可對適用 D 的 C 執行 B」。例如，*Jane* (A) 擁有*發佈* (B) 到 *TopicA* (C) 的許可，只要她*使用 HTTP 協定* (D)。每當 Jane 發佈到 TopicA 時，服務會檢查她是否擁有許可，以及要求是否符合許可中所述的條件。

## 陳述式
<a name="statement"></a>

*陳述式*是以存取原則語言撰寫之正式的單一許可的描述。您一律要撰寫陳述式做為較廣容器文件 (已知為*政策*) 的一部分 (請參見下一個概念)。

## 政策
<a name="policy"></a>

*政策*是做為一個或多個陳述式之容器的文件 (以存取原則語言撰寫)。例如，政策可以包含兩個陳述式：一個陳述 Jane 可以使用電子郵件通訊協定來訂閱，另一個陳述 Bob 不可發佈至主題 A。如下圖所示，相等的情況是有兩個政策，一個陳述 Jane 可以使用電子郵件通訊協定，另一個陳述 Bob 不能發佈到主題 A。

![\[比較在 Amazon SNS 中組織政策陳述式的兩種方式。在左側，單一政策 （政策 A) 包含兩個陳述式。在右側，相同的兩個陳述式會分割為兩個政策，每個政策都包含一個陳述式。圖表說明這兩種方法在許可的定義和強制執行方式方面相當。\]](http://docs.aws.amazon.com/zh_tw/sns/latest/dg/images/AccessPolicyLanguage_Statement_and_Policy.gif)


政策文件中只允許 ASCII 字元。您可以使用 `aws:SourceAccount`和 `aws:SourceOwner` 來解決您需要插入其他 AWS 服務包含非 ASCII 字元ARNs 的情況。請參閱[`aws:SourceAccount` 與 `aws:SourceOwner` 的比較](sns-access-policy-use-cases.md#source-account-versus-source-owner)之間的差異。



## 發行者
<a name="issuer"></a>

*發行者*是撰寫政策以授予資源許可的人員。發行者 （依定義） 一律是資源擁有者。 AWS 不允許 AWS 服務使用者為他們未擁有的資源建立政策。如果 John 是資源擁有者，則當 John 提交他撰寫的政策以授予該資源的許可時， 會 AWS 驗證 John 的身分。

## Principal
<a name="principal"></a>

*委託人*是接收政策中許可的一位或多位人員。委託人是陳述式「A 有許可對適用 D 的 C 執行 B」中的 A。在政策中，您可將委託人設定為「任何人」(例如，您可以指定萬用字元代表所有人員)。您可以如此做，例如，您不想要根據申請者的實際身分限制存取，而是根據其他識別特徵，如申請者的 IP 位址。

## Action
<a name="action"></a>

*動作*是委託人擁有執行許可的活動。動作是陳述式「A 有許可對適用 D 的 C 執行 B」中的 B。一般而言， 動作只是請求中的操作 AWS。例如，Jane 使用 `Action``=Subscribe` 將請求傳送到 Amazon SNS。您可以在政策中指定一個或多個動作。

## 資源
<a name="resource"></a>

*資源*是委託人請求存取的物件。資源是陳述式「A 有許可對適用 D 的 C 執行 B」中的 C。

## 條件和金鑰
<a name="conditions"></a>

*條件*是有關許可的任何限制或詳細資訊。條件是陳述式「A 有許可對適用 D 的 C 執行 B」中的 D。指定條件的政策部分可能是所有部分中最詳細和複雜的。一般條件與下列相關：
+ 日期和時間 (例如，請求必須在特定日期之前抵達)
+ IP 位址 (例如，申請者的 IP 位址必須是特定 CIDR 範圍的一部分)

*金鑰*是特定特性，即存取限制的基礎。例如，請求的日期和時間。

您同時使用*條件*和*金鑰*來表達限制。了解您實際如何實作限制的最簡單方式是使用範例：如果您想要限制存取期限為 2010 年 5 月 30 日之前，您使用稱為 `DateLessThan` 的條件。您可以使用名為 `aws:CurrentTime` 並將其值設定為 `2010-05-30T00:00:00Z` 的金鑰。 AWS 定義您可以使用的條件和金鑰。 AWS 服務本身 （例如 Amazon SQS 或 Amazon SNS) 也可能定義服務特定的金鑰。如需詳細資訊，請參閱[Amazon SNS API 許可：動作和資源參考](sns-access-policy-language-api-permissions-reference.md)。

## 要求者
<a name="requester"></a>

*請求者*是將請求傳送至 AWS 服務並要求存取特定資源的人員。請求者傳送請求到 AWS ，基本上是說：「您會允許我執行 B 到 C，其中 D 適用？」

## 評估
<a name="evaluation"></a>

*評估*是 AWS 服務用來根據適用政策判斷是否應拒絕或允許傳入請求的程序。如需評估邏輯的資訊，請參閱 [評估邏輯](sns-access-policy-language-evaluation-logic.md)。

## Effect
<a name="effect"></a>

*效用*是您想要政策陳述式在評估時間傳回的結果。您在政策中撰寫陳述式時指定此值，並且可能的值是*拒絕*和*允許*。

例如，您可以撰寫一個政策，含有*拒絕*所有來自南極之請求的陳述式 (效用=拒絕使用配置至南極之 IP 位址的請求)。或者，您可以撰寫一個政策，含有*允許*所有*不是*來自南極之請求的陳述式 (效用=允許不是來自南極的請求)。雖然兩個陳述式看似執行一樣的事情，在存取原則語言邏輯中，它們是不同的。如需詳細資訊，請參閱[評估邏輯](sns-access-policy-language-evaluation-logic.md)。

雖然您可為效用 (允許或拒絕) 指定的只有兩個可能值，卻可以在政策評估時間上有三種不同結果：*預設拒絕*、*允許*或*明確拒絕*。如需詳細資訊，請參閱下列概念和 [評估邏輯](sns-access-policy-language-evaluation-logic.md)。

## 預設拒絕
<a name="Define_SoftDeny"></a>

*預設拒絕*是沒有允許或明確拒絕之政策的預設結果。

## 允許
<a name="allow"></a>

*允許*源自於具有效用=允許的陳述式，假設所有陳述的條件都符合。範例：如果請求在 2010 年 4 月 30 日下午 1:00 前收到即允許。允許覆寫所有預設拒絕，但是明確拒絕則無法覆寫。

## 明確拒絕
<a name="Define_HardDeny"></a>

*明確拒絕*源自於具有效用=拒絕的陳述式，假設所有陳述的條件都符合。範例：拒絕所有來自南極的請求。任何來自南極的請求一律都予以拒絕，不論任何其他政策是否可能允許。