

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

# 使用加密的 Amazon SQS 佇列訂閱設定 Amazon SNS 主題加密 Amazon SQS
<a name="sns-enable-encryption-for-topic-sqs-queue-subscriptions"></a>

您可以對主題啟用伺服器端加密 (SSE) 來保護其資料。若要允許 Amazon SNS 將訊息傳送到加密的 Amazon SQS 佇列，與 Amazon SQS 佇列相關聯的客戶受管金鑰必須具有政策陳述式，以授予 Amazon SNS 服務主體對 AWS KMS API 動作 `GenerateDataKey` 和 `Decrypt` 的存取權。如需使用 SSE 的詳細資訊，請參閱 [使用伺服器端加密保護 Amazon SNS 資料](sns-server-side-encryption.md)。

本主題說明如何使用 為具有加密 Amazon SQS 佇列訂閱的 Amazon SNS Amazon SQS AWS 管理主控台。

## 步驟 1：建立自訂 KMS 金鑰
<a name="create-custom-cmk"></a>

1. 用至少具有 `AWSKeyManagementServicePowerUser` 政策的使用者登入 [AWS KMS 主控台](https://console.aws.amazon.com/kms/)。

1. 選擇 **Create a key** (建立金鑰)。

1. 若要建立對稱加密 KMS 金鑰，在 **Key type** (金鑰類型) 欄位中，選擇 **Symmetric** (對稱)。

   如需如何在 AWS KMS 主控台中建立非對稱 KMS 金鑰的相關資訊，請參閱[建立非對稱 KMS 金鑰 (主控台)](https://docs.aws.amazon.com/kms/latest/developerguide/asymm-create-key.html#create-asymmetric-keys-console)。

1. 在 **Key usage** (金鑰用途) 欄位中，系統會自動選取 **Encrypt and decrypt** (加密和解密) 選項。

   如需如何建立可以產生和驗證 MAC 代碼的 KMS 金鑰的相關資訊，請參閱[建立 HMAC KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/hmac-create-key.html)。

   如需**進階選項**的相關資訊，請參閱[特殊用途金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/key-types.html)。

1. 選擇**下一步**。

1. 輸入 KMS 金鑰的別名。別名名稱的開頭不可以是 **aws/**。字**aws/**首由 Amazon Web Services 保留，以在您的帳戶 AWS 受管金鑰 中代表 。
**注意**  
新增、刪除或更新別名可允許或拒絕 KMS 金鑰的許可。如需詳細資訊，請參閱 [ABAC for AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/abac.html) 和[使用別名來控制對 KMS 金鑰的存取](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#hmac-key-concept)。

   別名是您可用來識別 KMS 金鑰的顯示名稱。我們建議您選擇別名來表示您計劃保護的資料類型，或您計劃搭配 KMS 金鑰一起使用的應用程式。

   在 AWS 管理主控台中建立 KMS 金鑰時需要別名。但在使用 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作時是選用的。

1. (選用) 輸入 KMS 金鑰的描述。

   您可以立即新增描述或在任意時間更新，除非[金鑰狀態](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html)為 `Pending Deletion` 或 `Pending Replica Deletion`。若要新增、變更或刪除現有客戶受管金鑰的描述，[請在 中編輯描述](https://docs.aws.amazon.com/kms/latest/developerguide/editing-keys.html) AWS 管理主控台 或使用 [UpdateKeyDescription](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateKeyDescription.html) 操作。

1. (選用) 輸入標籤索引鍵和選用標籤值。若要將其他標籤新增至 KMS 金鑰，請選擇 **Add tag** (新增標籤)。
**注意**  
標記或取消標記 KMS 金鑰可以允許或拒絕 KMS 金鑰的許可。如需詳細資訊，請參閱 [ABAC for AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/abac.html) 和[使用標籤來控制對 KMS 金鑰的存取](https://docs.aws.amazon.com/kms/latest/developerguide/tag-authorization.html)。

   當您將標籤新增至 AWS 資源時， AWS 會產生成本分配報告，其中包含依標籤彙總的用量和成本。標籤也可以用來控制 KMS 金鑰的存取。如需標記 KMS 金鑰的詳細資訊，請參閱[標記金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/tagging-keys.html)和 [ABAC for AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/abac.html)。

1. 選擇**下一步**。

1. 選取可管理 KMS 金鑰的 IAM 使用者和角色。
**注意**  
此金鑰政策提供此 KMS 金鑰的完整 AWS 帳戶 控制權。它允許帳戶管理員使用 IAM 政策授予其他主體管理 KMS 金鑰的許可。如需詳細資訊，請參閱[預設金鑰政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html)。  
   
IAM 最佳實務不建議使用具有長期憑證的 IAM 使用者。盡可能使用提供臨時憑證的 IAM 角色。如需詳細資訊，請參閱《IAM 使用者指南》中的 [IAM 中的安全最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

1. (選用) 為了防止選取的 IAM 使用者和角色刪除此 KMS 金鑰，請在頁面底部的 **Key deletion** (金鑰刪除) 區段中，清除 **Allow key administrators to delete this key** (允許金鑰管理員刪除此金鑰) 核取方塊。

1. 選擇**下一步**。

1. 選取可將金鑰用於[密碼編譯操作](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations)的 IAM 使用者和角色 選擇**下一步**。

1. 在 **Review and edit key policy** (檢閱和編輯金鑰政策) 頁面，請將以下陳述式新增至金鑰政策，然後選擇 **Finish** (完成)。

   ```
   {
       "Sid": "Allow Amazon SNS to use this key",
       "Effect": "Allow",
       "Principal": {
           "Service": "sns.amazonaws.com"
       },
       "Action": [
           "kms:Decrypt",
           "kms:GenerateDataKey*"
       ],
       "Resource": "*"
   }
   ```

新的客戶受管金鑰會顯示在金鑰清單中。

## 步驟 2：建立加密的 Amazon SNS 主題
<a name="create-encrypted-topic"></a>

1. 登入 [Amazon SNS 主控台](https://console.aws.amazon.com/sns/home)。

1. 在導覽面板上，選擇 **Topics (主題)**。

1. 請選擇**建立主題**。

1. 在 **Create new topic** (建立新主題) 頁面的 **Name** (名稱) 中，輸入主題名稱 (例如 `MyEncryptedTopic`)，然後選擇 **Create topic** (建立主題)。

1. 展開 **Encryption** (加密) 區段並執行下列動作：

   1. 選擇 **Enable server-side encryption** (啟用伺服器端加密)。

   1. 指定客戶受管金鑰。如需詳細資訊，請參閱[重要用語](sns-server-side-encryption.md#sse-key-terms)。

      對於每個客戶受管金鑰類型，都會顯示**描述**、**帳戶**和客戶受管金鑰 **ARN**。
**重要**  
如果您並非客戶受管金鑰的擁有者，或者您登入時所用的帳戶並無 `kms:ListAliases` 和 `kms:DescribeKey` 許可，則無法在 Amazon SNS 主控台上檢視客戶受管金鑰的相關資訊。  
請要求客戶受管金鑰的擁有者授予您這些許可。如需詳細資訊，請參閱《AWS Key Management Service 開發人員指南》中的[AWS KMS API 許可：動作和資源參考](https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html)。

   1. 對於**客戶受管金鑰**，選擇[您之前建立的](#create-custom-cmk) **MyCustomKey**，然後選擇**啟用伺服器端加密**。

1. 選擇**儲存變更**。

   將會對您的主題啟用 SSE，並顯示 **MyTopic** (我的主題) 頁面。

   主題的**加密**狀態、 AWS **帳戶**、**客戶受管金鑰**、客戶受管金鑰 **ARN**，以及**描述**會顯示在**加密**索引標籤上。

您的新加密主題會顯示在主題清單。

## 步驟 3：建立和訂閱加密的 Amazon SQS 佇列
<a name="create-encrypted-queue"></a>

1. 請登入 [Amazon SQS 主控台](https://console.aws.amazon.com/sqs/)。

1. 請選擇 **Create New Queue** (建立新佇列)。

1. 在 **Create New Queue** (建立新佇列) 頁面上，執行下列操作：

   1. 輸入 **Queue Name** (佇列名稱) (例如，`MyEncryptedQueue1`)。

   1. 選擇 **Standard Queue** (標準佇列)，然後選擇 **Configure Queue** (設定佇列)。

   1. 選擇 **Use SSE** (使用 SSE)。

   1. 對於 **AWS KMS key**，選擇[您之前建立的](#create-custom-cmk) **MyCustomKey**，然後選擇**建立佇列**。

1. 重複進行以上程序，以建立第二個佇列 (例如，名為 `MyEncryptedQueue2`)。

   您的新加密佇列會顯示在佇列清單。

1. 在 Amazon SQS 主控台，選擇 `MyEncryptedQueue1` 和 `MyEncryptedQueue2` 然後選擇 **Queue Actions** (佇列動作)、**Subscribe Queues to SNS Topic** (訂閱佇列至 SNS 主題)。

1. 在 **Subscribe to a Topic** (訂閱主題) 對話方塊中，於 **Choose a Topic** (選擇主題) 中選取 **MyEncryptedTopic**，然後選擇 **Subscribe** (訂閱)。

   您對加密主題的加密佇列訂閱會顯示在 **Topic Subscription Result** (主題訂閱結果) 對話方塊中。

1. 選擇 **OK** (確定)。

## 步驟 4：將訊息發佈至您的加密主題
<a name="publish-to-encrypted-topic"></a>

1. 登入 [Amazon SNS 主控台](https://console.aws.amazon.com/sns/home)。

1. 在導覽面板上，選擇 **Topics (主題)**。

1. 從主題清單中，選擇 **MyEncryptedTopic**，然後選擇 **Publish message** (發佈訊息)。

1. 在 **Publish a message** (發佈訊息) 頁面上，執行下列步驟：

   1. (選用) 在 **Message details** (訊息詳細資訊) 區段中，輸入 **Subject** (主旨) (例如，`Testing message publishing`)。

   1. 在 **Message body** (訊息內文) 區段中，輸入訊息內文 (例如，`My message body is encrypted at rest.`)。

   1. 選擇 **Publish message** (發佈訊息)。

您的訊息會發佈到您的訂閱加密佇列。

## 步驟 5：驗證訊息交付
<a name="verify-message-delivery"></a>

1. 請登入 [Amazon SQS 主控台](https://console.aws.amazon.com/sqs/)。

1. 從佇列清單中，選擇 **MyEncryptedQueue1**，然後選擇 **Send and receive messages** (傳送及接收訊息)。

1. 在 **Send and receive messages in MyEncryptedQueue1** (在 MyEncryptedQueue1 中傳送和接收訊息) 頁面上，選擇 **Poll for messages** (輪詢訊息)。

   此時將會顯示[您稍早傳送的](#publish-to-encrypted-topic)訊息。

1. 選擇 **More Details** (更多詳細資訊) 可檢視您的訊息。

1. 完成後，請選擇 **Close** (關閉)。

1. 針對 **MyEncryptedQueue2** 重複此程序。