

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

# Amazon SQS 中的身分和存取管理
<a name="security-iam"></a>

AWS Identity and Access Management (IAM) 是一種 AWS 服務 ，可協助管理員安全地控制對 AWS 資源的存取。IAM 管理員可控制哪些人員可*進行身分驗證* (登入) 並*獲得授權* (具有許可) 以使用 Amazon SQS 資源。IAM 是您可以免費使用 AWS 服務 的 。

## 目標對象
<a name="security_iam_audience"></a>

如何使用 AWS Identity and Access Management (IAM) 會因您的角色而有所不同：
+ **服務使用者** — 若無法存取某些功能，請向管理員申請所需許可 (請參閱 [對 Amazon Simple Queue Service 身分和存取進行故障診斷](security_iam_troubleshoot.md))
+ **服務管理員** — 負責設定使用者存取權並提交相關許可請求 (請參閱 [如何搭配 IAM 使用 Amazon Simple Queue Service](security_iam_service-with-iam.md))
+ **IAM 管理員** — 撰寫政策以管理存取控制 (請參閱 [政策最佳實務](sqs-basic-examples-of-iam-policies.md#security_iam_id-based-policy-examples))

## 使用身分驗證
<a name="security_iam_authentication"></a>

身分驗證是您 AWS 使用身分憑證登入 的方式。您必須以 AWS 帳戶根使用者、IAM 使用者或擔任 IAM 角色身分進行身分驗證。

您可以使用身分來源的登入資料，例如 AWS IAM Identity Center (IAM Identity Center)、單一登入身分驗證或 Google/Facebook 登入資料，以聯合身分的形式登入。如需有關登入的詳細資訊，請參閱《AWS 登入 使用者指南》**中的[如何登入您的 AWS 帳戶](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)。

對於程式設計存取， AWS 提供 SDK 和 CLI 以密碼編譯方式簽署請求。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [API 請求的AWS 第 4 版簽署程序](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)。

### AWS 帳戶 根使用者
<a name="security_iam_authentication-rootuser"></a>

 當您建立 時 AWS 帳戶，您會從一個名為 AWS 帳戶 *theroot 使用者的*登入身分開始，該身分具有對所有 AWS 服務 和 資源的完整存取權。強烈建議不要使用根使用者來執行日常任務。有關需要根使用者憑證的任務，請參閱《IAM 使用者指南》**中的[需要根使用者憑證的任務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

### 聯合身分
<a name="security_iam_authentication-federated"></a>

最佳實務是要求人類使用者使用聯合身分提供者，以 AWS 服務 使用臨時憑證存取 。

*聯合身分*是來自您的企業目錄、Web 身分提供者的使用者，或使用來自身分來源的 AWS 服務 憑證存取 Directory Service 。聯合身分會擔任角色，而該角色會提供臨時憑證。

若需集中化管理存取權限，建議使用 AWS IAM Identity Center。如需詳細資訊，請參閱 *AWS IAM Identity Center 使用者指南*中的[什麼是 IAM Identity Center？](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)。

### IAM 使用者和群組
<a name="security_iam_authentication-iamuser"></a>

*IAM 使用者*[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)是一種身分具備單人或應用程式的特定許可權。建議以臨時憑證取代具備長期憑證的 IAM 使用者。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[要求人類使用者使用聯合身分提供者來 AWS 使用臨時憑證存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp) 。

[IAM 群組](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)**會指定 IAM 使用者集合，使管理大量使用者的許可權更加輕鬆。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 使用者的使用案例](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html)。

### IAM 角色
<a name="security_iam_authentication-iamrole"></a>

*IAM 角色*[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)的身分具有特定許可權，其可以提供臨時憑證。您可以透過[從使用者切換到 IAM 角色 （主控台） ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)或呼叫 AWS CLI 或 AWS API 操作來擔任角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的[擔任角色的方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)。

IAM 角色適用於聯合身分使用者存取、臨時 IAM 使用者許可、跨帳戶存取權與跨服務存取，以及在 Amazon EC2 執行的應用程式。如需詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM 中的快帳戶資源存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

## 使用政策管理存取權
<a name="security_iam_access-manage"></a>

您可以透過建立政策並將其連接到身分或資源 AWS 來控制 AWS 中的存取。政策定義與身分或資源相關聯的許可。當委託人提出請求時 AWS ， 會評估這些政策。大多數政策會以 JSON 文件 AWS 形式存放在 中。如需進一步了解 JSON 政策文件，請參閱《*IAM 使用者指南*》中的 [JSON 政策概觀](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json)。

管理員會使用政策，透過定義哪些**主體**可在哪些**條件**下對哪些**資源**執行**動作**，以指定可存取的範圍。

預設情況下，使用者和角色沒有許可。IAM 管理員會建立 IAM 政策並將其新增至角色，供使用者後續擔任。IAM 政策定義動作的許可，無論採用何種方式執行。

### 身分型政策
<a name="security_iam_access-manage-id-based-policies"></a>

身分型政策是附加至身分 (使用者、使用者群組或角色) 的 JSON 許可政策文件。這類政策控制身分可對哪些資源執行哪些動作，以及適用的條件。如需了解如何建立身分型政策，請參閱《*IAM 使用者指南*》中的[透過客戶管理政策定義自訂 IAM 許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

身分型政策可分為*內嵌政策* (直接內嵌於單一身分) 與*受管政策* (可附加至多個身分的獨立政策)。如需了解如何在受管政策及內嵌政策之間做選擇，請參閱《IAM 使用者指南》**中的[在受管政策與內嵌政策之間選擇](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html)。

### 資源型政策
<a name="security_iam_access-manage-resource-based-policies"></a>

資源型政策是附加到資源的 JSON 政策文件。範例包括 IAM *角色信任政策*與 Amazon S3 *儲存貯體政策*。在支援資源型政策的服務中，服務管理員可以使用它們來控制對特定資源的存取權限。您必須在資源型政策中[指定主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。

資源型政策是位於該服務中的內嵌政策。您無法在資源型政策中使用來自 IAM 的 AWS 受管政策。

### 其他政策類型
<a name="security_iam_access-manage-other-policies"></a>

AWS 支援其他政策類型，可設定更多常見政策類型授予的最大許可：
+ **許可界限** — 設定身分型政策可授與 IAM 實體的最大許可。如需詳細資訊，請參閱《 IAM 使用者指南》**中的 [IAM 實體許可界限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)。
+ **服務控制政策 (SCP)** — 為 AWS Organizations中的組織或組織單位指定最大許可。如需詳細資訊，請參閱《AWS Organizations 使用者指南》**中的[服務控制政策](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)。
+ **資源控制政策 (RCP)** — 設定您帳戶中資源可用許可的上限。如需詳細資訊，請參閱《AWS Organizations 使用者指南》**中的[資源控制政策 (RCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)。
+ **工作階段政策** — 在以程式設計方式為角色或聯合身分使用者建立臨時工作階段時，以參數形式傳遞的進階政策。如需詳細資訊，請參《*IAM 使用者指南*》中的[工作階段政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)。

### 多種政策類型
<a name="security_iam_access-manage-multiple-policies"></a>

當多種類型的政策適用於請求時，產生的許可會更複雜而無法理解。若要了解如何 AWS 在涉及多個政策類型時決定是否允許請求，請參閱《*IAM 使用者指南*》中的[政策評估邏輯](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)。

# 在 Amazon SQS 中管理存取的概觀
<a name="sqs-overview-of-managing-access"></a>

每個 AWS 資源都由 擁有 AWS 帳戶，而建立或存取資源的許可是由許可政策管理。帳戶管理員可以將許可政策連接到 IAM 身分 (使用者、群組和角色)，有些服務 (例如 Amazon SQS) 也支援將許可政策連接到資源。

**注意**  
*帳戶管理員* (或管理員使用者) 是由具有管理權限的使用者。如需詳細資訊，請參《[IAM 使用者指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)》中的 *IAM 最佳實務*。

授與許可時，您指定哪些使用者取得許可、他們獲得許可的資源，以及可以對這些資源進行的特定動作。

## Amazon Simple Queue Service 資源和操作
<a name="sqs-resource-and-operations"></a>

在 Amazon SQS 中，唯一的資源是*佇列*。在政策中，您可以使用 Amazon Resource Name (ARN) 來識別要套用政策的資源。以下資源都有與其關聯的唯一 ARN：


| Resource Type (資源類型) | ARN 格式 | 
| --- | --- | 
| 佇列 | arn:aws:sqs:region:account\$1id:queue\$1name | 

以下是佇列的 ARN 格式範例：
+ `my_queue` 美國東部 （俄亥俄） 區域中名為 的佇列 ARN，屬於 AWS 帳戶 123456789012：

  ```
  arn:aws:sqs:us-east-2:123456789012:my_queue
  ```
+ 在 Amazon SQS 支援的每個不同區域中，名為 `my_queue` 之佇列的 ARN：

  ```
  arn:aws:sqs:*:123456789012:my_queue
  ```
+ 在佇列名稱中使用 `*` 或 `?` 做為萬用字元的 ARN。在下列範例中，ARN 符合字首為 `my_prefix_` 的所有佇列：

  ```
  arn:aws:sqs:*:123456789012:my_prefix_*
  ```

您可以透過呼叫 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueAttributes.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueAttributes.html) 動作，取得現有佇列的 ARN 值。`QueueArn` 屬性的值是佇列的 ARN。如需關於 ARN 的詳細資訊，請參閱《IAM 使用者指南》**中的[ IAM ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)。

Amazon SQS 提供可用於佇列資源的一組動作。如需詳細資訊，請參閱 [Amazon SQS API 許可：動作和資源參考](sqs-api-permissions-reference.md)。

## 了解資源所有權
<a name="sqs-understanding-resource-ownership"></a>

無論誰建立資源， 都會 AWS 帳戶 擁有在帳戶中建立的資源。具體而言，資源擁有者就是對資源建立請求進行身分驗證的*主體實體* (即根帳戶、使用者或 IAM 角色) 的 AWS 帳戶 。下列範例說明其如何運作：
+ 如果您使用 的根帳戶登入 AWS 帳戶 資料來建立 Amazon SQS 佇列，則您的 AWS 帳戶 是資源的擁有者 （在 Amazon SQS 中，資源是 Amazon SQS 佇列）。
+ 如果您在 中建立使用者， AWS 帳戶 並將建立佇列的許可授予使用者，則使用者可以建立佇列。但是您的 AWS 帳戶 (也是該使用者所屬的帳戶) 擁有該佇列資源。
+ 如果您在 中建立 AWS 帳戶 具有建立 Amazon SQS 佇列許可的 IAM 角色，則任何可以擔任該角色的人都可以建立佇列。您的 AWS 帳戶 （角色所屬的） 擁有佇列資源。

## 管理 資源的存取
<a name="sqs-managing-access-to-resources"></a>

*許可政策*說明授予帳戶的許可權。下一節則說明用於建立許可政策的可用選項。

**注意**  
 本節著重討論如何在 Amazon SQS​ 的環境中使用 IAM，它不提供 IAM 服務的詳細資訊。如需完整的 IAM 文件，請參閱《IAM 使用者指南》**中的[什麼是 IAM？](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)。如需有關 IAM 政策語法和說明的資訊，請參閱*IAM 使用者指南*中的 [AWS IAM 政策參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)。

連接到 IAM 身分的政策稱為*身分類型*政策 (IAM 政策)，而連接到資源的政策參考*資源類型政策*。

### 身分型政策
<a name="sqs-identity-based-features-of-sqs-policies"></a>

有兩種方式可讓您授與 Amazon SQS 佇列的許可給使用者：使用 Amazon SQS 政策系統，以及使用 IAM 政策系統。您可以使用任一種系統或兩者都使用，將政策連接至使用者或角色。在大多數情況下，使用任一系統都能達到相同的結果。例如，您可以執行下列動作：
+ **將許可政策連接至您帳戶中的使用者或群組** - 若要授與使用者建立 Amazon SQS 佇列的許可，您可以將許可政策連接至使用者或使用者所屬的群組。
+ **將許可政策連接到另一個 中的使用者 AWS 帳戶** – 您可以將許可政策連接到另一個 中的使用者 AWS 帳戶 ，以允許他們與 Amazon SQS 佇列互動。不過，跨帳戶許可不適用於下列動作：

  跨帳戶許可權不會套用至下列動作：
  + `[AddPermission](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_AddPermission.html)`
  + `[CancelMessageMoveTask](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CancelMessageMoveTask.html)`
  + `[CreateQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html)`
  + `[DeleteQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteQueue.html)`
  + `[ListMessageMoveTask](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListMessageMoveTasks.html)`
  + `[ListQueues](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListQueues.html)`
  + `[ListQueueTags](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListQueueTags.html)`
  + `[RemovePermission](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_RemovePermission.html)`
  + `[SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)`
  + `[StartMessageMoveTask](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_StartMessageMoveTask.html)`
  + `[TagQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_TagQueue.html)`
  + `[UntagQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_UntagQueue.html)`

  若要授予這些動作的存取權，使用者必須屬於 AWS 帳戶 擁有 Amazon SQS 佇列的相同 。
+ **將許可政策連接至角色 （授予跨帳戶許可）** – 若要將跨帳戶許可授予 SQS 佇列，您必須同時結合 IAM 和資源型政策：

  1. 在**帳戶 A** 中 （擁有佇列）：
     + 將**資源型政策**連接至 SQS 佇列。此政策必須明確授予必要的許可 （例如 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)、[https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)) 給**帳戶 B** 中的委託人 （例如 IAM 角色）。

  1. 在**帳戶 A** 中，建立 IAM 角色：
     + 允許**帳戶 B** 或 AWS 服務 擔任角色的**信任政策**。
**注意**  
如果您希望 AWS 服務 （例如 Lambda 或 EventBridge) 擔任該角色，請在信任政策中指定服務委託人 （例如 lambda.amazonaws.com)。
     + 以**身分為基礎的政策**，授予擔任角色與佇列互動的許可。

  1. 在**帳戶 B** 中，授予許可以擔任**帳戶 A** 中的角色。

