本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
OpenTelemetry 指標的靜態加密
什麼是 CloudWatch 資料集
您傳送至 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 金鑰加密資料集。
靜態加密的選項
CloudWatch 一律加密靜態資料集資料。根據預設,CloudWatch 會使用 AWS 擁有的金鑰加密所有靜態資料。您不需要採取任何動作,即可使用 AWS 擁有的金鑰來保護資料。如需詳細資訊,請參閱《 AWS Key Management Service 開發人員指南》中的 AWS 擁有的金鑰。
如果您想要管理用來加密資料集資料的金鑰,您可以在 AWS Key Management Service () 中使用客戶受管金鑰AWS KMS。如需詳細資訊,請參閱《 AWS Key Management Service 開發人員指南》中的客戶受管金鑰。
當您使用客戶受管金鑰時,需支付 AWS KMS 費用。如需定價的詳細資訊,請參閱 AWS Key Management Service 定價
CloudWatch 如何使用客戶受管金鑰進行資料集加密
重要
客戶受管金鑰加密適用於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
設定資料集的客戶受管金鑰
搭配 CloudWatch 資料集使用的 AWS KMS 金鑰必須符合下列要求:
-
金鑰必須是具有金鑰使用量 ENCRYPT_DECRYPT 的對稱加密金鑰 (SYMMETRIC_DEFAULT)。不支援非對稱金鑰。
-
不支援多區域金鑰。
-
金鑰必須與資料集位於相同的 AWS 區域 中。
-
您必須將金鑰指定為完整金鑰 ARN。不支援金鑰別名和金鑰 IDs。
設定金鑰政策許可
若要搭配 CloudWatch Dataset 使用客戶受管金鑰,金鑰政策必須授予 CloudWatch 使用金鑰的許可。下列範例金鑰政策會授予 CloudWatch 必要的許可,並包含混淆代理人保護。
關聯或使用資料集的發起人必須具有 kms:Decrypt許可,範圍限定於 CloudWatch ViaService和加密內容,如以下AllowCallerDecrypt陳述式所示。將 YourApplicationRole 取代為用於呼叫 CloudWatch 資料集 APIs IAM 角色。
範例 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。
將客戶受管金鑰與資料集建立關聯
使用 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
變更或移除加密組態
您可以變更或移除加密資料集資料的客戶受管金鑰。
變更客戶受管金鑰
若要取代客戶受管金鑰,請使用新的金鑰 ARN AssociateDatasetKmsKey再次呼叫 。發起人必須同時擁有目前金鑰和新金鑰的kms:Decrypt許可。CloudWatch 會開始使用新金鑰進行後續加密操作。
注意
如果目前關聯的金鑰已刪除、已排定刪除、正在等待匯入、無法使用或已停用,CloudWatch 不需要目前金鑰的kms:Decrypt許可,且輪換會繼續進行。如果只停用金鑰,請考慮重新啟用它而不是輪換,因為重新啟用可讓 CloudWatch 繼續解密使用該金鑰加密的現有指標資料。
移除客戶受管金鑰
若要移除客戶受管金鑰並還原為 AWS 擁有的金鑰加密,請呼叫 DisassociateDatasetKmsKey。發起人必須擁有目前相關聯金鑰的kms:Decrypt許可。
aws cloudwatch disassociate-dataset-kms-key \ --dataset-name default
注意
如果目前關聯的金鑰已刪除、已排定刪除、正在等待匯入、無法使用或已停用,CloudWatch 不需要該金鑰的kms:Decrypt許可,而且取消關聯會繼續。如果只停用金鑰,請考慮重新啟用它,而不是取消關聯,因為重新啟用可讓 CloudWatch 繼續解密現有的指標資料。
重要
取消與客戶受管金鑰的關聯後,會有 3 小時的強制執行時段,在此期間 CloudWatch 仍需要先前關聯金鑰的kms:Decrypt許可。在此視窗期間,請勿停用或刪除金鑰。
從已刪除或無法使用的 KMS 金鑰復原
如果與資料集相關聯的客戶受管 KMS 金鑰遭到刪除、排程刪除或無法使用,您的資料集會進入降級狀態:
-
CloudWatch 無法加密您發佈至資料集的新指標資料,且擷取失敗。
-
CloudWatch 無法解密使用無法使用的金鑰加密的現有資料,因此查詢操作會失敗。
您的復原選項取決於金鑰狀態:
-
金鑰已停用 — 重新啟用金鑰 AWS KMS。這是偏好的復原路徑,因為 CloudWatch 可以在金鑰再次作用中之後繼續解密現有的指標資料。
-
金鑰正在等待刪除 — 在等待期間到期 AWS KMS 之前取消 中的金鑰刪除。金鑰返回啟用狀態後,CloudWatch 會恢復正常操作。
-
金鑰已永久刪除或無法復原 — 移除過時的關聯或輪換為新的金鑰 (請參閱下文)。請注意,使用已刪除金鑰加密的現有資料是永久無法讀取的。
如果金鑰永久刪除或無法復原,您可以移除關聯或輪換為新金鑰,而不需要存取舊金鑰:
移除過時的金鑰關聯
呼叫 DisassociateDatasetKmsKey 以移除與無法使用金鑰的關聯。CloudWatch 會還原為新資料的 AWS 擁有金鑰加密。使用已刪除金鑰加密的現有資料將無法再讀取。
aws cloudwatch disassociate-dataset-kms-key \ --dataset-name default
輪換至新的金鑰
AssociateDatasetKmsKey 使用新的有效 KMS 金鑰 ARN 呼叫 。CloudWatch 會驗證新金鑰,並將其與您的資料集建立關聯。不需要存取先前相關聯的金鑰。使用已刪除金鑰加密的現有資料無法再讀取,但新資料會使用新金鑰加密。
aws cloudwatch associate-dataset-kms-key \ --dataset-name default \ --kms-key-arn arn:aws:kms:region:account-id:key/new-key-id
無法使用金鑰的錯誤回應
當您呼叫 DisassociateDatasetKmsKey或 AssociateDatasetKmsKey(輪換路徑) 且目前關聯的金鑰無法存取時,CloudWatch 不需要存取該金鑰,且操作會正常進行。這適用於下列情況:
-
已刪除金鑰 (KMS 傳回
NotFoundException)。 -
金鑰處於
PendingDeletion、PendingImport或Unavailable狀態。 -
金鑰已停用。
如果您在可存取金鑰但發起人缺少kms:Decrypt許可時呼叫這些操作,則操作會失敗,並出現下列其中一個錯誤。每個錯誤訊息都包含用於故障診斷的 KMS 請求 ID。
ResourceNotFoundException-
指定的 KMS 金鑰不存在。訊息格式:
KMS keykey-arndoes not exist. KMS request id:request-id. ValidationException-
指定的 KMS 金鑰處於此程式碼路徑上不容忍的無法使用狀態。訊息格式:
KMS keykey-arnis in an unusable state:state-description. KMS request id:request-id. AccessDeniedException-
指定的 KMS 金鑰已停用,或發起人缺少許可。訊息格式:
KMS keykey-arnis disabled. KMS request id:request-id.
如需 KMS 金鑰狀態的詳細資訊,請參閱《 AWS Key Management Service 開發人員指南》中的AWS KMS 金鑰的金鑰狀態。
縮小金鑰政策存取範圍
您可以使用金鑰政策中的條件來限制對 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
您可以使用 AWS CloudTrail 來追蹤 CloudWatch AWS KMS 代表您傳送到 的請求。 AWS CloudTrail 日誌項目使用 服務主體cloudwatch.amazonaws.com和 ViaService的值cloudwatch.。{region}.amazonaws.com
下列 CloudTrail 事件名稱會出現在 CloudWatch Dataset 加密操作的日誌項目中:
GenerateDataKeyEncryptDecryptDescribeKeyReEncrypt
每個日誌項目都包含加密內容,您可以用來識別操作套用的特定資料集。
如需監控 AWS KMS 金鑰用量的詳細資訊,請參閱《 AWS Key Management Service 開發人員指南》中的監控 AWS Key Management Service。