本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 加密 CloudWatch Logs 中的查詢資料表 AWS Key Management Service
查詢資料表資料一律會在 CloudWatch Logs 中加密。根據預設,CloudWatch Logs 會使用伺服器端加密搭配 256 位元進階加密標準 Galois/計數器模式 (AES-GCM) 來加密靜態查詢資料表資料。您也可以使用 AWS Key Management Service 進行此加密。如果您這麼做,則會使用 AWS KMS 金鑰完成加密。 AWS KMS 在查詢資料表層級啟用 加密,方法是在建立查詢資料表或更新查詢資料表時,將 KMS 金鑰與查詢資料表建立關聯。
重要
CloudWatch Logs 僅支援對稱 KMS 金鑰。請勿使用非對稱金鑰來加密查詢資料表中的資料。如需詳細資訊,請參閱使用對稱和非對稱金鑰。
將 KMS 金鑰與查詢資料表建立關聯後,所有存放在查詢資料表中的資料都會使用此金鑰加密。每當請求此資料時,CloudWatch Logs 會解密此資料。每當有人請求取得加密的資料時,CloudWatch Logs 必須擁有 KMS 金鑰許可。
如果您稍後取消 KMS 金鑰與查詢資料表的關聯,CloudWatch Logs 會使用 CloudWatch Logs 預設加密方法加密資料。不過,如果金鑰在您取消關聯之前已停用或刪除,則 CloudWatch Logs 無法讀取使用該金鑰加密的資料。
如需 CloudWatch Logs 如何使用 AWS KMS 加密日誌資料的一般資訊,請參閱 使用 在 CloudWatch Logs 中加密日誌資料 AWS Key Management Service。
CloudWatch Logs 如何使用 AWS KMS 查詢資料表
CloudWatch Logs 使用 AWS KMS 信封加密來保護查詢資料表資料。當您將 KMS 金鑰與查詢資料表建立關聯時,CloudWatch Logs 會將GenerateDataKey請求傳送至 AWS KMS。 AWS KMS 會產生唯一的資料加密金鑰 (DEK),並同時傳回純文字複本和 DEK 的加密複本。CloudWatch Logs 使用純文字 DEK 來加密查詢資料表資料,然後將加密的 DEK 與加密的資料一起存放。不會儲存純文字 DEK,並在使用後從記憶體中捨棄。
當 CloudWatch Logs 需要讀取查詢資料表資料時,它會 AWS KMS 使用加密的 DEK 向 傳送Decrypt請求。 會 AWS KMS 解密 DEK,並將純文字 DEK 傳回 CloudWatch Logs,然後使用它來解密查詢資料表資料。
CloudWatch Logs 在向 提出請求時使用下列加密內容 AWS KMS:
{
"aws:logs:arn": "arn:aws:logs:region:account-id:lookup-table:lookup-table-name"
}
您可以在 IAM 政策和 AWS KMS 金鑰政策中使用此加密內容來控制對 KMS 金鑰的存取。如需詳細資訊,請參閱AWS KMS 金鑰和加密內容。
所需的 許可
若要搭配查詢資料表使用 AWS KMS 加密,IAM 主體必須具有 KMS 金鑰的下列 AWS KMS 許可:
kms:Decryptkms:GenerateDataKey
在以 KMS 金鑰加密的查詢資料表GetLookupTable上呼叫 時,需要 kms:Decrypt許可,以便 CloudWatch Logs 可以代表您解密資料。StartQuery 使用加密查詢表上使用 lookup命令的查詢呼叫 時,金鑰 (用於加密查詢表的 KMS 金鑰) 也需要 kms:Decrypt 許可。呼叫 CreateLookupTable或使用 UpdateLookupTable KMS 金鑰時需要 kms:GenerateDataKey許可,以便 CloudWatch Logs 可以產生資料加密金鑰來加密查詢資料表資料。
此外,CloudWatch Logs 服務必須具有使用 KMS 金鑰的許可。您可以將政策陳述式新增至 KMS 金鑰政策來授予這些許可,如下節所述。
步驟 1:建立 AWS KMS 金鑰
若要建立對稱 KMS 金鑰,請使用下列 create-key 命令:
aws kms create-key
輸出包含金鑰 ID 和金鑰的 Amazon Resource Name (ARN)。下列為範例輸出:
{
"KeyMetadata": {
"Origin": "AWS_KMS",
"KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
"Description": "",
"KeyManager": "CUSTOMER",
"Enabled": true,
"CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
"KeyUsage": "ENCRYPT_DECRYPT",
"KeyState": "Enabled",
"CreationDate": 1478910250.94,
"Arn": "arn:aws:kms:us-west-2:123456789012:key/6f815f63-e628-448c-8251-e40cb0d29f59",
"AWSAccountId": "123456789012",
"EncryptionAlgorithms": [
"SYMMETRIC_DEFAULT"
]
}
}
記錄金鑰 ARN。您需要在下列步驟中使用它。
步驟 2:設定 KMS 金鑰許可
根據預設,所有 AWS KMS 金鑰都是私有的。只有資源擁有者可以使用它來加密和解密資料。您必須授予 CloudWatch Logs 服務主體使用金鑰的許可,並授予呼叫角色使用金鑰的許可。
首先,使用以下 get-key-policy 命令,將 KMS 金鑰的預設政策儲存為 policy.json:
aws kms get-key-policy --key-idkey-id--policy-name default --output text > ./policy.json
在文字編輯器中開啟 policy.json 檔案,並新增下列陳述式,以授予 CloudWatch Logs 服務主體使用金鑰的許可。此範例使用符合加密內容的Condition區段,將金鑰限制為特定的查詢資料表。
{ "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:region:account-id:lookup-table:lookup-table-name", "aws:SourceAccount": "account-id", "aws:SourceArn": "arn:aws:logs:region:account-id:lookup-table:lookup-table-name" } } }
接著,將許可新增至將呼叫 CloudWatch Logs CreateLookupTable或 UpdateLookupTable APIs的角色。CloudWatch Logs 會使用 代表客戶kms:ViaService呼叫 AWS KMS 。如需詳細資訊,請參閱 kms:ViaService。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-id:role/role-name" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "logs.region.amazonaws.com" ] } } }
最後,使用下列 put-key-policy 命令新增更新的政策:
aws kms put-key-policy --key-idkey-id--policy-name default --policy file://policy.json
步驟 3:將 KMS 金鑰與查詢資料表建立關聯
當您使用 CreateLookupTable API 建立 KMS 金鑰與查詢資料表建立關聯,或使用 UpdateLookupTable API 更新現有的查詢資料表。這兩個 APIs都是 AWSLogsConfigService 的一部分。
建立 KMS 金鑰時將其與查詢資料表建立關聯
使用 CreateLookupTable API,並使用 KMS 金鑰的 ARN 指定 kmsKeyArn 參數:
aws logs create-lookup-table \ --lookup-table-namemy-lookup-table\ --kms-key-arn "arn:aws:kms:region:account-id:key/key-id"
將 KMS 金鑰與現有查詢資料表建立關聯
使用 UpdateLookupTable API,並使用 KMS 金鑰的 ARN 指定 kmsKeyArn 參數:
aws logs update-lookup-table \ --lookup-table-namemy-lookup-table\ --kms-key-arn "arn:aws:kms:region:account-id:key/key-id"
考量事項
-
將 KMS 金鑰與查詢資料表建立關聯或取消關聯後,操作最多可能需要五分鐘才會生效。
-
如果您撤銷 CloudWatch Logs 對相關聯金鑰的存取權或刪除關聯的 KMS 金鑰,則無法再擷取 CloudWatch Logs 中的加密查詢資料表資料。
-
若要執行本主題中的步驟,您必須具有下列許可:
kms:CreateKey、kms:PutKeyPolicy、kms:GetKeyPolicy和適當的 CloudWatch Logs 許可,才能呼叫CreateLookupTable或UpdateLookupTable。