您必須設定佇列的存取政策，以允許跨帳戶主體。IAM 身分型政策本身不足以跨帳戶存取 SQS 佇列。

如需使用 IAM 來委派許可的相關資訊，請參閱《IAM 使用者指南》**中的[存取管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html)。

雖然 Amazon SQS 可與 IAM 政策搭配使用，但它有自己的政策基礎設施。您可以將 Amazon SQS 政策與佇列搭配使用，以指定哪些 AWS 帳戶可以存取佇列。您可以指定存取權類型和條件 (例如，如果請求在 2010 年 12 月 31 日之前提出則授與使用 `SendMessage`、`ReceiveMessage` 之許可的條件)。您可以授予許可的特定動作是整體 Amazon SQS 動作清單的一部分。當您撰寫 Amazon SQS 政策並將 `*` 指定為「允許所有 Amazon SQS 動作」，這表示使用者可以執行這個子集中的所有動作。

下圖說明其中一個涵蓋動作子集的基本 Amazon SQS 政策概念。此政策適用於 `queue_xyz`，並授予 AWS 帳戶 1 和 AWS 帳戶 2 許可，以將任何允許的動作用於指定的佇列。

**注意**  
政策中的資源指定為 `123456789012/queue_xyz`，其中 `123456789012`是擁有佇列之帳戶的帳戶 AWS ID。

