

本指南記載於 2025 年 3 月 13 日發行的新 AWS Wickr 管理主控台。如需 AWS Wickr 管理主控台傳統版本的文件，請參閱[傳統管理指南](https://docs.aws.amazon.com/wickr/latest/adminguide-classic/what-is-wickr.html)。

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

# 靜態加密
<a name="encryption-rest"></a>

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

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

## 使用客戶受管 KMS 金鑰加密靜態資料以保留資料
<a name="encryption-rest-cmk"></a>

### Data Retention Service 如何使用客戶受管 KMS 金鑰
<a name="encryption-rest-how-it-works"></a>

部署資料保留服務時，會在您的帳戶中建立對稱客戶受管 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 金鑰
<a name="encryption-rest-configuring"></a>

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

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

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

#### 設定使用客戶受管 KMS 金鑰的許可
<a name="encryption-rest-permissions"></a>

透過 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 模組密碼提供給 服務，才能啟用無伺服器資料保留。如需詳細資訊，請參閱 [密碼復原指示](password-recovery-instruction.md)。如需密碼復原金鑰所需政策的詳細資訊，請參閱 [資料保留服務的自訂 KMS 金鑰設定](custom-kms-key.md)。

如果您需要手動設定 KMS 金鑰，請參閱 [資料保留服務的自訂 KMS 金鑰設定](custom-kms-key.md) 以取得金鑰的最低寬鬆政策。

#### 使用客戶受管 KMS 金鑰建立新的資料保留部署
<a name="encryption-rest-creating"></a>

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

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

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

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

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

1. 透過自訂資源 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 格式之前對其進行驗證。

#### 在現有部署上變更加密組態
<a name="encryption-rest-changing"></a>

資料保留服務目前不支援在部署後變更 CMK。KMS 金鑰緊密耦合至：
+ S3 儲存貯體的預設加密組態
+ 存放在 DynamoDB 中的加密帳戶狀態
+ 具有 Nitro Enclave 認證條件的金鑰政策

若要變更加密金鑰，您必須：

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

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

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

#### 縮小對客戶受管 KMS 金鑰的存取範圍
<a name="encryption-rest-scoping-access"></a>

**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
<a name="encryption-rest-monitoring"></a>

您可以使用 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-account 或 drs-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 操作） 的小工具，以及在偵測到解密失敗時觸發的解密錯誤警示。