Amazon SQS 金鑰管理 - Amazon Simple Queue Service

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

Amazon SQS 金鑰管理

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

設定 AWS KMS 許可

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

對於客戶受管KMS金鑰,您必須設定金鑰政策,以為每個佇列生產者和取用者新增許可。若要這麼做,請在KMS金鑰政策中將生產者和消費者命名為使用者。如需 AWS KMS 許可的詳細資訊,請參閱 AWS Key Management Service 開發人員指南 中的AWS KMS 資源和操作AWS KMS API許可參考

或者,您可以在指派給產生和使用加密訊息的主體IAM的政策中指定必要的許可。如需詳細資訊,請參閱 AWS Key Management Service 開發人員指南 中的將IAM政策與 AWS KMS 搭配使用。

注意

雖然您可以設定全域許可,以向 Amazon 傳送和接收 SQS,但 AWS KMS 需要明確命名IAM政策 Resource 區段中特定區域中ARN的KMS金鑰。

設定 AWS 服務的KMS許可

數個 AWS 服務可做為事件來源,將事件傳送至 Amazon SQS佇列。若要允許這些事件來源使用加密佇列,您必須建立客戶受管KMS金鑰,並在金鑰政策中新增許可,服務才能使用所需的 AWS KMS API方法。執行下列步驟來設定許可。

警告

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

  1. 建立客戶受管KMS金鑰。如需詳細資訊,請參閱《AWS Key Management Service 開發人員指南》中的建立索引鍵

  2. 若要允許 AWS 服務事件來源使用 kms:Decryptkms:GenerateDataKeyAPI方法,請將下列陳述式新增至KMS金鑰政策。

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

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

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

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

設定生產者的 AWS KMS 許可

資料金鑰重複使用期間到期時,生產者下次呼叫 SendMessageSendMessageBatch 也會觸發呼叫 kms:Decryptkms:GenerateDataKey。呼叫 kms:Decrypt 是為了在使用新資料金鑰之前,先驗證其完整性。因此,生產者必須擁有 KMS 金鑰的 kms:Decryptkms:GenerateDataKey 許可。

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

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "kms:Decrypt", "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 Resource Name (ARN)。如果您不知道 資源ARN的 ,請aws:SourceAccount改用 。

在此KMS金鑰政策中,111122223333允許來自 帳戶擁有之服務的特定資源KMS呼叫 DecryptGenerateDataKey動作,這些動作發生在 Amazon SSE的使用期間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

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

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

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

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

  • 當資料金鑰重複使用期間結束時,下一個呼叫 SendMessageSendMessageBatch通常會觸發對 方法的 AWS KMS GenerateDataKey呼叫,以取得新的資料金鑰。此外,下次呼叫 SendMessageReceiveMessage將分別觸發呼叫 AWS KMS Decrypt,以便在使用資料金鑰之前驗證其完整性。

  • 主體 (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:計算 2 個主體和 1 個佇列的呼叫數量 AWS KMS API

此範例假設如下:

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

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

  • 有 1 個佇列。

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

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

範例 2:計算多個生產者和取用者以及 2 個佇列的呼叫數量 AWS KMS API

此範例假設如下:

  • 帳單週期是 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,您可能會遇到錯誤。下列參考說明錯誤和可能的疑難排解解決方案。