Amazon SQS 密鑰管理 - Amazon Simple Queue Service

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

Amazon SQS 密鑰管理

Amazon SQS 集成了 AWS Key Management Service (KMS) 以管理伺服器端加密的KMS金鑰 (SSE)。Amazon 中的靜態加密 SQS如需資SSE訊和金鑰管理定義,請參閱。Amazon SQS 使用KMS金鑰驗證和保護用於加密和解密訊息的資料金鑰。以下各節提供在 Amazon SQS 服務中使用KMS金鑰和資料金鑰的相關資訊。

設定 AWS KMS 許可

每個KMS金鑰都必須有金鑰原則。請注意,您無法修改 AWS Amazon 的託管KMS密鑰SQS。此KMS金鑰的政策包括帳戶中所有主體 (已授權使用 AmazonSQS) 使用加密佇列的許可。

對於客戶管理的KMS金鑰,您必須設定金鑰原則,以新增每個佇列產生者和用戶的權限。若要這麼做,您可以在KMS金鑰原則中將生產者和消費者命名為使用者。如需關於 AWS KMS 權限,請參閱 AWS KMS 資源和運營AWS KMS API權限參照 AWS Key Management Service 開發人員指南

或者,您可以在指派給產生和使用加密郵件的主參與者的IAM原則中指定必要的權限。如需詳細資訊,請參閱搭配使用IAM原則 AWS KMS 中的 AWS Key Management Service 開發人員指南

注意

雖然您可以設定從 Amazon 傳送和接收的全域許可SQS, AWS KMS 需要在IAM策略Resource部分中明確命名特定區域中的完ARN整KMS密鑰。

設定的KMS權限 AWS services

幾個 AWS 服務充當事件來源,可以將事件傳送到 Amazon SQS 佇列。若要允許這些事件來源搭配加密佇列使用,您必須建立客戶管理的KMS金鑰,並在金鑰原則中新增權限,讓服務使用所需的 AWS KMS API方法。執行下列步驟來設定許可。

警告

變更用於加密 Amazon SQS 訊息的KMS金鑰時,請注意,使用舊KMS金鑰加密的現有訊息將以該金鑰保持加密狀態。若要解密這些訊息,您必須保留舊KMS金鑰,並確保其金鑰政策授予 Amazon SQS 的許可kms:GenerateDataKey。在更新為用於加密新郵件的新KMS金鑰之後,在刪除或停用舊KMS金鑰之前,請確定已處理並從佇列中移除所有使用舊KMS金鑰加密的現有訊息。

  1. 建立客戶管理的KMS金鑰。若要取得更多資訊,請參閱 AWS Key Management Service 開發人員指南

  2. 若要允許 AWS 服務事件源使用該kms:GenerateDataKeyAPI方法,將以下語句添加到KMS密鑰策略中。

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "service.amazonaws.com" }, "Action": [ "kms:GenerateDataKey" ], "Resource": "*" }] }

    將上述範例中的 "service" 取代為事件來源的服務名稱。事件來源包括下列服務。

    事件來源 服務名稱
    Amazon CloudWatch 活動 events.amazonaws.com
    Amazon S3 事件通知 s3.amazonaws.com
    Amazon SNS 主題訂閱 sns.amazonaws.com
  3. 使用KMS金鑰設定現有SSE佇列。ARN

  4. 將加密佇列提供給事件來源。ARN

設定 AWS KMS 生產者的權限

當資料金鑰重複使用期間到期時,生產者下次呼叫SendMessageSendMessageBatch也會觸發呼叫kms:GenerateDataKey。生產者必須具有KMS金鑰的kms:GenerateDataKey權限。

將下列陳述式新增至生產者的IAM政策。請記得針對金鑰資源和佇列資源使用正確的ARN值。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-east-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" }, { "Effect": "Allow", "Action": [ "sqs:SendMessage" ], "Resource": "arn:aws:sqs:*:123456789012:MyQueue" }] }

設定 AWS KMS 消費者權限

當資料金鑰重複使用期間到期時,消費者下一次呼叫 ReceiveMessage 也會觸發呼叫 kms:Decrypt,以在使用新資料金鑰之前,先驗證其完整性。因此,取用者必須擁有用來加密指定佇列中訊息之任何KMS金鑰的kms:Decrypt權限。如果佇列充當無效字母佇列,則取用者也必須擁有用來加密來源佇列中訊息之任何KMS金鑰的kms:Decrypt權限。將下列陳述式新增至取用者的IAM政策。請記得針對金鑰資源和佇列資源使用正確的ARN值。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "arn:aws:kms:us-east-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" }, { "Effect": "Allow", "Action": [ "sqs:ReceiveMessage" ], "Resource": "arn:aws:sqs:*:123456789012:MyQueue" }] }