![\[涵蓋動作子集的 Amazon SQS 政策\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/SQS_BasicPolicy.png)


隨著引進 IAM 以及*使用者*和 *Amazon Resource Name (ARN)* 的概念，SQS 政策產生了一些改變。以下圖表說明這些改變。

![\[新增至 Amazon SQS 政策的 IAM 和 Amazon Resource Name。\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/SQS_PolicyWithNewFeatures.png)


![\[Number one in the diagram.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-1-red.png) 如需為不同帳戶中的使用者授予許可的資訊，請參閱《*IAM 使用者指南*》中的[教學課程：使用 IAM 角色跨 AWS 帳戶委派存取權](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html)。

![\[Number two in the diagram.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-2-red.png) `*` 中包含的動作子集已擴展。如需允許動作的清單，請參閱[Amazon SQS API 許可：動作和資源參考](sqs-api-permissions-reference.md)。

![\[Number three in the diagram.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-3-red.png)您可以使用 Amazon Resource Name (ARN) 來指定資源，這是在 IAM 政策中指定資源的標準方法。如需有關 Amazon SQS 佇列的 ARN 格式的資訊，請參閱 [Amazon Simple Queue Service 資源和操作](#sqs-resource-and-operations)。

例如，根據上圖中的 Amazon SQS 政策，擁有 AWS 帳戶 1 或 AWS 帳戶 2 安全登入資料的任何人都可以存取 `queue_xyz`。此外，在您自己 AWS 帳戶中的使用者 Bob 和 Susan (具有 ID `123456789012`) 都能存取佇列。

在引進 IAM 前，Amazon SQS 會自動給予佇列建立者對於佇列的完全控制權 (也就是該佇列上所有可能 Amazon SQS 動作的存取權)。但現在已不是這樣，除非建立者使用 AWS 安全憑證。具有建立佇列許可的任何使用者還必須具有使用其他 Amazon SQS 動作的許可，才能對他建立的佇列進行任意操作。

以下是範例政策，允許使用者使用所有 Amazon SQS 動作，但僅限於名稱字首為常值字串 `bob_queue_` 的佇列。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": "sqs:*",
      "Resource": "arn:aws:sqs:*:123456789012:bob_queue_*"
   }]
}
```

------

如需詳細資訊，請參閱 [搭配 Amazon SQS 使用政策](sqs-using-identity-based-policies.md) 和《*IAM 使用者指南*》中的[身分 (使用者、群組和角色)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)。

## 指定政策元素：動作、效果、資源和主體
<a name="sqs-specifying-policy-elements"></a>

對於每一個 [Amazon Simple Queue Service 資源](#sqs-resource-and-operations)，該服務會定義一組[動作](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_Operations.html)。為了授予這些動作的許可，Amazon SQS 定義了一組可在政策中指定的動作。

**注意**  
執行 動作可能需要不只一個動作的許可。在授與特定動作的許可時，您也同時識別允許或拒絕對其執行動作的資源。

以下是最基本的政策元素：
+ **資源** – 在政策中，您可以使用 Amazon Resource Name (ARN) 來識別要套用政策的資源。
+ **動作** – 您可以使用動作關鍵字來識別您要允許或拒絕的資源動作。例如，`sqs:CreateQueue` 許可權允許使用者執行 Amazon Simple Queue Service `CreateQueue` 動作。
+ **效果** - 您可以指定使用者要求特定動作時會有什麼效果；可為允許或拒絕。如果您不明確授與資源的存取權，將會隱含拒絕存取。您也可以明確拒絕資源的存取權，這樣做可以確保使用者無法存取資源，即使另有其他政策授與存取。
+ **主體**：在身分型政策 (IAM 政策) 中，政策所連接的使用者就是隱含主體。對於資源型政策，您可以指定想要收到許可的使用者、帳戶、服務或其他實體 (僅適用於資源型政策)。

如需進一步了解 Amazon SQS 政策語法和描述的詳細資訊，請參閱《*IAM 使用者指南*》中的 [AWS IAM 政策參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)。

如需所有 Amazon Simple Queue Service 動作及其所套用之資源的資料表，請參閱 [Amazon SQS API 許可：動作和資源參考](sqs-api-permissions-reference.md)。

# 如何搭配 IAM 使用 Amazon Simple Queue Service
<a name="security_iam_service-with-iam"></a>

在您使用 IAM 管理對 Amazon SQS 的存取權之前，請瞭解哪些 IAM 功能可以與 Amazon SQS 搭配使用。






**您可以搭配 Amazon Simple Queue Service 使用的 IAM 功能**  

| IAM 功能 | Amazon SQS 支援 | 
| --- | --- | 
|  [身分型政策](#security_iam_service-with-iam-id-based-policies)  |   是  | 
|  [資源型政策](#security_iam_service-with-iam-resource-based-policies)  |  是  | 
|  [政策動作](#security_iam_service-with-iam-id-based-policies-actions)  |   是  | 
|  [政策資源](#security_iam_service-with-iam-id-based-policies-resources)  |   是  | 
|  [政策條件索引鍵 (服務特定)](#security_iam_service-with-iam-id-based-policies-conditionkeys)  |   是  | 
|  [ACL](#security_iam_service-with-iam-acls)  |   否   | 
|  [ABAC(政策中的標籤)](#security_iam_service-with-iam-tags)  |   部分  | 
|  [臨時憑證](#security_iam_service-with-iam-roles-tempcreds)  |   是  | 
|  [轉送存取工作階段 (FAS)](#security_iam_service-with-iam-principal-permissions)  |   是  | 
|  [服務角色](#security_iam_service-with-iam-roles-service)  |   是  | 
|  [服務連結角色](#security_iam_service-with-iam-roles-service-linked)  |   否   | 

若要全面了解 Amazon SQS 和其他 AWS 服務如何與大多數 IAM 功能搭配使用，請參閱《IAM *使用者指南*》中的[AWS 與 IAM 搭配使用的 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。

## 存取控制
<a name="access-control"></a>

存取控制清單 (ACL) 可控制哪些主體 (帳戶成員、使用者或角色) 擁有存取某資源的許可。ACL 類似於資源型政策，但它們不使用 JSON 政策文件格式。

Amazon S3 AWS WAF和 Amazon VPC 是支援 ACLs的服務範例。如需進一步了解 ACL，請參閱《Amazon Simple Storage Service 開發人員指南》**中的[存取控制清單 (ACL) 概觀](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html)。

**注意**  
請務必了解，所有 AWS 帳戶 都可以將其許可委派給其帳戶下的使用者。跨帳戶存取可讓您共用 AWS 資源的存取權，而不必管理其他使用者。如需使用跨帳戶存取的相關資訊，請參閱 *IAM 使用者指南*中的[啟用跨帳戶存取權](https://docs.aws.amazon.com/IAM/latest/UserGuide/Delegation.html)。  
如需 Amazon SQS 自訂政策中跨內容許可權和條件金鑰的進一步詳細資訊，請參閱 [Amazon SQS 自訂政策的限制](sqs-limitations-of-custom-policies.md)。

## Amazon SQS 身分型政策
<a name="security_iam_service-with-iam-id-based-policies"></a>

**支援身分型政策：**是

身分型政策是可以附加到身分 (例如 IAM 使用者、使用者群組或角色) 的 JSON 許可政策文件。這些政策可控制身分在何種條件下能對哪些資源執行哪些動作。如需了解如何建立身分型政策，請參閱《*IAM 使用者指南*》中的[透過客戶管理政策定義自訂 IAM 許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

使用 IAM 身分型政策，您可以指定允許或拒絕的動作和資源，以及在何種條件下允許或拒絕動作。若要了解您在 JSON 政策中使用的所有元素，請參閱《IAM 使用者指南》**中的 [IAM JSON 政策元素參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)。

### Amazon SQS 的身分型政策範例
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>



若要檢視 Amazon SQS 身分型政策的範例，請參閱 [政策最佳實務](sqs-basic-examples-of-iam-policies.md#security_iam_id-based-policy-examples)。

## Amazon SQS 中的資源型政策
<a name="security_iam_service-with-iam-resource-based-policies"></a>

**支援資源型政策：**是

資源型政策是附加到資源的 JSON 政策文件。資源型政策的最常見範例是 IAM *角色信任政策*和 Amazon S3 *儲存貯體政策*。在支援資源型政策的服務中，服務管理員可以使用它們來控制對特定資源的存取權限。對於附加政策的資源，政策會定義指定的主體可以對該資源執行的動作以及在何種條件下執行的動作。您必須在資源型政策中[指定主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。委託人可以包含帳戶、使用者、角色、聯合身分使用者或 AWS 服務。

如需啟用跨帳戶存取權，您可以在其他帳戶內指定所有帳戶或 IAM 實體作為資源型政策的主體。如需詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM 中的快帳戶資源存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

## Amazon SQS 的政策動作
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

**支援政策動作：**是

管理員可以使用 AWS JSON 政策來指定誰可以存取內容。也就是說，哪個**主體**在什麼**條件**下可以對什麼**資源**執行哪些**動作**。

JSON 政策的 `Action` 元素描述您可以用來允許或拒絕政策中存取的動作。政策會使用動作來授予執行相關聯動作的許可。



若要查看 Amazon SNS 動作的清單，請參閱*服務授權參考*中的 [Amazon Simple Queue Service 定義的資源](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsqs.html#amazonsqs-resources-for-iam-policies)。

Amazon SQS 中的政策動作會在動作之前使用下列字首：

```
sqs
```

若要在單一陳述式中指定多個動作，請用逗號分隔。

```
"Action": [
      "sqs:action1",
      "sqs:action2"
         ]
```





若要檢視 Amazon SQS 身分型政策的範例，請參閱 [政策最佳實務](sqs-basic-examples-of-iam-policies.md#security_iam_id-based-policy-examples)。

## Amazon SQS 的政策資源
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

**支援政策資源：**是

管理員可以使用 AWS JSON 政策來指定誰可以存取內容。也就是說，哪個**主體**在什麼**條件**下可以對什麼**資源**執行哪些**動作**。

`Resource` JSON 政策元素可指定要套用動作的物件。最佳實務是使用其 [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html) 來指定資源。若動作不支援資源層級許可，使用萬用字元 (\$1) 表示該陳述式適用於所有資源。

```
"Resource": "*"
```

若要查看 Amazon SQS 資源類型及其 ARN 的清單，請參閱*服務授權參考*中的 [Amazon Simple Queue Service 定義的動作](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsqs.html#amazonsqs-actions-as-permissions)。若要了解您可以使用哪些動作指定每個資源的 ARN，請參閱 [Amazon Simple Queue Service 定義的資源](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsqs.html#amazonsqs-resources-for-iam-policies)。





若要檢視 Amazon SQS 身分型政策的範例，請參閱 [政策最佳實務](sqs-basic-examples-of-iam-policies.md#security_iam_id-based-policy-examples)。

## Amazon SQS 的政策條件金鑰
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

**支援服務特定政策條件金鑰：**是

管理員可以使用 AWS JSON 政策來指定誰可以存取內容。也就是說，哪個**主體**在什麼**條件**下可以對什麼**資源**執行哪些**動作**。

`Condition` 元素會根據定義的條件，指定陳述式的執行時機。您可以建立使用[條件運算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)的條件運算式 (例如等於或小於)，來比對政策中的條件和請求中的值。若要查看所有 AWS 全域條件索引鍵，請參閱《*IAM 使用者指南*》中的[AWS 全域條件內容索引鍵](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。

若要查看 Amazon SQS 條件索引鍵的清單，請參閱*服務授權參考*中的 [Amazon Simple Queue Service 的條件索引鍵](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsqs.html#amazonsqs-policy-keys)。若要了解您可以搭配哪些動作和資源使用條件金鑰，請參閱 [Amazon Simple Queue Service 定義的資源](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsqs.html#amazonsqs-resources-for-iam-policies)。

若要檢視 Amazon SQS 身分型政策的範例，請參閱 [政策最佳實務](sqs-basic-examples-of-iam-policies.md#security_iam_id-based-policy-examples)。

## Amazon SQS 的 ACL
<a name="security_iam_service-with-iam-acls"></a>

**支援 ACL：**否 

存取控制清單 (ACL) 可控制哪些主體 (帳戶成員、使用者或角色) 擁有存取某資源的許可。ACL 類似於資源型政策，但它們不使用 JSON 政策文件格式。

## 搭配使用 ABAC 與 Amazon SQS
<a name="security_iam_service-with-iam-tags"></a>

**支援 ABAC (政策中的標籤)：**部分

屬性型存取控制 (ABAC) 是一種授權策略，根據稱為標籤的屬性定義許可權。您可以將標籤連接至 IAM 實體 AWS 和資源，然後設計 ABAC 政策，以便在委託人的標籤符合資源上的標籤時允許操作。

如需根據標籤控制存取，請使用 `aws:ResourceTag/key-name`、`aws:RequestTag/key-name` 或 `aws:TagKeys` 條件索引鍵，在政策的[條件元素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)中，提供標籤資訊。

如果服務支援每個資源類型的全部三個條件金鑰，則對該服務而言，值為 **Yes**。如果服務僅支援某些資源類型的全部三個條件金鑰，則值為 **Partial**。

如需 ABAC 的詳細資訊，請參閱《*IAM 使用者指南*》中的[使用 ABAC 授權定義許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)。如要查看含有設定 ABAC 步驟的教學課程，請參閱《*IAM 使用者指南*》中的[使用屬性型存取控制 (ABAC)](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)。

## 將暫時憑證與 Amazon SQS 搭配使用
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

**支援臨時憑證：**是

臨時登入資料提供 AWS 資源的短期存取權，當您使用聯合或切換角色時，會自動建立。 AWS 建議您動態產生臨時登入資料，而不是使用長期存取金鑰。如需詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM 中的臨時安全憑證](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)與[可與 IAM 搭配運作的AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。

## 轉送 Amazon SQS 的存取工作階段
<a name="security_iam_service-with-iam-principal-permissions"></a>

**支援轉寄存取工作階段 (FAS)：**是

 轉送存取工作階段 (FAS) 使用呼叫 的委託人許可 AWS 服務，並結合 請求 AWS 服務 向下游服務提出請求。如需提出 FAS 請求時的政策詳細資訊，請參閱[轉發存取工作階段](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)。

## Amazon SQS 的服務角色
<a name="security_iam_service-with-iam-roles-service"></a>

**支援服務角色：**是

 服務角色是服務擔任的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)，可代您執行動作。IAM 管理員可以從 IAM 內建立、修改和刪除服務角色。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[建立角色以委派許可給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

**警告**  
變更服務角色的許可可能會中斷 Amazon SQS 功能。只有在 Amazon SQS 提供指引時，才能編輯服務角色。

## Amazon SQS 的服務連結角色
<a name="security_iam_service-with-iam-roles-service-linked"></a>

**支援服務連結角色：**否 

 服務連結角色是連結至 的一種服務角色 AWS 服務。服務可以擔任代表您執行動作的角色。服務連結角色會出現在您的 中 AWS 帳戶 ，並由服務擁有。IAM 管理員可以檢視，但不能編輯服務連結角色的許可。

如需建立或管理服務連結角色的詳細資訊，請參閱[可搭配 IAM 運作的AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。在資料表中尋找服務，其中包含**服務連結角色**欄中的 `Yes`。選擇**是**連結，以檢視該服務的服務連結角色文件。







# AWS 受管政策的 Amazon SQS 更新
<a name="sqs-access-policy-aws-managed-policies"></a>

若要新增許可給使用者、群組和角色，使用 AWS 受管政策比自己撰寫政策更容易。[建立 IAM 客戶受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)需要時間和專業知識，而受管政策可為您的團隊提供其所需的許可。若要快速開始使用，您可以使用 AWS 受管政策。這些政策涵蓋常見的使用案例，並可在您的 AWS 帳戶中可用。如需 AWS 受管政策的詳細資訊，請參閱《*IAM 使用者指南*》中的 [AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

AWS 服務會維護和更新 AWS 受管政策。您無法變更 AWS 受管政策中的許可。服務偶爾會將其他許可新增至 AWS 受管政策，以支援新功能。此類型的更新會影響已連接政策的所有身分識別 (使用者、群組和角色)。當新功能啟動或新操作可用時，服務最有可能更新 AWS 受管政策。服務不會從 AWS 受管政策移除許可，因此政策更新不會破壞您現有的許可。

此外， AWS 支援跨多個 服務之任務函數的受管政策。例如，**ReadOnlyAccess** 這項 AWS 受管政策提供針對所有 AWS 服務和資源的唯讀存取權限。當服務啟動新功能時， 會為新操作和資源 AWS 新增唯讀許可。如需任務職能政策的清單和說明，請參閱 *IAM 使用者指南*中[有關任務職能的AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)。

## AWS 受管政策：AmazonSQSFullAccess
<a name="security-iam-awsmanpol-AmazonSQSFullAccess"></a>

您可將 `AmazonSQSFullAccess` 政策連接到 Amazon SQS 身分。此政策授與允許 Amazon SQS 完整存取的許可。

若要檢視此政策的許可，請參閱 *AWS 受管政策參考*中的 [AmazonSQSFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSQSFullAccess.html)。

## AWS 受管政策：AmazonSQSReadOnlyAccess
<a name="security-iam-awsmanpol-AmazonSQSReadOnlyAccess"></a>

您可將 `AmazonSQSReadOnlyAccess` 政策連接到 Amazon SQS 身分。此政策授與允許 Amazon SQS 唯讀存取的許可。

若要檢視此政策的許可，請參閱 *AWS 受管政策參考*中的 [AmazonSQSReadOnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSQSReadOnlyAccess.html)。

## AWS 受管政策：SQSUnlockQueuePolicy
<a name="security-iam-awsmanpol-SQSUnlockQueuePolicy"></a>

如果您為成員帳戶設定不正確的佇列政策，以拒絕所有使用者存取您的 Amazon SQS 佇列，您可以使用 `SQSUnlockQueuePolicy` AWS 受管政策來解鎖佇列。

如需如何移除設定錯誤佇列政策以拒絕所有主體存取 Amazon SQS 佇列的詳細資訊，請參閱《*IAM 使用者指南*》中的[對 AWS Organizations 成員帳戶執行特權任務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user-privileged-task.html)。

## AWS 受管政策的 Amazon SQS 更新
<a name="security-iam-awsmanpol-updates"></a>

檢視自此服務開始追蹤 Amazon SQS AWS 受管政策更新以來的詳細資訊。如需有關此頁面變更的自動提醒，請訂閱 Amazon SQS [文件歷程記錄](sqs-release-notes.md)頁面上的 RSS 摘要。


| 變更 | 描述 | Date | 
| --- | --- | --- | 
|  [SQSUnlockQueuePolicy](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-iam-awsmanpol.html#security-iam-awsmanpol-SQSUnlockQueuePolicy)  |  Amazon SQS 新增了名為 AWS的新受管政策`SQSUnlockQueuePolicy`，以解鎖佇列並移除設定錯誤的佇列政策，拒絕所有主體存取 Amazon SQS 佇列。  | 2024 年 11 月 15 日 | 
|  [AmazonSQSReadOnlyAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonSQSReadOnlyAccess)  |  Amazon SQS 新增 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListQueueTags.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListQueueTags.html)動作，這會擷取與指定 Amazon SQS 佇列相關聯的所有標籤。它可讓您檢視已指派給佇列的鍵/值對，用於組織或中繼資料用途。此動作會與 `ListQueueTags` API 操作相關聯。  | 2024 年 6 月 20 日 | 
|  [AmazonSQSReadOnlyAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonSQSReadOnlyAccess)  |  Amazon SQS 新增了一個新動作，可讓您列出特定來源佇列下最新的訊息移動任務 (最多 10 個)。此動作會與 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListMessageMoveTasks.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListMessageMoveTasks.html) API 操作相關聯。  | 2023 年 6 月 9 日 | 

# 對 Amazon Simple Queue Service 身分和存取進行故障診斷
<a name="security_iam_troubleshoot"></a>

請使用以下資訊來協助您診斷和修正使用 Amazon SQS 和 IAM 時可能遇到的常見問題。

## 我未獲授權，不得在 Amazon SQS 中執行動作
<a name="security_iam_troubleshoot-no-permissions"></a>

如果您收到錯誤，告知您未獲授權執行動作，您的政策必須更新，允許您執行動作。

下列範例錯誤會在 `mateojackson` 使用者嘗試使用主控台檢視一個虛構 `my-example-widget` 資源的詳細資訊，但卻無虛構 `sqs:GetWidget` 許可時發生。

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: sqs:GetWidget on resource: my-example-widget
```

在此情況下，必須更新 Mateo 政策，允許他使用 `sqs:GetWidget` 動作存取 `my-example-widget` 資源。

如果您需要協助，請聯絡您的 AWS 管理員。您的管理員提供您的簽署憑證。

## 我未獲得執行 iam:PassRole 的授權
<a name="security_iam_troubleshoot-passrole"></a>

如果您收到錯誤，告知您無權執行 `iam:PassRole` 動作，您的政策必須更新，允許您將角色傳遞給 Amazon SQS。

有些 AWS 服務 可讓您將現有角色傳遞給該服務，而不是建立新的服務角色或服務連結角色。如需執行此作業，您必須擁有將角色傳遞至該服務的許可。

當名為 `marymajor` 的 IAM 使用者嘗試使用主控台在 Amazon SQS 中執行動作時，發生下列範例錯誤。但是，動作請求服務具備服務角色授予的許可。Mary 沒有將角色傳遞給服務的許可。

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

在這種情況下，Mary 的政策必須更新，允許她執行 `iam:PassRole` 動作。

如果您需要協助，請聯絡您的 AWS 管理員。您的管理員提供您的簽署憑證。

## 我想要允許 以外的人員 AWS 帳戶 存取我的 Amazon SQS 資源
<a name="security_iam_troubleshoot-cross-account-access"></a>

您可以建立一個角色，讓其他帳戶中的使用者或您組織外部的人員存取您的資源。您可以指定要允許哪些信任物件取得該角色。針對支援基於資源的政策或存取控制清單 (ACL) 的服務，您可以使用那些政策來授予人員存取您的資源的許可。

如需進一步了解，請參閱以下內容：
+ 若要了解 Amazon SQS 是否支援這些功能，請參閱 [如何搭配 IAM 使用 Amazon Simple Queue Service](security_iam_service-with-iam.md)。
+ 若要了解如何 AWS 帳戶 在您擁有的 資源之間提供存取權，請參閱《[IAM 使用者指南》中的在您擁有 AWS 帳戶 的另一個 IAM 使用者中提供存取權](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)。 **
+ 若要了解如何將資源的存取權提供給第三方 AWS 帳戶，請參閱《*IAM 使用者指南*》中的[將存取權提供給第三方 AWS 帳戶 擁有](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)。
+ 如需了解如何透過聯合身分提供存取權，請參閱《*IAM 使用者指南*》中的[將存取權提供給在外部進行身分驗證的使用者 (聯合身分)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html)。
+ 如需了解使用角色和資源型政策進行跨帳戶存取之間的差異，請參閱《*IAM 使用者指南*》中的 [IAM 中的跨帳戶資源存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

## 我想要解除鎖定我的佇列
<a name="sqs-troubleshooting-org-policies"></a>

如果您的 AWS 帳戶 屬於組織， AWS Organizations 政策可能會封鎖您存取 Amazon SQS 資源。根據預設， AWS Organizations 政策不會封鎖對 Amazon SQS 的任何請求。不過，請確定您的 AWS Organizations 政策尚未設定為封鎖對 Amazon SQS 佇列的存取。如需如何檢查 AWS Organizations 政策的說明，請參閱*AWS Organizations 《 使用者指南*》中的[列出所有政策](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_info-operations.html#list-all-pols-in-org.html)。

此外，如果您錯誤地設定成員帳戶的佇列政策以拒絕所有使用者存取您的 Amazon SQS 佇列，您可以透過在 IAM 中為成員帳戶啟動特權工作階段來解鎖佇列。啟動特權工作階段後，您可以刪除設定錯誤的佇列政策，以重新取得佇列的存取權。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[在 AWS Organizations 成員帳戶上執行特權任務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user-privileged-task.html)。

# 搭配 Amazon SQS 使用政策
<a name="sqs-using-identity-based-policies"></a>

這個主題提供身分型政策範例，在該政策中帳戶管理員可以將許可政策連接至 IAM 身分 (使用者、群組和角色)。

**重要**  
建議您先檢閱簡介主題，其中說明基本概念及有何選項可供您管理對 Amazon Simple Queue Service 資源的存取權。如需詳細資訊，請參閱 [在 Amazon SQS 中管理存取的概觀](sqs-overview-of-managing-access.md)。  
在 `ListQueues` 例外情況下，所有 Amazon SQS 動作皆會支援資源層級許可權。如需詳細資訊，請參閱 [Amazon SQS API 許可：動作和資源參考](sqs-api-permissions-reference.md)。

## 使用 Amazon SQS 和 IAM 政策
<a name="sqs-using-sqs-and-iam-policies"></a>

有兩種方式可授予使用者許可給 Amazon SQS 資源：使用 Amazon SQS 政策系統 （以資源為基礎的政策） 和使用 IAM 政策系統 （以身分為基礎的政策）。您可以使用一種或兩種方法，但 `ListQueues`動作除外，這是只能在 IAM 政策中設定的區域許可。

例如，下圖顯示 IAM 政策和相當的 Amazon SQS 政策。IAM 政策授予`queue_xyz`您 AWS 帳戶中名為 之佇列的 Amazon SQS `ReceiveMessage`和`SendMessage`動作的權利，且政策會連接到名為 Bob 和 Susan 的使用者 (Bob 和 Susan 具有政策中所述的許可）。此 Amazon SQS 政策也提供 Bob 和 Susan 相同佇列的 `ReceiveMessage` 和 `SendMessage` 動作權利。

**注意**  
下列範例顯示沒有條件的簡單政策。您可以在任一政策中指定特定條件，並取得相同結果。

![\[比較 IAM 政策和同等 Amazon SQS 政策的圖表。IAM 政策授予queue_xyz您 AWS 帳戶中名為 之佇列的 Amazon SQS ReceiveMessage和SendMessage動作的權利，且政策會連接到名為 Bob 和 Susan 的使用者 (Bob 和 Susan 具有政策中所述的許可）。此 Amazon SQS 政策也提供 Bob 和 Susan 相同佇列的 ReceiveMessage 和 SendMessage 動作權利。\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-iam-policies-equivalent.png)


IAM 和 Amazon SQS 政策之間有一項主要差異：Amazon SQS 政策系統可讓您將許可授予其他 AWS 帳戶，而 IAM 則不會。

由您決定如何一起使用兩個系統來管理您的許可。以下範例顯示兩個政策系統如何搭配運作。
+ 在第一個範例中，Bob 同時有 IAM 政策和 Amazon SQS 政策套用到他的帳戶。IAM 政策授予他的帳戶在 `queue_xyz` 上的 `ReceiveMessage` 動作許可，而 Amazon SQS 政策提供他的帳戶在相同佇列上的 `SendMessage` 動作許可。此圖說明了此概念。  
![\[比較 IAM 政策元件與 Amazon SQS 政策的圖表。在第一個範例中，Bob 同時有 IAM 政策和 Amazon SQS 政策套用到他的帳戶。IAM 政策授予他的帳戶在 queue_xyz 上的 ReceiveMessage 動作許可，而 Amazon SQS 政策提供他的帳戶在相同佇列上的 SendMessage 動作許可。\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-iam-policies-union.png)

  如果 Bob 傳送 `ReceiveMessage` 請求至 `queue_xyz`，IAM 政策會允許此動作。如果 Bob 傳送 `SendMessage` 請求至 `queue_xyz`，Amazon SQS 政策會允許此動作。
+ 在第二個範例中，Bob 濫用他對於 `queue_xyz` 的存取權，所以必須移除他對於佇列的整個存取權。最簡單的方式是新增一個拒絕他存取該佇列所有動作的政策。此政策會覆寫其他兩個政策，因為明確`deny`一律覆寫`allow`。如需政策評估邏輯的相關資訊，請參閱[搭配 Amazon SQS 存取政策語言使用自訂政策](sqs-creating-custom-policies.md)。此圖說明了此概念。  
![\[顯示使用 Amazon SQS 政策覆寫 IAM 政策的圖表。Bob 濫用他對 的存取權queue_xyz，因此需要移除他對佇列的整個存取權。最簡單的方式是新增一個拒絕他存取該佇列所有動作的政策。此政策會覆寫其他兩個政策，因為明確deny一律覆寫allow。\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-iam-policies-deny-override.png)

  您也可以將其他陳述式新增到拒絕 Bob 任何佇列存取類型的 Amazon SQS 政策。這和新增 IAM 政策來拒絕 Bob 存取佇列擁有相同的效果。如需涵蓋 Amazon SQS 動作和資源之政策的詳細資訊，請參閱 [Amazon SQS 政策的基本範例](sqs-basic-examples-of-sqs-policies.md)。如需撰寫 Amazon SQS 政策的詳細資訊，請參閱[搭配 Amazon SQS 存取政策語言使用自訂政策](sqs-creating-custom-policies.md)。

## 使用 Amazon SQS 主控台所需的許可
<a name="sqs-console-permissions"></a>

想要使用 Amazon SQS 主控台的使用者，必須擁有一組最基本的許可，才能使用其 AWS 帳戶中的 Amazon SQS 佇列。例如，使用者必須具備呼叫 `ListQueues` 動作的許可才能列出佇列，必須具備呼叫 `CreateQueue` 動作的許可才能建立佇列。除了 Amazon SQS 許可權限，若要將 Amazon SQS 佇列訂閱至 Amazon SNS 主題，主控台另外還需要 Amazon SNS 動作的許可。

如果您建立了比最基本的必要許可更嚴格的 IAM 政策，對於採取該 IAM 政策的使用者，主控台可能無法如預期運作。

對於僅呼叫 AWS CLI 或 Amazon SQS 動作的使用者，您不需要允許最低主控台許可。

# Amazon SQS 的身分型政策範例
<a name="sqs-basic-examples-of-iam-policies"></a>

根據預設，IAM 使用者和角色不具備建立或修改 Amazon SQS 資源的許可。若要授予使用者對其所需資源執行動作的許可，IAM 管理員可以建立 IAM 政策。

如需了解如何使用這些範例 JSON 政策文件建立 IAM 身分型政策，請參閱《*IAM 使用者指南*》中的[建立 IAM 政策 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)。

如需 Amazon SQS 所定義之動作和資源類型的詳細資訊，包括每種資源類型的 ARN 格式，請參閱《服務授權參考》**中的[適用 Amazon Simple Queue Service 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsqs.html)。

**注意**  
當您設定 Amazon EC2 Auto Scaling 的生命週期關聯時，您無須撰寫將訊息傳送至 Amazon SQS 佇列的政策。如需詳細資訊，請參閱[《Amazon EC2 使用者指南》中的 Amazon EC2 Auto Scaling 生命週期掛鉤](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html)。 *Amazon EC2 *

## 政策最佳實務
<a name="security_iam_id-based-policy-examples"></a>

身分型政策會判斷您帳戶中的某個人員是否可以建立、存取或刪除 Amazon SQS 資源。這些動作可能會讓您的 AWS 帳戶產生費用。當您建立或編輯身分型政策時，請遵循下列準則及建議事項：
+ **開始使用 AWS 受管政策並邁向最低權限許可** – 若要開始將許可授予您的使用者和工作負載，請使用將許可授予許多常見使用案例的 *AWS 受管政策*。它們可在您的 中使用 AWS 帳戶。我們建議您定義特定於使用案例 AWS 的客戶受管政策，以進一步減少許可。如需更多資訊，請參閱《*IAM 使用者指南*》中的 [AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)或[任務職能的AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)。
+ **套用最低權限許可** – 設定 IAM 政策的許可時，請僅授予執行任務所需的許可。為實現此目的，您可以定義在特定條件下可以對特定資源採取的動作，這也稱為*最低權限許可*。如需使用 IAM 套用許可的更多相關資訊，請參閱《*IAM 使用者指南*》中的 [IAM 中的政策和許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。
+ **使用 IAM 政策中的條件進一步限制存取權** – 您可以將條件新增至政策，以限制動作和資源的存取。例如，您可以撰寫政策條件，指定必須使用 SSL 傳送所有請求。如果透過特定 例如 使用服務動作 AWS 服務，您也可以使用條件來授予其存取權 CloudFormation。如需詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM JSON 政策元素：條件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)。
+ **使用 IAM Access Analyzer 驗證 IAM 政策，確保許可安全且可正常運作** – IAM Access Analyzer 驗證新政策和現有政策，確保這些政策遵從 IAM 政策語言 (JSON) 和 IAM 最佳實務。IAM Access Analyzer 提供 100 多項政策檢查及切實可行的建議，可協助您撰寫安全且實用的政策。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[使用 IAM Access Analyzer 驗證政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)。
+ **需要多重要素驗證 (MFA)** – 如果您的案例需要 IAM 使用者或 中的根使用者 AWS 帳戶，請開啟 MFA 以提高安全性。如需在呼叫 API 操作時請求 MFA，請將 MFA 條件新增至您的政策。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[透過 MFA 的安全 API 存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)。

如需 IAM 中最佳實務的相關資訊，請參閱《*IAM 使用者指南*》中的 [IAM 安全最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

## 使用 Amazon SQS 主控台
<a name="security_iam_id-based-policy-examples-console"></a>

若要存取 Amazon Simple Queue Service 主控台，您必須擁有最基本的一組許可。這些許可必須允許您列出和檢視 中 Amazon SQS 資源的詳細資訊 AWS 帳戶。如果您建立比最基本必要許可更嚴格的身分型政策，則對於具有該政策的實體 (使用者或角色) 而言，主控台就無法如預期運作。

對於僅呼叫 AWS CLI 或 AWS API 的使用者，您不需要允許最低主控台許可。反之，只需允許存取符合他們嘗試執行之 API 操作的動作就可以了。

為了確保使用者和角色仍然可以使用 Amazon SQS 主控台，也請將 Amazon SQS `AmazonSQSReadOnlyAccess` AWS 受管政策連接到實體。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[新增許可到使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)。

## 允許使用者檢視他們自己的許可
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

此範例會示範如何建立政策，允許 IAM 使用者檢視連接到他們使用者身分的內嵌及受管政策。此政策包含在主控台或使用 或 AWS CLI AWS API 以程式設計方式完成此動作的許可。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

## 允許使用者建立佇列
<a name="allow-queue-creation"></a>

在下列範例政策中，我們為 Bob 建立一個政策，允許他存取所有 Amazon SQS 動作，但僅能用於名稱字首為常值字串 `alice_queue_` 的佇列。

Amazon SQS 不會自動授予佇列建立者使用該佇列的許可。因此，除了 IAM 政策中的 `CreateQueue` 動作，我們還必須明確授與 Bob 使用所有 Amazon SQS 動作的許可。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": "sqs:*",
      "Resource": "arn:aws:sqs:*:123456789012:alice_queue_*"
   }]
}
```

------

## 允許開發人員將訊息寫入共用佇列
<a name="write-messages-to-shared-queue"></a>

在下列範例中，我們為開發人員建立群組，並連接政策，讓群組使用 Amazon SQS `SendMessage`動作，但僅限於屬於指定 AWS 帳戶 且名為 的佇列`MyCompanyQueue`。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": "sqs:SendMessage",
      "Resource": "arn:aws:sqs:*:123456789012:MyCompanyQueue"
   }]
}
```

------

您可以使用 `*` 代替 `SendMessage` 授與主體對共享佇列進行以下動作：`ChangeMessageVisibility`、`DeleteMessage`、`GetQueueAttributes`、`GetQueueUrl`、`ReceiveMessage` 和 `SendMessage`。

**注意**  
儘管 `*` 包含由其他許可類型提供的存取權，Amazon SQS 會個別考量各項許可。例如，可以將 `*` 和 `SendMessage` 許可同時授與一名使用者，即便 `*` 包含由 `SendMessage` 提供的存取權。  
移除許可時也適用此概念。若主體僅有 `*` 許可，提出移除 `SendMessage` 許可的請求並*不會*使主體*只獨缺*該項許可。反之，由於主體並未擁有明確的 `SendMessage` 許可，此請求將不會起作用。若想要讓主體僅有 `ReceiveMessage` 許可，請先新增 `ReceiveMessage` 許可再移除 `*` 許可。

## 允許管理員取得佇列的一般大小
<a name="get-size-of-queues"></a>

在下列範例中，我們為管理員建立群組，並連接政策，讓群組將 Amazon SQS `GetQueueAttributes`動作與屬於指定 AWS 帳戶的所有佇列搭配使用。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": "sqs:GetQueueAttributes",
      "Resource": "*"   
   }]
}
```

------

## 允許合作夥伴傳送訊息至特定佇列
<a name="send-messages-to-specific-queue"></a>

您可以使用 Amazon SQS 政策或 IAM 政策來完成這項工作。如果您的合作夥伴有 AWS 帳戶，則使用 Amazon SQS 政策可能會更輕鬆。不過，合作夥伴公司中擁有 AWS 安全登入資料的任何使用者都可以傳送訊息到佇列。如果您想將存取權限制至特定的使用者或應用程式，您必須將合作夥伴視同您自己公司中的使用者，並改為使用 IAM 政策，而非 Amazon SQS 政策。

此範例執行下列動作：

1. 建立稱為 WidgetCo 的群組，來代表合作夥伴公司。

1. 為合作夥伴公司中需要存取權的特定使用者或應用程式，建立使用者。

1. 將 使用者新增至 群組。

1. 連接政策，提供僅能對名為 `WidgetPartnerQueue` 的佇列，僅限存取名為 `SendMessage` 之動作的存取權給群組。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
         "Effect": "Allow",
         "Action": "sqs:SendMessage",
         "Resource": "arn:aws:sqs:*:123456789012:WidgetPartnerQueue"
   }]
}
```

------

# Amazon SQS 政策的基本範例
<a name="sqs-basic-examples-of-sqs-policies"></a>

本節說明常見 Amazon SQS 使用案例的範例政策。

當您將政策連接到使用者時，可以使用主控台來驗證每個政策的效果。起初，使用者沒有許可且無法在主控台進行任何操作。隨著您將政策連接到使用者，便可以驗證使用者在主控台上能夠執行各種動作。

**注意**  
我們建議您使用兩個瀏覽器視窗：一個用於授予許可，另一個 AWS 管理主控台 用於使用使用者的登入資料登入 ，以便在將許可授予使用者時驗證許可。

## 範例 1：授予一個許可給一個 AWS 帳戶
<a name="grant-one-permission-to-one-account"></a>

下列範例政策會授予美國東部 （俄亥俄） `444455556666/queue1` 區域中名為 之佇列的 `111122223333` `SendMessage` 許可 AWS 帳戶 編號。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id": "Queue1_Policy_UUID",
   "Statement": [{
      "Sid":"Queue1_SendMessage",
      "Effect": "Allow",
      "Principal": {
         "AWS": [ 
            "111122223333"
         ]
      },
      "Action": "sqs:SendMessage",
      "Resource": "arn:aws:sqs:us-east-2:444455556666:queue1"
   }]  
}
```

------

## 範例 2：將兩個許可授予一個 AWS 帳戶
<a name="grant-two-permissions-to-one-account"></a>

下列範例政策會授予名為 之佇列`111122223333`的 `SendMessage`和 `ReceiveMessage`許可 AWS 帳戶 編號`444455556666/queue1`。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id": "Queue1_Policy_UUID",
   "Statement": [{
      "Sid":"Queue1_Send_Receive",
      "Effect": "Allow",
      "Principal": {
         "AWS": [
            "111122223333"
         ]
      },
      "Action": [
         "sqs:SendMessage",
         "sqs:ReceiveMessage"
      ],
      "Resource": "arn:aws:sqs:*:444455556666:queue1"
   }]
}
```

------

## 範例 3：將所有許可授予兩個 AWS 帳戶
<a name="grant-all-permissions-to-two-accounts"></a>

下列範例政策授予兩個不同的 AWS 帳戶 號碼 (`111122223333` 和 `444455556666`) 許可，以使用 Amazon SQS 允許`123456789012/queue1`在美國東部 （俄亥俄） 區域中名為 的佇列共用存取的所有動作。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id": "Queue1_Policy_UUID",
   "Statement": [{
      "Sid":"Queue1_AllActions",
      "Effect": "Allow",
      "Principal": {
         "AWS": [
            "111122223333",
            "444455556666"
         ]
      },
      "Action": "sqs:*",
      "Resource": "arn:aws:sqs:us-east-2:123456789012:queue1"
   }]
}
```

------

## 範例 4：授與跨帳戶許可給角色和使用者名稱
<a name="grant-cross-account-permissions-to-role-and-user-name"></a>

下列範例政策授予 `role1`和 AWS 帳戶 數字`username1`下的`111122223333`跨帳戶許可，以使用 Amazon SQS 允許`123456789012/queue1`在美國東部 （俄亥俄） 區域中名為 的佇列共用存取的所有動作。

跨帳戶許可權不會套用至下列動作：
+ `[AddPermission](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_AddPermission.html)`
+ `[CancelMessageMoveTask](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CancelMessageMoveTask.html)`
+ `[CreateQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html)`
+ `[DeleteQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteQueue.html)`
+ `[ListMessageMoveTask](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListMessageMoveTasks.html)`
+ `[ListQueues](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListQueues.html)`
+ `[ListQueueTags](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListQueueTags.html)`
+ `[RemovePermission](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_RemovePermission.html)`
+ `[SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)`
+ `[StartMessageMoveTask](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_StartMessageMoveTask.html)`
+ `[TagQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_TagQueue.html)`
+ `[UntagQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_UntagQueue.html)`

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id": "Queue1_Policy_UUID",
   "Statement": [{
      "Sid":"Queue1_AllActions",
      "Effect": "Allow",
      "Principal": {
         "AWS": [
            "arn:aws:iam::111122223333:role/role1",
            "arn:aws:iam::111122223333:user/username1"
         ]
      },
      "Action": "sqs:*",
      "Resource": "arn:aws:sqs:us-east-2:123456789012:queue1"
   }]
}
```

------

## 範例 5：授與許可給所有使用者
<a name="grant-permissions-to-all-users"></a>

以下範例政策授與所有使用者 (匿名使用者) 對名為 `111122223333/queue1` 之佇列的 `ReceiveMessage` 許可。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id": "Queue1_Policy_UUID",
   "Statement": [{
      "Sid":"Queue1_AnonymousAccess_ReceiveMessage",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "sqs:ReceiveMessage",
      "Resource": "arn:aws:sqs:*:111122223333:queue1"
   }]
}
```

------

## 範例 6：授與有限時間的許可給所有使用者
<a name="grant-time-limited-permission-to-all-users"></a>

以下範例政策授與所有使用者 (匿名使用者) 對名為 `111122223333/queue1` 之佇列的 `ReceiveMessage` 許可，但僅限於 2009 年 1 月 31 日下午 12:00 (中午) 到下午 3:00 的期間。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id": "Queue1_Policy_UUID",
   "Statement": [{
      "Sid":"Queue1_AnonymousAccess_ReceiveMessage_TimeLimit",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "sqs:ReceiveMessage",
      "Resource": "arn:aws:sqs:*:111122223333:queue1",
      "Condition" : {
         "DateGreaterThan" : {
            "aws:CurrentTime":"2009-01-31T12:00Z"
         },
         "DateLessThan" : {
            "aws:CurrentTime":"2009-01-31T15:00Z"
         }
      }
   }]
}
```

------

## 範例 7：授與所有許可給 CIDR 範圍的所有使用者
<a name="grant-all-permissions-to-all-users-in-cidr-range"></a>

以下範例政策授予所有使用者 (匿名使用者) 許可，對名為 `111122223333/queue1` 的佇列使用所有可共用的 Amazon SQS 動作，但僅限來自 `192.0.2.0/24` CIDR 範圍的請求。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id": "Queue1_Policy_UUID",
   "Statement": [{
      "Sid":"Queue1_AnonymousAccess_AllActions_AllowlistIP",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "sqs:*",
      "Resource": "arn:aws:sqs:*:111122223333:queue1",
      "Condition" : {
         "IpAddress" : {
            "aws:SourceIp":"192.0.2.0/24"
         }
      }
   }]
}
```

------

## 範例 8：不同 CIDR 範圍內使用者的允許清單和封鎖清單許可
<a name="allowlist-blocklist-permissions-for-users-in-different-cidr-ranges"></a>

以下範例政策有兩個陳述式：
+ 第一個陳述式授與 `192.0.2.0/24` CIDR 範圍內 (`192.0.2.188` 除外) 的所有使用者 (匿名使用者) 許可，對名為 `111122223333`/queue1 的佇列使用 `SendMessage` 動作。
+ 第二個陳述式封鎖 `12.148.72.0/23` CIDR 範圍內的所有使用者 (匿名使用者)，不允許使用佇列。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id": "Queue1_Policy_UUID",
   "Statement": [{
      "Sid":"Queue1_AnonymousAccess_SendMessage_IPLimit",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "sqs:SendMessage",
      "Resource": "arn:aws:sqs:*:111122223333:queue1",
      "Condition" : {
         "IpAddress" : {
            "aws:SourceIp":"192.0.2.0/24"
         },
         "NotIpAddress" : {
            "aws:SourceIp":"192.0.2.188/32"
         }
      }
   }, {
      "Sid":"Queue1_AnonymousAccess_AllActions_IPLimit_Deny",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "sqs:*",
      "Resource": "arn:aws:sqs:*:111122223333:queue1",
      "Condition" : {
         "IpAddress" : {
            "aws:SourceIp":"12.148.72.0/23"
         }
      }
   }]
}
```

------

# 搭配 Amazon SQS 存取政策語言使用自訂政策
<a name="sqs-creating-custom-policies"></a>

若要僅根據 AWS 帳戶 ID 授予基本許可 （例如 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)或 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html))，您不需要撰寫自訂政策。請改用 Amazon SQS [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_AddPermission.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_AddPermission.html)動作。

