

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

# OpenTelemetry 指標的靜態加密
<a name="cmk-encryption"></a>

## 什麼是 CloudWatch 資料集
<a name="cmk-encryption-dataset-overview"></a>

您傳送至 Amazon CloudWatch 的 OpenTelemetry (OTel) 指標會儲存在稱為資料集的資源中。每個 在所有 OTel 指標所在的每個區域中 AWS 帳戶 都有`default`資料集。`default` 資料集是唯一支援的資料集 — 您無法建立其他資料集。

資料集可以像其他 AWS 資源一樣加密和標記。資料集 ARN 的格式如下：

`arn:{{{partition}}}:cloudwatch:{{{region}}}:{{{account-id}}}:dataset/default`

若要檢視資料集目前的加密組態，請使用 `GetDataset` API：

```
aws cloudwatch get-dataset \
    --dataset-identifier default
```

如果客戶受管金鑰與資料集相關聯，則回應會包含金鑰 ARN。如果沒有相關聯的客戶受管金鑰，則會使用 擁有的 AWS 金鑰加密資料集。

## 靜態加密的選項
<a name="cmk-encryption-options"></a>

CloudWatch 一律加密靜態資料集資料。根據預設，CloudWatch 會使用 AWS 擁有的金鑰加密所有靜態資料。您不需要採取任何動作，即可使用 AWS 擁有的金鑰來保護資料。如需詳細資訊，請參閱《 AWS Key Management Service 開發人員指南》中的 [AWS 擁有的金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)。

如果您想要管理用來加密資料集資料的金鑰，您可以在 AWS Key Management Service () 中使用客戶受管金鑰AWS KMS。如需詳細資訊，請參閱《 AWS Key Management Service 開發人員指南》中的[客戶受管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

當您使用客戶受管金鑰時，需支付 AWS KMS 費用。如需定價的詳細資訊，請參閱 [AWS Key Management Service 定價](https://aws.amazon.com/kms/pricing/)。

## CloudWatch 如何使用客戶受管金鑰進行資料集加密
<a name="cmk-encryption-how-it-works"></a>

**重要**  
客戶受管金鑰加密適用於`default`資料集。`default` 資料集是唯一支援的資料集 — 您無法建立其他資料集。

當您將客戶受管金鑰與`default`資料集建立關聯時，CloudWatch 會使用金鑰來加密存放在該資料集中的所有 OTel 指標資料。

CloudWatch 會直接使用具有金鑰政策許可的服務委託人 (`cloudwatch.amazonaws.com`)。CloudWatch 不會使用授予或 IAM 角色來存取您的 AWS KMS 金鑰。

CloudWatch 不會快取資料金鑰。不過，CloudWatch 會快取`kms:Decrypt`回應最多 15 分鐘。金鑰政策的變更最多可能需要 15 分鐘才會生效。

CloudWatch 對所有 AWS KMS 密碼編譯操作使用以下加密內容：
+ 索引鍵：`aws:cloudwatch:arn`
+ 值：`arn:{{{partition}}}:cloudwatch:{{{region}}}:{{{account-id}}}:dataset/default`

## 設定資料集的客戶受管金鑰
<a name="cmk-encryption-key-requirements"></a>

搭配 CloudWatch 資料集使用的 AWS KMS 金鑰必須符合下列要求：
+ 金鑰必須是使用金鑰 ENCRYPT\_DECRYPT 的對稱加密金鑰 (SYMMETRIC\_DEFAULT)。不支援非對稱金鑰。
+ 不支援多區域金鑰。
+ 金鑰必須與資料集位於相同的 AWS 區域 中。
+ 您必須將金鑰指定為完整金鑰 ARN。不支援金鑰別名和金鑰 IDs。

## 設定金鑰政策許可
<a name="cmk-encryption-permissions"></a>

若要搭配 CloudWatch Dataset 使用客戶受管金鑰，金鑰政策必須授予 CloudWatch 使用金鑰的許可。下列範例金鑰政策會授予 CloudWatch 必要的許可，並包含混淆代理人保護。

關聯或使用資料集的發起人必須具有 `kms:Decrypt`許可，範圍限定於 CloudWatch `ViaService`和加密內容，如以下`AllowCallerDecrypt`陳述式所示。將 {{YourApplicationRole}} 取代為用於呼叫 CloudWatch 資料集 APIs IAM 角色。

**Example CloudWatch 資料集加密的金鑰政策**  

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowCloudWatchDatasetDescribeKey",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudwatch.amazonaws.com"
            },
            "Action": "kms:DescribeKey",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "{{account-id}}"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:cloudwatch:{{region}}:{{account-id}}:dataset/default"
                }
            }
        },
        {
            "Sid": "AllowCloudWatchDatasetEncryption",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudwatch.amazonaws.com"
            },
            "Action": [
                "kms:GenerateDataKey",
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "{{account-id}}",
                    "kms:EncryptionContext:aws:cloudwatch:arn": "arn:aws:cloudwatch:{{region}}:{{account-id}}:dataset/default"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:cloudwatch:{{region}}:{{account-id}}:dataset/default"
                }
            }
        },
        {
            "Sid": "AllowCallerDecrypt",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{account-id}}:role/{{YourApplicationRole}}"
            },
            "Action": "kms:Decrypt",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "cloudwatch.{{region}}.amazonaws.com",
                    "kms:EncryptionContext:aws:cloudwatch:arn": "arn:aws:cloudwatch:{{region}}:{{account-id}}:dataset/default"
                }
            }
        }
    ]
}
```

將 {{account-id}} 和 {{region}} 取代為您自己的值。

如需金鑰政策的詳細資訊，請參閱《 AWS Key Management Service 開發人員指南》中的 [中的金鑰政策 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。

## 將客戶受管金鑰與資料集建立關聯
<a name="cmk-encryption-associate"></a>

使用 `AssociateDatasetKmsKey` API 將客戶受管金鑰與資料集建立關聯。您必須指定 `default`做為資料集識別符。

若要使用 CLI AWS 建立客戶受管金鑰的關聯，請執行下列命令：

```
aws cloudwatch associate-dataset-kms-key \
    --dataset-name default \
    --kms-key-arn arn:aws:kms:{{region}}:{{account-id}}:key/{{key-id}}
