View a markdown version of this page

靜態加密 - AWS Wickr

本指南記載於 2025 年 3 月 13 日發行的新 AWS Wickr 管理主控台。如需 AWS Wickr 管理主控台傳統版本的文件,請參閱傳統管理指南

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

靜態加密

AWS Wickr Data Retention Service 預設會透明加密所有保留的訊息和靜態檔案附件。您不需要執行任何其他組態,以確保靜態加密您的資料。Data Retention Service 會針對存放在 Amazon S3 中的所有客戶資料,在伺服器端套用加密。

Data Retention Service 會使用客戶受管 KMS 金鑰 (CMK) 加密靜態客戶資料。當您透過 部署資料保留服務時 AWS Service Catalog,會在您的帳戶中自動建立對稱 CMK,並設定為所有保留資料的預設加密金鑰。您可以保留對此金鑰的完全控制權,包括稽核用量、輪換金鑰和撤銷存取權的能力。

使用客戶受管 KMS 金鑰加密靜態資料以保留資料

Data Retention Service 如何使用客戶受管 KMS 金鑰

部署資料保留服務時,會在您的帳戶中建立對稱客戶受管 KMS 金鑰 (RetentionKey) AWS 。此金鑰用於加密下列資源:

  • 保留訊息 — 資料保留機器人擷取的所有 Wickr 訊息 (文字、反應和其他) 都會先使用 CMK 加密,再存放在 S3 儲存貯體中。訊息會使用加密 SDK 在 Nitro Enclave 內 AWS 加密,然後使用相同的 CMK 搭配 SSE-KMS 上傳至 Amazon S3。

  • 保留的檔案附件 — 與訊息相關聯的檔案附件會從 Nitro Enclave 內的 Wickr end-to-end加密解密、使用 CMK 重新加密,並使用 SSE-KMS 儲存在 Amazon S3 中。

  • 加密的帳戶狀態 — 資料保留機器人的密碼編譯私有金鑰和帳戶狀態會使用 CMK 加密,並存放在 DynamoDB 中。此狀態的解密需要 Nitro Enclave 認證。

  • S3 儲存貯體預設加密 — 保留 S3 儲存貯體使用 CMK 做為預設加密金鑰,以 SSE-KMS 設定。儲存貯體政策強制必須使用aws:kms伺服器端加密上傳所有物件。

  • 解密的輸出儲存貯體 — 當客戶觸發隨需解密 (透過 Step Functions 狀態機器) 時,解密的輸出也會存放在使用相同 CMK 加密的個別 S3 儲存貯體中。

跨帳戶角色架構

Data Retention Service 會在 Wickr 受管 AWS 帳戶中運作,並透過跨帳戶 IAM 角色 () 存取客戶資源DRSCustomerCrossAccountRole-{networkId}-{region}。Wickr DRS Enclave 角色使用 AWS STS 搭配外部 ID (wickr-drs-{networkId}) 來擔任此客戶端角色,以執行 KMS 和 S3 操作。

Nitro Enclave 認證

直接kms:Decrypt呼叫 (S3 SSE-KMS 之外) 需要 Nitro Enclave 認證。KMS 金鑰政策會強制執行 kms:RecipientAttestation:PCR0kms:RecipientAttestation:PCR1kms:RecipientAttestation:PCR2條件必須存在,確保敏感資料 (帳戶狀態、訊息內容) 的解密只能在已驗證的 enclave 內發生。這可防止任何運算子,包括 Wickr,在 enclave 外部解密客戶資料。

AWS Nitro Enclaves 會使用 KMS 金鑰處理訊息,以解密資料保留模組的私有金鑰、解密 Wickr 加密的訊息內容,並在將訊息存放在 S3 儲存貯體之前,使用每個訊息的唯一資料金鑰重新加密訊息。

在資料保留服務中設定客戶受管 KMS 金鑰

Data Retention Service 支援具有金鑰用量ENCRYPT_DECRYPT和金鑰規格 的對稱 KMS 金鑰SYMMETRIC_DEFAULT。透過 Service Catalog 建立金鑰時,預設會啟用自動金鑰輪換。

此外,會為密碼復原工作流程建立第二個非對稱 KMS 金鑰 (ECC_NIST_P384、KEY_AGREEMENT)。此金鑰用於 ECDH 金鑰協議,不能用於一般加密/解密。此金鑰可選擇性地用於從資料保留機器人Docker 型架構遷移的客戶。

注意