若要根據請求時間或請求者的 IP 地址等特定條件允許或拒絕存取，您必須建立自訂 Amazon SQS 政策，並使用 [SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html) 動作將其上傳。

**Topics**
+ [存取控制架構](sqs-creating-custom-policies-architecture.md)
+ [存取控制處理工作流程](sqs-creating-custom-policies-process-workflow.md)
+ [存取政策語言重要概念](sqs-creating-custom-policies-key-concepts.md)
+ [存取政策語言評估邏輯](sqs-creating-custom-policies-evaluation-logic.md)
+ [明確拒絕和預設拒絕之間的關係](sqs-creating-custom-policies-relationships-between-explicit-default-denials.md)
+ [自訂政策限制](sqs-limitations-of-custom-policies.md)
+ [自訂存取政策語言範例](sqs-creating-custom-policies-access-policy-examples.md)

# Amazon SQS 存取控制架構
<a name="sqs-creating-custom-policies-architecture"></a>

下圖說明 Amazon SQS 資源的存取控制。

![\[描述 Amazon SQS 資源的存取控制。\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/AccessPolicyLanguage_Arch_Overview.png)


![\[In the previous diagram, section number one.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-1-red.png) 您是資源擁有者。

![\[In the previous diagram, section number two.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-2-red.png) 服務中包含的資源 AWS （例如 Amazon SQS 佇列）。

![\[In the previous diagram, section number three.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-3-red.png) 您的政策。每個資源擁有一個政策是理想的做法。 AWS 此服務提供您用來上傳和管理政策的 API。

![\[In the previous diagram, section number four.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-4-red.png) 申請者及其傳入的 AWS 服務請求。

![\[In the previous diagram, section number five.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-5-red.png)存取政策語言評估代碼。這是 AWS 服務中的一組程式碼，可針對適用的政策評估傳入的請求，並判斷是否允許請求者存取資源。

# Amazon SQS 存取控制處理工作流程
<a name="sqs-creating-custom-policies-process-workflow"></a>

下圖說明使用 Amazon SQS 存取政策語言的一般控制存取流程。

![\[使用 Amazon SQS 存取政策語言進行存取控制的一般工作流程。\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/AccessPolicyLanguage_Basic_Flow.png)


![\[Figure one in the previous diagram.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-1-red.png)您為您的佇列撰寫 Amazon SQS 政策。

![\[Figure two in the previous diagram.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-2-red.png) 您可以將政策上傳至 AWS。 AWS 服務提供您用來上傳政策的 API。例如，您使用 Amazon SQS `SetQueueAttributes` 動作，為特定 Amazon SQS 佇列上傳政策。

![\[Figure three in the previous diagram.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-3-red.png)某人傳送請求，要求使用您的 Amazon SQS 佇列。

![\[Figure four in the previous diagram.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-4-red.png) Amazon SQS 會檢查所有可用Amazon SQS 政策，並判斷何者適用。

![\[Figure five in the previous diagram.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-5-red.png)Amazon SQS 評估政策並判定是否允許申請者使用您的佇列。

![\[Figure six in the previous diagram.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-6-red.png)根據政策評估結果，Amazon SQS 傳回 `Access denied` 錯誤給申請者或繼續處理請求。

# Amazon SQS 存取政策語言重要概念
<a name="sqs-creating-custom-policies-key-concepts"></a>

若要撰寫自己的政策，您必須熟悉 [JSON](http://json.org/) 和數個重要概念。

**Allow**  <a name="allow"></a>
將[效果](#effect)設為`allow`之[Statement](#statement)的結果。

**Action**  <a name="action"></a>
[Principal](#principal)獲許可執行的活動，通常是對 AWS提出請求。

**預設拒絕**  <a name="default-deny"></a>
沒有[Allow](#allow)或[明確拒絕](#explicit-deny)設定的[Statement](#statement)結果。

**Condition**  <a name="condition"></a>
有關[許可](#permission)的任何限制或詳細資訊。典型條件與日期和時間以及 IP 地址相關。

**效果**  <a name="effect"></a>
您想要[政策](#policy)的[Statement](#statement)在評估時間傳回的結果。您在撰寫政策陳述式時指定`deny`或`allow`。政策評估時間有三個可能結果：[預設拒絕](#default-deny)、[Allow](#allow)和[明確拒絕](#explicit-deny)。

**明確拒絕**  <a name="explicit-deny"></a>
將[效果](#effect)設為`deny`之[Statement](#statement)的結果。

**評估**  <a name="evaluation"></a>
Amazon SQS 根據 [政策](#policy) 用來判斷應拒絕或允許傳入請求的程序。

**發行者**  <a name="issuer"></a>
撰寫[政策](#policy)以授與資源許可的使用者。根據定義，發行者一律是資源擁有者。 AWS 不允許 Amazon SQS 使用者為他們未擁有的資源建立政策。

**索引鍵**  <a name="key"></a>
特定特性，即存取限制的基礎。

**許可**  <a name="permission"></a>
使用[Condition](#condition)和[索引鍵](#key)來允許或不允許存取資源的概念。

**政策**  <a name="policy"></a>
做為一個或多個**[陳述式](#statement)**之容器的文件。  

![\[包含陳述式 1 和陳述式 2 的政策 A 等同於包含陳述式 1 的政策 A，以及包含陳述式 2 的政策 B。\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/AccessPolicyLanguage_Statement_and_Policy.png)

Amazon SQS 使用政策來判斷是否將資源的存取權授與使用者。

**Principal**  <a name="principal"></a>
收到[政策](#policy)中[許可](#permission)的使用者。

**Resource**  <a name="resource"></a>
[Principal](#principal)請求存取的物件。

**Statement**  <a name="statement"></a>
以存取政策語言撰寫的單一許可正式描述，屬於更廣泛 [政策](#policy) 文件的一部分。

**要求者**  <a name="requester"></a>
傳送存取[Resource](#resource)請求的使用者。

# Amazon SQS 存取政策語言評估邏輯
<a name="sqs-creating-custom-policies-evaluation-logic"></a>

在評估時間，Amazon SQS 會判斷應該允許或是拒絕來自資源擁有者以外其他人的請求。評估邏輯遵循幾個基本規則：
+ 根據預設，會拒絕來自您以外任何人對使用您資源的所有請求。
+ *[Allow](sqs-creating-custom-policies-key-concepts.md#allow)* 會覆寫任何 *[預設拒絕](sqs-creating-custom-policies-key-concepts.md#default-deny)*。
+ *[明確拒絕](sqs-creating-custom-policies-key-concepts.md#explicit-deny)* 會覆寫任何 **allow**。
+ 評估政策的順序並不重要。

下圖詳細說明 Amazon SQS 如何評估存取許可的決定。

![\[描述 Amazon SQS 如何評估存取許可決策的流程圖。\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/AccessPolicyLanguage_Evaluation_Flow.png)


![\[In the previous diagram, number one.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-1-red.png) 決定以**預設拒絕**開始。

![\[In the previous diagram, number two.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-2-red.png) 強制執行程式碼會評估所有適用於請求的政策 (根據資源、主體、動作和條件)。強制執行程式碼評估政策的順序並不重要.

![\[In the previous diagram, number three.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-3-red.png) 強制執行程式碼會尋找可以套用到請求的**明確拒絕**指示。如果找到一個，強制執行程式碼會傳回**拒絕**的決定，然後完成程序。

![\[In the previous diagram, number four.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-4-red.png) 如果找不到**明確拒絕**指示，強制執行程式碼會尋找適用於請求的任何**允許**指示。如果找到一個，強制執行程式碼會傳回**允許**的決定，然後完成程序 (服務繼續處理請求)。

![\[In the previous diagram, number five.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-5-red.png) 如果找不到**允許**指示，則最後決定是**拒絕** (因為沒有**明確拒絕**或**允許**，這會被視為**預設拒絕**)。

# 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，則請求會產生**預設拒絕**。

如果不符合陳述式中的條件，請求會產生**預設拒絕**。如果符合陳述式中的所有條件，則請求會根據政策中的*元素值，產生[Allow](sqs-creating-custom-policies-key-concepts.md#allow)**或[明確拒絕](sqs-creating-custom-policies-key-concepts.md#explicit-deny)。**[效果](sqs-creating-custom-policies-key-concepts.md#effect)*政策未指定不符合條件時要做什麼，所以該狀況下的預設結果是**預設拒絕**。例如，您想要阻止來自南極的請求。您撰寫政策 A1，僅允許非來自南極的請求。下圖說明 Amazon SQS 政策。

![\[政策 A1，其中包含等於允許的效果，如果請求不是來自南極，則包含等於 的條件。\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-security-custom-policy-allow-request-if-not-from-antarctica.png)


如果使用者從美國傳送請求，則符合條件 (請求非來自南極)，請求會產生**允許**。不過，如果使用者從南極傳送請求，便不符合條件，請求預設為**預設拒絕**。您可以撰寫政策 A2 以明確拒絕來自南極的請求，將結果變更為**明確拒絕**。下圖說明該政策。

![\[政策 A2，其中包含等於拒絕的效果，如果請求來自南極，則包含等於 的條件。\]](http://docs.aws.amazon.com/zh_tw/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_tw/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 的**允許**，請求因此而被拒絕。

# Amazon SQS 自訂政策的限制
<a name="sqs-limitations-of-custom-policies"></a>

## 跨帳戶存取權
<a name="sqs-cross-account-access"></a>

跨帳戶許可權不會套用至下列動作：
+ `[AddPermission](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_AddPermission.html)`
+ `[CancelMessageMoveTask](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CancelMessageMoveTask.html)`
+ `[CreateQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html)`
+ `[DeleteQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteQueue.html)`
+ `[ListMessageMoveTask](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListMessageMoveTasks.html)`
+ `[ListQueues](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListQueues.html)`
+ `[ListQueueTags](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListQueueTags.html)`
+ `[RemovePermission](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_RemovePermission.html)`
+ `[SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)`
+ `[StartMessageMoveTask](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_StartMessageMoveTask.html)`
+ `[TagQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_TagQueue.html)`
+ `[UntagQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_UntagQueue.html)`

## 條件金鑰
<a name="sqs-condition-keys"></a>

目前，Amazon SQS 僅支援 [IAM 提供的條件金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#AvailableKeys)的有限子集。如需詳細資訊，請參閱 [Amazon SQS API 許可：動作和資源參考](sqs-api-permissions-reference.md)。

# 自訂 Amazon SQS 存取政策語言範例
<a name="sqs-creating-custom-policies-access-policy-examples"></a>

以下是典型 Amazon SQS 存取政策的範例。

## 範例 1：提供許可給一個帳戶
<a name="one-account"></a>

以下範例 Amazon SQS 政策提供允許對 AWS 帳戶 444455556666 擁有的 `queue2` 傳送及接收的 AWS 帳戶 111122223333 許可權。

------
#### [ JSON ]

****  

```
{   
   "Version":"2012-10-17",		 	 	 
   "Id": "UseCase1",
   "Statement" : [{
      "Sid": "1", 
      "Effect": "Allow",           
      "Principal": {
         "AWS": [
            "111122223333"
         ]
      },
      "Action": [
         "sqs:SendMessage",
         "sqs:ReceiveMessage"
      ], 
      "Resource": "arn:aws:sqs:us-east-2:444455556666:queue2"  
   }]
}
```

------

## 範例 2：提供許可給一或多個帳戶
<a name="two-accounts"></a>

下列範例 Amazon SQS 政策提供一或多個 AWS 帳戶 在特定期間內存取您帳戶擁有的佇列。有需要使用 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html) 動作來撰寫此政策並上傳到 Amazon SQS，因為 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_AddPermission.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_AddPermission.html) 動作在授與佇列存取權時不允許指定時間限制。

------
#### [ JSON ]

****  

```
{   
   "Version":"2012-10-17",		 	 	 
   "Id": "UseCase2",
   "Statement" : [{
      "Sid": "1", 
      "Effect": "Allow",           
      "Principal": {
         "AWS": [
            "111122223333",
            "444455556666"
         ]
      },
      "Action": [
         "sqs:SendMessage",
         "sqs:ReceiveMessage"
      ], 
      "Resource": "arn:aws:sqs:us-east-2:444455556666:queue2",
      "Condition": {
         "DateLessThan": {
            "AWS:CurrentTime": "2009-06-30T12:00Z"
         }
      }   
   }]
}
```

------

## 範例 3：提供許可給來自 Amazon EC2 執行個體的請求
<a name="requests-from-ec2"></a>

以下範例 Amazon SQS 政策提供許可給來自 Amazon SQS 執行個體的請求。此範例是根據「[範例 2：提供許可給一或多個帳戶](#two-accounts)」範例：限制對 2009 年 6 月 30 日中午 12 點 (UTC) 之前的存取權，它限制對 IP 範圍 `203.0.113.0/24` 的存取權。有需要使用 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html) 動作來撰寫此政策並上傳到 Amazon SQS，因為 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_AddPermission.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_AddPermission.html) 動作在授與佇列存取權時不允許指定 IP 地址限制。

------
#### [ JSON ]

****  

```
{   
   "Version":"2012-10-17",		 	 	 
   "Id": "UseCase3",
   "Statement" : [{
      "Sid": "1", 
      "Effect": "Allow",           
      "Principal": {
         "AWS": [
            "111122223333"
         ]
      },
      "Action": [
         "sqs:SendMessage",
         "sqs:ReceiveMessage"
      ], 
      "Resource": "arn:aws:sqs:us-east-2:444455556666:queue2",
      "Condition": {
         "DateLessThan": {
            "AWS:CurrentTime": "2009-06-30T12:00Z"
         },
         "IpAddress": {
            "AWS:SourceIp": "203.0.113.0/24"
         }
      }   
   }]
}
```

------

## 範例 4：拒絕特定帳戶的存取權
<a name="deny-account"></a>

下列範例 Amazon SQS 政策會拒絕對佇列的特定 AWS 帳戶 存取。此範例以「[範例 1：提供許可給一個帳戶](#one-account)」範例為基礎：拒絕存取指定的 AWS 帳戶。有需要使用 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html) 動作來撰寫此政策並上傳到 Amazon SQS，因為 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_AddPermission.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_AddPermission.html) 動作在授與佇列存取權時不允許拒絕佇列的存取權 (僅允許授與佇列的存取權)。

------
#### [ JSON ]

****  

```
{ 
   "Version":"2012-10-17",		 	 	 
   "Id": "UseCase4",
   "Statement" : [{
      "Sid": "1", 
      "Effect": "Deny",           
      "Principal": {
         "AWS": [
            "111122223333"
         ]
      },
      "Action": [
         "sqs:SendMessage",
         "sqs:ReceiveMessage"
      ], 
      "Resource": "arn:aws:sqs:us-east-2:444455556666:queue2"   
   }]
}
```

------

## 範例 5：如果不是來自 VPC 端點，則拒絕存取
<a name="deny-not-from-vpc"></a>

下列範例 Amazon SQS 政策會限制對 `queue1` 的存取：111122223333 只能從 VPC 端點 ID `vpce-1a2b3c4d` (使用 `aws:sourceVpce` 條件指定) 執行 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) 和 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html) 動作。如需詳細資訊，請參閱 [適用於 Amazon SQS 的 Amazon Virtual Private Cloud 端點](sqs-internetwork-traffic-privacy.md#sqs-vpc-endpoints)。

**注意**  
`aws:sourceVpce` 條件不需要 VPC 端點資源的 ARN，其只需要 VPC 端點 ID。
您可以透過在第二個陳述式中拒絕所有 Amazon SQS 動作 (`sqs:*`)，來修改下列範例以限制對特定​ VPC 端點的所有動作。然而，這類政策陳述式規定必須透過此政策中定義的特定 VPC 端點來做出所有動作 (包含修改佇列許可所需的管理動作)，可能可避免使用者在未來修改佇列許可。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id": "UseCase5",
   "Statement": [{
      "Sid": "1",
      "Effect": "Allow",
      "Principal": {
         "AWS": [
            "111122223333"
         ]
      },
      "Action": [
         "sqs:SendMessage",
         "sqs:ReceiveMessage"
      ],
         "Resource": "arn:aws:sqs:us-east-2:111122223333:queue1"
      },
      {
         "Sid": "2",
         "Effect": "Deny",
         "Principal": "*",
         "Action": [
            "sqs:SendMessage",
            "sqs:ReceiveMessage"
         ],
         "Resource": "arn:aws:sqs:us-east-2:111122223333:queue1",
         "Condition": {
            "StringNotEquals": {
               "aws:sourceVpce": "vpce-1a2b3c4d"
            }
         }
      }
   ]
}
```

------

# 使用臨時安全憑證搭配 Amazon SQS
<a name="sqs-using-temporary-security-credentials"></a>

除了使用自己的安全登入資料建立使用者之外，IAM 也可讓您將臨時安全登入資料授予任何使用者，讓使用者存取您的 AWS 服務和資源。您可以管理擁有 AWS 帳戶的使用者。您也可以為沒有 AWS 帳戶 （聯合身分使用者） 的系統管理使用者。此外，您為存取 AWS 資源而建立的應用程式也可以被視為「使用者」。

您可以使用這些臨時安全憑證，對 Amazon SQS 提出請求。API 程式庫會使用這些憑證來運算出必要的簽章值，以驗證您的請求。若使用過期的憑證傳送請求，Amazon SQS 會拒絕該請求。

**注意**  
您不能根據臨時憑證來設定政策。

## 先決條件
<a name="temporary-security-credentials-prerequisites"></a>

1. 使用 IAM 建立臨時安全憑證：
   + 安全權杖
   + 存取金鑰 ID
   + 私密存取金鑰

1. 準備您的登入字串搭配臨時存取金鑰 ID 和安全權杖。

1. 請使用臨時私密存取金鑰，而不是您自己的私密存取金鑰來簽署查詢 API 請求。

**注意**  
當您提交已簽署的查詢 API 請求，請使用臨時存取金鑰 ID 而不是自己的存取金鑰 ID，並包含安全權杖。如需暫時安全登入資料之 IAM 支援的詳細資訊，請參閱《*IAM 使用者指南*》中的[授予 AWS 資源的暫時存取權](https://docs.aws.amazon.com/IAM/latest/UserGuide/TokenBasedAuth.html)。

## 若要使用臨時安全憑證呼叫 Amazon SQS 查詢 API 動作
<a name="temporary-security-credentials-query-api"></a>

1. 使用 請求臨時安全字符 AWS Identity and Access Management。如需詳細資訊，請參閱《[IAM 使用者指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/CreatingSessionTokens.html)》中的*建立臨時安全登入資料以啟用 IAM 使用者的存取權*。

   IAM 會傳回安全權杖、存取金鑰 ID 和私密存取金鑰。

1. 請使用臨時存取金鑰 ID (而不是自己的存取金鑰 ID) 來準備查詢，並包含安全權杖。使用臨時私密存取金鑰 (而不是您自己的金鑰) 簽署您的請求。

1. 使用臨時存取金鑰 ID 和安全權杖來提交已簽署的查詢字串。

   以下範例示範如何使用臨時安全憑證，來驗證 Amazon SQS 請求。*`AUTHPARAMS`* 的結構取決於 API 請求的簽署。如需詳細資訊，請參閱《*Amazon Web Services 一般參考*》中的[簽署 AWS API 請求](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html)。

   ```
   https://sqs.us-east-2.amazonaws.com/
   ?Action=CreateQueue
   &DefaultVisibilityTimeout=40
   &QueueName=MyQueue
   &Attribute.1.Name=VisibilityTimeout
   &Attribute.1.Value=40
   &Expires=2020-12-18T22%3A52%3A43PST
   &SecurityToken=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   &AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE
   &Version=2012-11-05
   &AUTHPARAMS
   ```

   以下範例使用臨時安全憑證，使用 `SendMessageBatch` 動作傳送兩則訊息。

   ```
   https://sqs.us-east-2.amazonaws.com/
   ?Action=SendMessageBatch
   &SendMessageBatchRequestEntry.1.Id=test_msg_001
   &SendMessageBatchRequestEntry.1.MessageBody=test%20message%20body%201
   &SendMessageBatchRequestEntry.2.Id=test_msg_002
   &SendMessageBatchRequestEntry.2.MessageBody=test%20message%20body%202
   &SendMessageBatchRequestEntry.2.DelaySeconds=60
   &Expires=2020-12-18T22%3A52%3A43PST
   &SecurityToken=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
   &AWSAccessKeyId=AKIAI44QH8DHBEXAMPLE
   &Version=2012-11-05
   &AUTHPARAMS
   ```

# 具有最低權限政策的加密 Amazon SQS 佇列的存取管理
<a name="sqs-least-privilege-policy"></a>

您可以使用 Amazon SQS，並透過使用與 [AWS Key Management Service (KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 整合的伺服器端加密 (SSE) 來交換應用程式之間的敏感資料。透過整合 Amazon SQS 和 AWS KMS，您可以集中管理保護 Amazon SQS 的金鑰，以及保護其他 AWS 資源的金鑰。

多個 AWS 服務可以充當將事件傳送至 Amazon SQS 的事件來源。若要讓事件來源存取加密的 Amazon SQS 佇列，您需要使用[客戶受管](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) AWS KMS 金鑰來設定佇列。然後，使用金鑰政策來允許服務使用所需的 AWS KMS API 方法。此服務也需要驗證存取權才能讓佇列傳送事件。您可以使用 Amazon SQS 政策來達成此目的，這是一項資源型政策，可用來控制對 Amazon SQS 佇列及其資料的存取。

以下各節提供有關如何透過 Amazon SQS 政策和 AWS KMS 金鑰政策控制對加密 Amazon SQS 佇列的存取的資訊。本指南中的政策將會協助您獲得[最低權限](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)。

本指南也說明資源型政策如何使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)、[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid) 全域 IAM 條件內容索引鍵來解決[混淆代理人問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。

**Topics**
+ [

## 概觀
](#sqs-least-privilege-overview)
+ [

## Amazon SQS 的最低權限金鑰政策
](#sqs-least-privilege-use-case)
+ [

## 適用於無效字母佇列的 Amazon SQS 政策陳述式
](#sqs-policy-dlq)
+ [

## 防止跨服務混淆代理人問題
](#sqs-confused-deputy-prevention)
+ [

## 使用 IAM Access Analyzer 檢閱跨帳户存取權
](#sqs-cross-account-findings)

## 概觀
<a name="sqs-least-privilege-overview"></a>

在本主題中，我們會引導您完成一個常見使用案例，說明如何建立金鑰政策和 Amazon SQS 佇列政策。這個使用案例如下圖所示。

![\[將 Amazon SNS 訊息發佈到 Amazon SQS。\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-least-privilege.png)


在此範例中，訊息產生者是 [Amazon Simple Notification Service (SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) 主題，其設定為將訊息散發到加密的 Amazon SQS 佇列。訊息取用者是一種運算服務，例如 [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 函數、[Amazon Elastic Compute Cloud (EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) 執行個體或 [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) 容器。然後，您的 Amazon SQS 佇列會設定為將失敗訊息傳送到[無效字母佇列 (DLQ)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html)。這很適合用來為應用程式或傳訊系統偵錯，因為 DLQ 可讓您隔離未取用的訊息以判斷無法成功處理的原因。在本主題定義的解決方案中，使用運算服務 (例如 Lambda 函數) 來處理存放在 Amazon SQS 佇列中的訊息。如果訊息取用者位於虛擬私有雲端 (VPC) 中，則本指南中包含的 [`DenyReceivingIfNotThroughVPCE`](#sqs-restrict-message-to-endpoint) 政策陳述式可讓您將訊息接收限制為該特定 VPC。

**注意**  
本指南僅包含政策聲明形式的必要 IAM 許可。若要建構政策，您需要將陳述式新增至 Amazon SQS 政策或 AWS KMS 金鑰政策。本指南不提供如何建立 Amazon SQS 佇列或 AWS KMS 金鑰的指示。如需有關如何建立這些資源的指示，請參閱[建立 Amazon SQS 佇列](creating-sqs-standard-queues.md#step-create-standard-queue)和[建立金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。  
本指南中定義的 Amazon SQS 政策不支援將訊息直接重新推動到相同或不同的 Amazon SQS 佇列。

## Amazon SQS 的最低權限金鑰政策
<a name="sqs-least-privilege-use-case"></a>

在本節中，我們會針對您用來加密 Amazon SQS 佇列的客戶受管金鑰，說明 AWS KMS 中所需的最低權限許可。透過這些許可權，您可以在實作最低權限時限制只有預定實體的存取權。金鑰政策必須包含以下政策陳述式，詳述如下：
+ [授予 AWS KMS 金鑰的管理員許可](#sqs-use-case-kms-admin-permissions)
+ [授予金鑰中繼資料的唯讀存取權](#sqs-use-case-read-only-permissions)
+ [將 Amazon SNS KMS 許可權授予 Amazon SNS，以將訊息發佈到佇列](#sqs-use-case-publish-messages-permissions)
+ [允許取用者解密佇列中的訊息](#sqs-use-case-decrypt-messages-permissions)

### 授予 AWS KMS 金鑰的管理員許可
<a name="sqs-use-case-kms-admin-permissions"></a>

若要建立 AWS KMS 金鑰，您需要提供 AWS KMS 管理員許可給用來部署 AWS KMS 金鑰的 IAM 角色。這些管理員權定義於下列 `AllowKeyAdminPermissions` 政策陳述式中。當您將此陳述式新增至 AWS KMS 金鑰政策時，請務必以用來部署 AWS KMS 金鑰、管理 AWS KMS 金鑰或兩者的 IAM 角色 Amazon Resource Name (ARN) 取代 *<admin-role ARN>*。這可以是部署管道的 IAM 角色，也可以是 [AWS Organizations](https://aws.amazon.com/organizations/) 中的[組織管理員角色](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_access.html)。

```
{
  "Sid": "AllowKeyAdminPermissions",
  "Effect": "Allow",
  "Principal": {
    "AWS": [
      "<admin-role ARN>"
    ]
  },
  "Action": [
    "kms:Create*",
    "kms:Describe*",
    "kms:Enable*",
    "kms:List*",
    "kms:Put*",
    "kms:Update*",
    "kms:Revoke*",
    "kms:Disable*",
    "kms:Get*",
    "kms:Delete*",
    "kms:TagResource",
    "kms:UntagResource",
    "kms:ScheduleKeyDeletion",
    "kms:CancelKeyDeletion"
  ],
  "Resource": "*"
}
```

**注意**  
在 AWS KMS 金鑰政策中，`Resource`元素的值必須是 `*`，這表示「此 AWS KMS 金鑰」。星號 (`*`) 可識別 AWS KMS 附加金鑰政策的金鑰。

### 授予金鑰中繼資料的唯讀存取權
<a name="sqs-use-case-read-only-permissions"></a>

若要授予其他 IAM 角色對金鑰中繼資料的唯讀存取權，請將 `AllowReadAccessToKeyMetaData` 陳述式新增至您的金鑰政策。例如，下列陳述式可讓您列出帳戶中的所有 AWS KMS 金鑰，以供稽核之用。此陳述式會授予 AWS 根使用者對金鑰中繼資料的唯讀存取權。因此，當帳戶中的任何 IAM 主體在身分型政策具有下列陳述式中列出的許可權時，都可以存取金鑰中繼資料：`kms:Describe*`、`kms:Get*` 和 `kms:List*`。確實將 *<account-ID>* 取代為您自己的資訊。

```
{
  "Sid": "AllowReadAcesssToKeyMetaData",
  "Effect": "Allow",
  "Principal": {
    "AWS": [
      "arn:aws:iam::<accountID>:root"
    ]
  },
  "Action": [
    "kms:Describe*",
    "kms:Get*",
    "kms:List*"
  ],
  "Resource": "*"
}
```

### 將 Amazon SNS KMS 許可權授予 Amazon SNS，以將訊息發佈到佇列
<a name="sqs-use-case-publish-messages-permissions"></a>

若要允許 Amazon SNS 主題將訊息發佈到加密的 Amazon SQS 佇列，請將 `AllowSNSToSendToSQS` 政策聲明新增至您的金鑰政策。此陳述式授予 Amazon SNS 使用 AWS KMS 金鑰發佈至 Amazon SQS 佇列的許可。確實將 *<account-ID>* 取代為您自己的資訊。

**注意**  
陳述`Condition`式中的 只會限制存取相同 AWS 帳戶中的 Amazon SNS 服務。

```
{
  "Sid": "AllowSNSToSendToSQS",
  "Effect": "Allow",
  "Principal": {
    "Service": [
      "sns.amazonaws.com"
    ]
  },
  "Action": [
    "kms:Decrypt",
    "kms:GenerateDataKey"
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "aws:SourceAccount": "<account-id>"
    }
  }
}
```

### 允許取用者解密佇列中的訊息
<a name="sqs-use-case-decrypt-messages-permissions"></a>

下列 `AllowConsumersToReceiveFromTheQueue` 陳述式授予 Amazon SQS 訊息取用者將從加密之 Amazon SQS 佇列接收到的訊息解密的必要許可。附加政策陳述式時，請將 *<取用者的執行期角色 ARN>* 取代為訊息取用者的 IAM 執行期角色 ARN。

```
{
  "Sid": "AllowConsumersToReceiveFromTheQueue",
  "Effect": "Allow",
  "Principal": {
    "AWS": [
      "<consumer's execution role ARN>"
    ]
  },
  "Action": [
    "kms:Decrypt"
  ],
  "Resource": "*"
}
```

### 最低權限 Amazon SQS 政策
<a name="sqs-use-case-specific-policy"></a>

本節引導您針對本指南所涵蓋的使用案例 (例如 Amazon SNS 轉換至 Amazon SQS) 的最低權限 Amazon SQS 佇列政策。定義的策略旨在透過使用 `Deny` 和 `Allow` 陳述式的混合來防止意外存取。這些 `Allow` 陳述式會授予對預定實體的存取權。這些 `Deny` 陳述式可防止其他非預定實體存取 Amazon SQS 佇列，同時將政策條件內的預定實體排除在外。

Amazon SQS 政策包含下列陳述式，詳述如下：
+ [限制 Amazon SQS 管理許可權](#sqs-use-case-restrict-permissions)
+ [限制來自指定之組織的 Amazon SQS 佇列動作](#sqs-use-case-restrict-permissions-from-org)
+ [將 Amazon SQS 許可授予取用者](#sqs-use-grant-consumer-permissions)
+ [傳輸中強制加密](#sqs-encryption-in-transit)
+ [限制訊息傳輸至特定 Amazon SNS 主題](#sqs-restrict-transmission-to-topic)
+ [(選用) 限制接收特定 VPC 端點的訊息](#sqs-restrict-message-to-endpoint)

### 限制 Amazon SQS 管理許可權
<a name="sqs-use-case-restrict-permissions"></a>

以下 `RestrictAdminQueueActions` 政策陳述式將 Amazon SQS 管理許可權限制為僅允許用於部署佇列、管理佇列或兩者的一或多個 IAM 角色。請務必使用您自己的資訊取代 *<預留位置值>*。指定用於部署 Amazon SQS 佇列的 IAM 角色的 ARN，以及任何應具有 Amazon SQS 管理許可權之管理員角色的 ARN。

```
{
  "Sid": "RestrictAdminQueueActions",
  "Effect": "Deny",
  "Principal": {
    "AWS": "*"
  },
  "Action": [
    "sqs:AddPermission",
    "sqs:DeleteQueue",
    "sqs:RemovePermission",
    "sqs:SetQueueAttributes"
  ],
  "Resource": "<SQS Queue ARN>",
  "Condition": {
    "StringNotLike": {
      "aws:PrincipalARN": [
        "arn:aws:iam::<account-id>:role/<deployment-role-name>",
        "<admin-role ARN>"
      ]
    }
  }
}
```

### 限制來自指定之組織的 Amazon SQS 佇列動作
<a name="sqs-use-case-restrict-permissions-from-org"></a>

若要協助保護 Amazon SQS 資源免於外部存取 (由您的 [AWS 組織](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)外的實體存取)，請使用下列陳述式。此陳述式將 Amazon SQS 佇列存取權限制於您在 `Condition` 中指定的組織。請務必將 *<SQS queue ARN>* 取代為用於部署 Amazon SQS 佇列之 IAM 角色的 ARN 取代；以及將 *<org-id>* 取代為您的組織 ID。

```
{
  "Sid": "DenyQueueActionsOutsideOrg",
  "Effect": "Deny",
  "Principal": {
    "AWS": "*"
  },
  "Action": [
    "sqs:AddPermission",
    "sqs:ChangeMessageVisibility",
    "sqs:DeleteQueue",
    "sqs:RemovePermission",
    "sqs:SetQueueAttributes",
    "sqs:ReceiveMessage"
  ],
  "Resource": "<SQS queue ARN>",
  "Condition": {
    "StringNotEquals": {
      "aws:PrincipalOrgID": [
        "<org-id>"
      ]
    }
  }
}
```

### 將 Amazon SQS 許可授予取用者
<a name="sqs-use-grant-consumer-permissions"></a>

若要從 Amazon SQS 佇列接收訊息，您需要向訊息取用者提供必要的許可。下列政策陳述式授予您指定之取用者取用 Amazon SQS 佇列訊息的必要許可。將陳述式新增到 Amazon SQS 政策時，請務必將 *<取用者的 IAM 執行期角色 ARN>* 取代為取用者所使用之 IAM 執行期角色的 ARN；並將 *<SQS 佇列 ARN>* 取代為用於部署 Amazon SQS 佇列的 IAM 角色的 ARN。

```
{
  "Sid": "AllowConsumersToReceiveFromTheQueue",
  "Effect": "Allow",
  "Principal": {
    "AWS": "<consumer's IAM execution role ARN>"
  },
  "Action": [
    "sqs:ChangeMessageVisibility",
    "sqs:DeleteMessage",
    "sqs:GetQueueAttributes",
    "sqs:ReceiveMessage"
  ],
  "Resource": "<SQS queue ARN>"
}
```

若要防止其他實體從 Amazon SQS 佇列接收訊息，請將該 `DenyOtherConsumersFromReceiving` 陳述式新增至 Amazon SQS 佇列政策。此陳述式會將訊息消取用限制在您指定的取用者，即使其他取用者的身分權限會授予他們存取權，也不允許其他取用者擁有存取權。確實將 *<SQS 佇列 ARN>* 和 *<取用者的執行期角色 ARN>* 取代為您自己的資訊。

```
{
  "Sid": "DenyOtherConsumersFromReceiving",
  "Effect": "Deny",
  "Principal": {
    "AWS": "*"
  },
  "Action": [
    "sqs:ChangeMessageVisibility",
    "sqs:DeleteMessage",
    "sqs:ReceiveMessage"
  ],
  "Resource": "<SQS queue ARN>",
  "Condition": {
    "StringNotLike": {
      "aws:PrincipalARN": "<consumer's execution role ARN>"
    }
  }
}
```

### 傳輸中強制加密
<a name="sqs-encryption-in-transit"></a>

下列 `DenyUnsecureTransport` 政策陳述式強制取用者和生產者使用安全通道 (TLS 連線) 從 Amazon SQS 佇列傳送和接收訊息。請務必將 *<SQS 佇列 ARN>* 取代為用於部署 Amazon SQS 佇列的 IAM 角色的 ARN。

```
{
  "Sid": "DenyUnsecureTransport",
  "Effect": "Deny",
  "Principal": {
    "AWS": "*"
  },
  "Action": [
    "sqs:ReceiveMessage",
    "sqs:SendMessage"
  ],
  "Resource": "<SQS queue ARN>",
  "Condition": {
    "Bool": {
      "aws:SecureTransport": "false"
    }
  }
}
```

### 限制訊息傳輸至特定 Amazon SNS 主題
<a name="sqs-restrict-transmission-to-topic"></a>

以下 `AllowSNSToSendToTheQueue` 政策陳述式允許指定 Amazon SNS 主題將訊息傳送至 Amazon SQS 佇列。請務必將 *<SQS 佇列 ARN>* 取代為用於部署 Amazon SQS 佇列的 IAM 角色的 ARN；並將 *<SNS 主題 ARN>* 取代為 Amazon SNS 主題 ARN。

```
{
  "Sid": "AllowSNSToSendToTheQueue",
  "Effect": "Allow",
  "Principal": {
    "Service": "sns.amazonaws.com"
  },
  "Action": "sqs:SendMessage",
  "Resource": "<SQS queue ARN>",
  "Condition": {
    "ArnLike": {
      "aws:SourceArn": "<SNS topic ARN>"
    }
  }
}
```

下列 `DenyAllProducersExceptSNSFromSending` 政策陳述式可防止其他生產者傳送訊息至佇列。將 *<SQS 佇列 ARN>* 和 *<SNS 主題 ARN>* 取代為您自己的資訊。

```
{
  "Sid": "DenyAllProducersExceptSNSFromSending",
  "Effect": "Deny",
  "Principal": {
    "AWS": "*"
  },
  "Action": "sqs:SendMessage",
  "Resource": "<SQS queue ARN>",
  "Condition": {
    "ArnNotLike": {
      "aws:SourceArn": "<SNS topic ARN>"
    }
  }
}
```

### (選用) 限制接收特定 VPC 端點的訊息
<a name="sqs-restrict-message-to-endpoint"></a>

若要限制只接收特定 [VPC 端點](https://aws.amazon.com/about-aws/whats-new/2018/12/amazon-sqs-vpc-endpoints-aws-privatelink/)的訊息，請將以下政策陳述式新增至 Amazon SQS 佇列政策。除非訊息來自所需的 VPC 端點，否則此陳述式可防止訊息取用者從佇列接收訊息。將 *<SQS 佇列 ARN>* 取代為用於部署 Amazon SQS 佇列之 IAM 角色的 ARN，以及將 *<vpce\$1id>* 取代為 VPC 端點的 ID。

```
{
  "Sid": "DenyReceivingIfNotThroughVPCE",
  "Effect": "Deny",
  "Principal": "*",
  "Action": [
    "sqs:ReceiveMessage"
  ],
  "Resource": "<SQS queue ARN>",
  "Condition": {
    "StringNotEquals": {
      "aws:sourceVpce": "<vpce id>"
    }
  }
}
```

## 適用於無效字母佇列的 Amazon SQS 政策陳述式
<a name="sqs-policy-dlq"></a>

將以下政策陳述式 (以其陳述式 ID 識別) 新增至您的 DLQ 存取政策：
+ `RestrictAdminQueueActions`
+ `DenyQueueActionsOutsideOrg`
+ `AllowConsumersToReceiveFromTheQueue`
+ `DenyOtherConsumersFromReceiving`
+ `DenyUnsecureTransport`

除了將上述政策陳述式新增至 DLQ 存取政策之外，您也應該新增陳述式以限制傳輸至 Amazon SQS 佇列的訊息，如下節所述。

### 限制 Amazon SQS 佇列的訊息傳輸
<a name="sqs-dlq-restrict-permissions"></a>

若要限制只存取來自相同帳戶的 Amazon SQS 佇列，請將以下 `DenyAnyProducersExceptSQS` 政策陳述式新增至 DLQ 佇列政策。此陳述式不會將訊息傳輸限制到特定佇列，因為您需要在建立主要佇列之前部署 DLQ，因此在建立 DLQ 時不會知道 Amazon SQS ARN。如果您需要只限制對一個 Amazon SQS 佇列的存取，請在知道時使用 Amazon SQS 來源佇列的 ARN 來修改 `Condition` 中的 `aws:SourceArn`。

```
{
  "Sid": "DenyAnyProducersExceptSQS",
  "Effect": "Deny",
  "Principal": {
    "AWS": "*"
  },
  "Action": "sqs:SendMessage",
  "Resource": "<SQS DLQ ARN>",
  "Condition": {
    "ArnNotLike": {
      "aws:SourceArn": "arn:aws:sqs:<region>:<account-id>:*"
    }
  }
}
```

**重要**  
本指南中定義的 Amazon SQS 佇列政策不會將 `sqs:PurgeQueue` 動作限制為一或多個特定 IAM 角色。`sqs:PurgeQueue` 動作可讓您刪除 Amazon SQS 佇列中的所有訊息。您也可以使用此動作在不取代 Amazon SQS 佇列的情況下變更訊息格式。為應用程式偵錯時，您可以清除 Amazon SQS 佇列移除可能的錯誤訊息。測試應用程式時，您可以透過 Amazon SQS 佇列驅動大量訊息，然後在進入生產之前清除佇列以重新開始。不將此動作限制為特定角色的原因是，在部署 Amazon SQS 佇列時可能不知道此角色。您必須將此許可權新增至角色的身分型政策，才能清除佇列。

## 防止跨服務混淆代理人問題
<a name="sqs-confused-deputy-prevention"></a>

[混淆代理人問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)屬於安全性議題，其中沒有執行動作許可的實體可以強制具有更多權限的實體執行該動作。為了避免這種情況，如果您提供第三方 （稱為跨帳戶） 或其他 AWS 服務 （稱為跨服務） 存取您帳戶中的資源， AWS 會提供可協助您保護帳戶的工具。本節中的政策陳述式可幫助您預防跨服務混淆代理人問題。

在某個服務 (呼叫服務) 呼叫另一個服務 (被呼叫服務) 時，可能會發生跨服務模擬。可以操縱呼叫服務來使用其許可，以其不應有存取許可的方式對其他客戶的資源採取動作。為協助防範此問題，本文中定義的資源型政策會使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)、[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid)全域 IAM 條件內容索引鍵。這會限制服務對 AWS Organizations 中特定資源、特定帳戶或特定組織的許可。

## 使用 IAM Access Analyzer 檢閱跨帳户存取權
<a name="sqs-cross-account-findings"></a>

您可以使用 [AWS IAM Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html) 檢閱 Amazon SQS 佇列政策和 AWS KMS 金鑰政策，並在 Amazon SQS 佇列或 AWS KMS 金鑰授予外部實體存取權時提醒您。IAM Access Analyzer 可協助識別組織與帳戶中，與信任區域外實體共用的[資源](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-resources.html)。此信任區域可以是您在啟用 IAM Access Analyzer 時指定的 AWS Organizations 內的 AWS 帳戶或組織。

IAM Access Analyzer 會使用邏輯式推理來分析 AWS 環境中以資源為基礎的政策，藉此識別與外部主體共用的資源。針對信任區域外共用資源的每一個執行個體，Access Analyzer 都會產生一份調查結果。[調查結果](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-findings.html)包括存取權及其被授與存取的外部主體的資訊。請檢閱調查結果，判斷此為有意為之且安全的存取權，還是非預期且有安全風險的存取。對於任何非預定的存取，請檢閱受影響的政策並加以修正。如需 IAM Access Analyzer AWS 如何識別意外存取 AWS 資源的詳細資訊，請參閱此[部落格文章](https://aws.amazon.com/blogs/aws/identify-unintended-resource-access-with-aws-identity-and-access-management-iam-access-analyzer/)。

如需 AWS IAM Access Analyzer 的詳細資訊，請參閱 [AWS IAM Access Analyzer 文件](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html)。

# Amazon SQS API 許可：動作和資源參考
<a name="sqs-api-permissions-reference"></a>

當您設定 [存取控制](security_iam_service-with-iam.md#access-control) 並撰寫可連接到 IAM 身分的許可政策時，可以使用以下表格做為參考。資料表清單每個 Amazon Simple Queue Service 動作、您可以授予執行動作許可的對應動作，以及您可以授予許可 AWS 的資源。

在政策的 `Action` 欄位中指定動作，然後在政策的 `Resource` 欄位中指定資源值。若要指定動作，請使用 `sqs:` 字首後接 動作名稱 (例如，`sqs:CreateQueue`)。

目前，Amazon SQS 支援 [IAM 中提供的全域條件內容金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。

使用捲軸查看資料表的其餘部分。


**Amazon Simple Queue Service API 和動作所需的許可**  
<a name="sqs-api-and-required-permissions-for-actions-table"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-api-permissions-reference.html)