

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

# 在 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)。