目前不支援多區域金鑰。KMS 金鑰必須位於與 S3 儲存貯體和資料保留服務部署相同的區域。

設定使用客戶受管 KMS 金鑰的許可

透過 Service Catalog 部署時,會自動設定下列金鑰政策。如果您需要手動設定金鑰,請使用下列最低權限政策:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "YourExistingStatements", "Effect": "...", "...": "..." }, { "Sid": "EnclaveGenerateDataKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{customer-account-id}:role/DRSCustomerCrossAccountRole-{networkId}-{region}" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringLike": { "kms:RecipientAttestation:PCR0": "*", "kms:RecipientAttestation:PCR1": "*", "kms:RecipientAttestation:PCR2": "*" }, "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": [ "aws:wickr:network:id", "aws:wickr:app:id" ] } } }, { "Sid": "EnclaveDescribeKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{customer-account-id}:role/DRSCustomerCrossAccountRole-{networkId}-{region}" }, "Action": "kms:DescribeKey", "Resource": "*" }, { "Sid": "EnclaveDecryptWithAttestation", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{customer-account-id}:role/DRSCustomerCrossAccountRole-{networkId}-{region}" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringLike": { "kms:RecipientAttestation:PCR0": "*", "kms:RecipientAttestation:PCR1": "*", "kms:RecipientAttestation:PCR2": "*" }, "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": "aws:wickr:app:id" } } }, { "Sid": "DRSDecryptionLambda", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{customer-account-id}:role/{DecryptionLambdaRoleName}" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": "aws:wickr:network:id" } } } ] }

每個陳述式的目的:

EnableIAMPolicies

允許您的帳戶根管理金鑰。這是標準金鑰管理員陳述式。

EnclaveGenerateDataKey

kms:GenerateDataKey — Nitro Enclave 調用 以產生資料加密金鑰,用於在 S3 中儲存之前加密訊息內容和帳戶狀態。只有在 enclave 提供有效的 Nitro Enclave 證明文件 (PCR0/1/2 條件) 且存在 aws:wickr:network:id 或 aws:wickr:app:id 的加密內容金鑰時才允許。

EnclaveDescribeKey

kms:DescribeKey — 允許 enclave 在初始化期間擷取金鑰中繼資料 (金鑰規格、用量、狀態) 以進行驗證。

EnclaveDecryptWithAttestation

kms:Decrypt — Nitro Enclave 調用來解密 Wickr 訊息解密所需的帳戶狀態 (私有金鑰)。只有在 enclave 提供有效的 Nitro Enclave 證明文件 (PCR0/1/2 條件) 且加密內容金鑰 aws:wickr:app:id 存在時,才允許這樣做,以確保解密不會發生在 enclave 之外。

DRSDecryptionLambda

kms:Decrypt — 由隨需解密 Lambda 調用,以在觸發解密狀態機器時解密保留的訊息。Wickr 服務無法存取此角色,而且僅供您從加密的 S3 儲存貯體解密自己的訊息。

如果需要從先前的資料保留安裝遷移,您必須先將 Docker-bot 模組密碼提供給 服務,才能啟用無伺服器資料保留。如需詳細資訊,請參閱 密碼復原指示。如需密碼復原金鑰所需政策的詳細資訊,請參閱 資料保留服務的自訂 KMS 金鑰設定

如果您需要手動設定 KMS 金鑰,請參閱 資料保留服務的自訂 KMS 金鑰設定 以取得金鑰的最低寬鬆政策。

使用客戶受管 KMS 金鑰建立新的資料保留部署

資料保留服務是透過 部署 AWS Service Catalog。當您啟動WickrDataRetentionProduct產品時, CloudFormation 範本會自動:

  1. 使用別名建立對稱 CMK wickr-drs-{networkId}-{region}-{suffix}-key

  2. 使用別名建立用於密碼復原的非對稱 CMK (ECC P-384) wickr-drs-{networkId}-{region}-{suffix}-password-recovery-key

  3. 使用對稱 CMK 建立具有 SSE-KMS 預設加密的 S3 儲存貯體

  4. 建立DRSCustomerCrossAccountRole具有適當 KMS 許可的

  5. 透過自訂資源 Lambda 向 Wickr Admin API 註冊 KMS 金鑰 ARN 和 S3 儲存貯體

KMS 金鑰 ARN 也會透過 Wickr Admin SDK 端點註冊:

PUT /networks/{networkId}/serverless-resources { "s3BucketName": "wickr-drs-{networkId}-{region}-{suffix}", "kmsKeyArn": "arn:aws:kms:{region}:{accountId}:key/{keyId}", "passwordRecoveryKmsKeyArn": "arn:aws:kms:{region}:{accountId}:key/{keyId}" }

kmsKeyArn 參數必須是有效的 KMS 金鑰 ARN。API 會在儲存 ARN 格式之前對其進行驗證。

在現有部署上變更加密組態

資料保留服務目前不支援在部署後變更 CMK。KMS 金鑰緊密耦合至:

  • S3 儲存貯體的預設加密組態

  • 存放在 DynamoDB 中的加密帳戶狀態

  • 具有 Nitro Enclave 認證條件的金鑰政策

若要變更加密金鑰,您必須:

  1. 使用新的 KMS 金鑰部署新的資料保留服務執行個體。

  2. 先前保留使用舊金鑰加密的訊息,只能使用原始金鑰存取。

重要

當加密的訊息存在於保留儲存貯體中時,請勿停用或刪除原始 KMS 金鑰。這樣做會使這些訊息永久無法復原。

縮小對客戶受管 KMS 金鑰的存取範圍

Nitro Enclave 認證 (主要存取控制)

限定 CMK 存取範圍的主要機制是 Nitro Enclave 認證。金鑰政策要求 kms:RecipientAttestation:PCR0PCR1PCR2條件進行直接kms:Decrypt呼叫。這可確保:

  • 只有已驗證的 Wickr DRS enclave 二進位檔可以解密敏感資料。

  • 即使跨帳戶角色也無法解密 enclave 外部的資料。

  • CloudTrail 日誌包含用於稽核的實際 PCR 值。

混淆代理人保護

跨帳戶角色在 STS AssumeRole呼叫中使用外部 ID (wickr-drs-{networkId})。這可防止混淆代理人攻擊,其中其他服務可能會嘗試使用 Wickr DRS enclave 角色來存取您的 資源。

kms:ViaService 條件

S3 SSE-KMS 解密操作的範圍是使用 kms:ViaService條件。這可確保只有在請求透過 S3-mediated式解密。 S3

加密內容

S3 SSE-KMS 會自動包含 S3 物件 ARN 做為加密內容。金鑰政策使用此加密內容,將 S3 解密許可範圍限定為特定字首 (例如密碼工具字首)。

監控資料保留服務與 的互動 AWS KMS

您可以使用 CloudTrail 監控資料保留服務進行的所有 KMS API 呼叫。若要搜尋 CloudTrail 日誌項目,請使用 CloudTrail 主控台或 CloudTrail LookupEvents操作。

資料保留服務可以使用下列 CloudTrail 事件欄位來稽核 KMS 用量:

欄位 預期值
eventName Encrypt, Decrypt, GenerateDataKey
userIdentity.arn arn:aws:sts::{customerAccountId}:assumed-role/DRSCustomerCrossAccountRole-{networkId}-{region}drs-create-accountdrs-password-recovery
requestParameters.keyId 您的 CMK ARN (例如 arn:aws:kms:{region}:{accountId}:key/{keyId})
additionalEventData.recipient.attestationDocument 適用於經 enclave 證明的解密呼叫 (包含 PCR 值)
requestParameters.encryptionContext 對於 S3 SSE-KMS: {"aws:s3:arn": "arn:aws:s3:::{bucketName}/{objectKey}"}

要監控的關鍵事件:

  • 加密 — 當 enclave 在存放在 S3/DynamoDB 之前加密訊息內容或帳戶狀態時發生。

  • GenerateDataKey — 當 S3 在物件上傳期間產生 SSE-KMS 信封加密的資料金鑰時發生。

  • Decrypt — 當 enclave 解密帳戶狀態 (使用認證) 或當 S3 在讀取時自動解密物件時發生。

  • DeriveSharedSecret — 當 enclave 在密碼復原流程中執行 ECDH 金鑰協議時,會發生在密碼復原金鑰上。

  • GetPublicKey — 當您的collect.py指令碼擷取本機 ECDH 加密的公有金鑰時,密碼復原金鑰便會發生。

此外,Service Catalog 產品會建立 CloudWatch 儀表板 (WickrDataRetentionService-{networkId}),其中包含 KMS 金鑰成功指標 (Encrypt、GenerateDataKey、Decrypt 操作) 的小工具,以及在偵測到解密失敗時觸發的解密錯誤警示。