

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

# 對 Amazon SQS 中的存取遭拒錯誤進行故障診斷
<a name="troubleshooting-access-denied"></a>

下列主題涵蓋 Amazon SQS API 呼叫最常見的原因`AccessDenied`或`AccessDeniedException`錯誤。如需如何對這些錯誤進行故障診斷的詳細資訊，請參閱 *AWS 知識中心指南*中的[如何對 Amazon SQS API 呼叫上的「AccessDenied」或「AccessDeniedException」錯誤進行故障診斷？](https://repost.aws/knowledge-center/sqs-accessdenied-errors)。

**錯誤訊息範例：**

```
An error occurred (AccessDenied) when calling the SendMessage operation: Access to
        the resource https://sqs.us-east-1.amazonaws.com/ is denied.
```

**- 或 -**

```
An error occurred (KMS.AccessDeniedException) when calling the SendMessage
        operation: User: arn:aws:iam::xxxxx:user/xxxx is not authorized to perform:
        kms:GenerateDataKey on resource: arn:aws:kms:us-east-1:xxxx:key/xxxx with an explicit
        deny.
```

## Amazon SQS 佇列政策和 IAM 政策
<a name="sqs-queue-policy-iam-policy"></a>

若要驗證申請者是否具有執行 Amazon SQS 操作的適當許可，請執行下列動作：
+ 識別進行 Amazon SQS API 呼叫的 IAM 主體。如果 IAM 主體來自相同的帳戶，則 Amazon SQS 佇列政策或 AWS Identity and Access Management (IAM) 政策必須包含明確允許存取動作的許可。
+ 如果委託人是 IAM 實體：
  + 您可以透過檢查 的右上角或使用 [`aws sts get-caller-identity`](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/get-caller-identity.html)命令來識別您的 IAM 使用者 AWS 管理主控台或角色。
  + 檢查與 IAM 使用者或角色相關的 IAM 政策。您可以使用下列其中一種方法：
    + 使用 IAM 政策[模擬器測試 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html)。
    + 檢閱不同的 [IAM 政策類型](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policy-types)。
  + 如有需要，請[編輯您的 IAM 使用者政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html)。
  + 檢查佇列政策並視需要[編輯](sqs-configure-add-permissions.md)。
+ 如果委託人是 AWS 服務，則 Amazon SQS 佇列政策必須明確允許存取。
+ 如果委託人是跨帳戶委託人，則 Amazon SQS 佇列政策和 IAM 政策都必須明確允許存取。
+ 如果政策使用條件元素，請檢查條件是否限制存取。

**重要**  
任一政策中的明確拒絕都會覆寫明確允許。以下是 [Amazon SQS 政策](sqs-basic-examples-of-sqs-policies.md)的一些基本範例。

## AWS Key Management Service 許可
<a name="kms-permissions"></a>

如果您的 Amazon SQS 佇列已[開啟伺服器端加密 (SSE)](sqs-server-side-encryption.md) 並受客戶管理 AWS KMS key，則必須同時將許可授予生產者和消費者。若要確認佇列是否已加密，您可以使用 [`GetQueueAttributes`](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueAttributes.html) API `KmsMasterKeyId` 屬性，或從加密下的佇列主控台進行**。**
+ [生產者的必要許可](sqs-key-management.md#send-to-encrypted-queue)：

  ```
  {
  "Effect": "Allow",
  "Action": [
      "kms:Decrypt",
      "kms:GenerateDataKey"
  ],
  "Resource": "<Key ARN>"
  }
  ```
+ [取用者所需的許可](sqs-key-management.md#receive-from-encrypted-queue)：

  ```
  {
  "Effect": "Allow",
  "Action": [
      "kms:Decrypt"
  ],
  "Resource": "<Key ARN>"
  }
  ```
+ [跨帳戶存取](sqs-key-management.md)的必要許可：

  ```
  {
  "Effect": "Allow",
  "Action": [         
      "kms:DescribeKey",
      "kms:Decrypt",
      "kms:ReEncrypt",
      "kms:GenerateDataKey"
  ],
  "Resource": "<Key ARN>"
  }
  ```

選擇下列其中一個選項來啟用 Amazon SQS 佇列的加密：
+ [SSE-Amazon SQS](sqs-server-side-encryption.md) （由 Amazon SQS 服務建立和管理的加密金鑰）。
+ [AWS 受管預設金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) (alias/aws/sqs)
+ [客戶受管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)

不過，如果您使用的是 AWS受管 [KMS 金鑰](sqs-key-management.md)，則無法修改預設金鑰政策。因此，若要提供其他服務和跨帳戶的存取權，請使用客戶受管金鑰。這樣做可讓您編輯金鑰政策。

## VPC 端點政策
<a name="vpc-endpoint-policy"></a>

如果您[透過 Amazon Virtual Private Cloud (Amazon VPC) 端點存取 Amazon SQS Amazon Virtual Private Cloud](sqs-internetwork-traffic-privacy.md#sqs-vpc-endpoints)，Amazon SQS VPC 端點政策必須允許存取。您可以為 Amazon SQS 的 Amazon VPC 端點建立政策，您可以在其中指定下列項目：

1. 可執行動作的主體。

1. 可執行的動作。

1. 可供執行動作的資源。

在下列範例中，VPC 端點政策指定允許 IAM 使用者 {{MyUser}} 傳送訊息至 Amazon SQS 佇列 {{MyQueue}}。其他動作、IAM 使用者和 Amazon SQS 資源會被拒絕透過 VPC 端點存取。

```
{
   "Statement": [{
      "Action": ["sqs:SendMessage"],
      "Effect": "Allow",
      "Resource": "arn:aws:sqs:us-east-2:123456789012:{{MyQueue}}",
      "Principal": {
        "AWS": "arn:aws:iam:123456789012:user/{{MyUser}}"
      }
   }]
}
```

## 組織服務控制政策
<a name="organization-control-policy"></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)。