```

## 變更或移除加密組態
<a name="cmk-encryption-change-disassociate"></a>

您可以變更或移除加密資料集資料的客戶受管金鑰。

### 變更客戶受管金鑰
<a name="cmk-encryption-change-key"></a>

若要取代客戶受管金鑰，請使用新的金鑰 ARN `AssociateDatasetKmsKey`再次呼叫 。發起人必須同時擁有目前金鑰和新金鑰的`kms:Decrypt`許可。CloudWatch 會開始使用新金鑰進行後續加密操作。

### 移除客戶受管金鑰
<a name="cmk-encryption-disassociate"></a>

若要移除客戶受管金鑰並還原為 AWS 擁有的金鑰加密，請呼叫 `DisassociateDatasetKmsKey`。發起人必須擁有目前相關聯金鑰的`kms:Decrypt`許可。

```
aws cloudwatch disassociate-dataset-kms-key \
    --dataset-name default
```

**重要**  
取消與客戶受管金鑰的關聯後，會有 3 小時的強制執行時段，在此期間 CloudWatch 仍需要先前關聯金鑰的`kms:Decrypt`許可。在此時段內，請勿停用或刪除金鑰。

如果您的金鑰處於停用狀態，您必須先重新啟用金鑰，才能將其與資料集取消關聯。

## 縮小金鑰政策存取範圍
<a name="cmk-encryption-scoping-access"></a>

您可以使用金鑰政策中的條件來限制對 AWS KMS 金鑰的存取。

加密內容條件  
使用 `kms:EncryptionContext:aws:cloudwatch:arn`條件金鑰將金鑰用量限制為`default`資料集。  

```
"Condition": {
    "StringEquals": {
        "kms:EncryptionContext:aws:cloudwatch:arn": "arn:aws:cloudwatch:{{region}}:{{account-id}}:dataset/default"
    }
}
```

混淆代理人保護  
使用 `aws:SourceArn`和 `aws:SourceAccount`條件來防止跨帳戶混淆代理人攻擊。  

```
"Condition": {
    "StringEquals": {
        "aws:SourceAccount": "{{account-id}}"
    },
    "ArnLike": {
        "aws:SourceArn": "arn:aws:cloudwatch:{{region}}:{{account-id}}:dataset/default"
    }
}
```

kms:ViaService 條件  
使用 `kms:ViaService`條件金鑰將金鑰用量限制為來自 CloudWatch 的請求。  

```
"Condition": {
    "StringEquals": {
        "kms:ViaService": "cloudwatch.{{region}}.amazonaws.com"
    }
}
```

## 監控 CloudWatch 與 的互動 AWS KMS
<a name="cmk-encryption-monitoring"></a>

您可以使用 AWS CloudTrail 來追蹤 CloudWatch AWS KMS 代表您傳送到 的請求。 AWS CloudTrail 日誌項目使用 服務主體`cloudwatch.amazonaws.com`和 `ViaService`的值`cloudwatch.{{{region}}}.amazonaws.com`。

下列 CloudTrail 事件名稱會出現在 CloudWatch Dataset 加密操作的日誌項目中：
+ `GenerateDataKey`
+ `Encrypt`
+ `Decrypt`
+ `DescribeKey`
+ `ReEncrypt`

每個日誌項目都包含加密內容，您可以用來識別操作套用的特定資料集。

如需監控 AWS KMS 金鑰用量的詳細資訊，請參閱《 AWS Key Management Service 開發人員指南》中的[監控 AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/monitoring-overview.html)。