本指南記載於 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:PCR0、 kms:RecipientAttestation:PCR1和 kms: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 範本會自動:
-
使用別名建立對稱 CMK
wickr-drs-{networkId}-{region}-{suffix}-key -
使用別名建立用於密碼復原的非對稱 CMK (ECC P-384)
wickr-drs-{networkId}-{region}-{suffix}-password-recovery-key -
使用對稱 CMK 建立具有 SSE-KMS 預設加密的 S3 儲存貯體
-
建立
DRSCustomerCrossAccountRole具有適當 KMS 許可的 -
透過自訂資源 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 認證條件的金鑰政策
若要變更加密金鑰,您必須:
-
使用新的 KMS 金鑰部署新的資料保留服務執行個體。
-
先前保留使用舊金鑰加密的訊息,只能使用原始金鑰存取。
重要
當加密的訊息存在於保留儲存貯體中時,請勿停用或刪除原始 KMS 金鑰。這樣做會使這些訊息永久無法復原。
縮小對客戶受管 KMS 金鑰的存取範圍
Nitro Enclave 認證 (主要存取控制)
限定 CMK 存取範圍的主要機制是 Nitro Enclave 認證。金鑰政策要求 kms:RecipientAttestation:PCR0、 PCR1和 PCR2條件進行直接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::、drs-create-account 或 drs-password-recovery |
requestParameters.keyId |
您的 CMK ARN (例如 arn:aws:kms:) |
additionalEventData.recipient.attestationDocument |
適用於經 enclave 證明的解密呼叫 (包含 PCR 值) |
requestParameters.encryptionContext |
對於 S3 SSE-KMS: {"aws:s3:arn": "arn:aws:s3::: |
要監控的關鍵事件:
-
加密 — 當 enclave 在存放在 S3/DynamoDB 之前加密訊息內容或帳戶狀態時發生。
-
GenerateDataKey — 當 S3 在物件上傳期間產生 SSE-KMS 信封加密的資料金鑰時發生。
-
Decrypt — 當 enclave 解密帳戶狀態 (使用認證) 或當 S3 在讀取時自動解密物件時發生。
-
DeriveSharedSecret — 當 enclave 在密碼復原流程中執行 ECDH 金鑰協議時,會發生在密碼復原金鑰上。
-
GetPublicKey — 當您的
collect.py指令碼擷取本機 ECDH 加密的公有金鑰時,密碼復原金鑰便會發生。
此外,Service Catalog 產品會建立 CloudWatch 儀表板 (WickrDataRetentionService-),其中包含 KMS 金鑰成功指標 (Encrypt、GenerateDataKey、Decrypt 操作) 的小工具,以及在偵測到解密失敗時觸發的解密錯誤警示。{networkId}