設定 AWS KMS 權限與混淆的副保護

當主要政策聲明中的主體為 AWS 服務主體,您可以使用aws:SourceArnaws:SourceAccount全域條件索引鍵來防止混淆的副案例。若要使用這些條件金鑰,請將值設定為要加密之資源的 Amazon 資源名稱 (ARN)。如果您不知道ARN資源,請aws:SourceAccount改用。

在此KMS金鑰政策中,允許帳戶111122223333擁有的服務中的特定資源呼叫KMSDecryptGenerateDataKey動作,這些資源會在SSE使用 Amazon 期間發生SQS。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "<replaceable>service</replaceable>.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "ArnEquals": { "aws:SourceArn": [ "arn:aws:service::111122223333:resource" ] } } }] }

使用SSE已啟用的 Amazon SQS 佇列時,支援下列服務aws:SourceArn

  • Amazon SNS

  • Amazon S3

  • CloudWatch 活動

  • AWS Lambda

  • CodeBuild

  • Amazon Connect Customer Profiles

  • AWS Auto Scaling

  • Amazon Chime

了解資料金鑰重複使用期間

料金鑰重複使用期間定義 Amazon SQS 重複使用相同資料金鑰的最長持續時間。資料金鑰重複使用期結束時,Amazon SQS 會產生新的資料金鑰。請注意下列有關重複使用期間的準則。

  • 較短的重複使用期可提供更好的安全性,但會導致更多的呼叫 AWS KMS,這可能會產生超出免費方案的費用。

  • 雖然加密和解密的資料金鑰是分別快取,但重複使用期間同時套用到這兩個資料金鑰的副本。

  • 目前,在SQS:SendMessageSQS:SendMessageBatch作業期間只會使用KMS:GenerateDataKey權限。kms:Decrypt權限僅在SQS:ReceiveMessage作業期間使用。

  • 校長 (AWS 帳戶 或用戶)不共享數據鍵(由唯一主體發送的消息始終獲得唯一的數據鍵)。因此,呼叫量 AWS KMS 是資料鍵重複使用期間內使用的唯一主參與者數目的倍數。

估算 AWS KMS 成本

為了預測成本並更好地了解您的 AWS 法案, 你可能想知道 Amazon 多久SQS使用你的KMS密鑰.

注意

儘管以下公式可以為您提供預期成本的非常好的主意,但由於 Amazon 的分佈式性質,實際成本可能會更高SQS。

若要計算每個佇列的API要求數目 (R),請使用下列公式:

R = (B / D) * (2 * P + C)

B 是帳單週期 (以秒為單位)。

D資料金鑰重複使用期間 (以秒為單位)。

P是發送到 Amazon SQS 隊列的生產主體的數量。

C是從 Amazon SQS 佇列接收的使用主體數目。

重要

一般來說,生產主體會導致消耗主體的雙倍成本。如需詳細資訊,請參閱 了解資料金鑰重複使用期間

如果生產者和消費者有不同的 使用者,成本會增加。

以下為計算範例。如需確切的定價資訊,請參閱 AWS Key Management Service 定價

範例 1:計算 AWS KMS API呼叫 2 個主體和 1 個佇列

此範例假設如下:

  • 帳單週期是 1 月 1-31 日 (2,678,400 秒)。

  • 資料金鑰重複使用期間設為 5 分鐘 (300 秒)。

  • 有 1 個佇列。

  • 有 1 個生產主體和 1 個消費主體。

(2,678,400 / 300) * (2 * 1 + 1) = 26,784

範例 2:計算 AWS KMS API呼叫多個生產者和消費者以及 2 個隊列

此範例假設如下:

  • 帳單週期是 2 月 1-28 日 (2,419,200 秒)。

  • 資料金鑰重複使用期間設為 24 小時 (86,400 秒)。

  • 有 2 個佇列。

  • 第 1 個佇列有 3 個生產主體和 1 個消費主體。

  • 第 2 個佇列有 5 個生產主體和 2 個消費主體。

(2,419,200 / 86,400 * (2 * 3 + 1)) + (2,419,200 / 86,400 * (2 * 5 + 2)) = 532

AWS KMS 錯誤

當您使用 Amazon SQS 和 AWS KMS,您可能會遇到錯誤。下列參考說明錯誤和可能的疑難排解解決方案。