本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 在日誌中加密 CloudWatch 日誌資料 AWS Key Management Service
日誌群組資料一律會在 CloudWatch 日誌中加密。根據預設, CloudWatch Logs 會使用伺服器端加密搭配 256 位元進階加密標準 Galois/計數器模式 (AES-GCM) 來加密靜態日誌資料。您也可以使用 AWS Key Management Service 進行此加密。如果您這樣做,則會使用 AWS KMS 金鑰完成加密。使用 加密 AWS KMS 會在日誌群組層級啟用,方法是在建立日誌群組時或存在日誌群組之後,將KMS金鑰與日誌群組建立關聯。
重要
CloudWatch 日誌現在支援加密內容,使用 kms:EncryptionContext:aws:logs:arn
做為金鑰,使用 做為日誌群組ARN的 做為該金鑰的值。如果您有已使用KMS金鑰加密的日誌群組,而且您想要限制金鑰用於單一帳戶和日誌群組,則應指派包含IAM政策條件的新KMS金鑰。如需詳細資訊,請參閱AWS KMS 金鑰和加密內容。
重要
CloudWatch 日誌現在支援kms:ViaService
允許日誌代表您進行 AWS KMS 呼叫。您應該將此新增至在 金鑰政策或 中呼叫 CloudWatch Logs 的角色IAM。如需詳細資訊,請參閱 kms:ViaService。
將KMS金鑰與日誌群組建立關聯後,日誌群組的所有新擷取資料都會使用此金鑰加密。此資料在保留期間以加密格式存放。 CloudWatch Logs 會在請求時解密此資料。 CloudWatch Logs 必須在請求加密資料時擁有KMS金鑰的許可。
如果您稍後取消KMS金鑰與日誌群組的關聯, CloudWatch Logs 會使用 CloudWatch Logs 預設加密方法加密新擷取的資料。先前使用KMS金鑰加密的所有擷取資料都會保持使用KMS金鑰加密。 CloudWatch 日誌仍然可以在KMS金鑰取消關聯後傳回該資料,因為 CloudWatch 日誌仍然可以繼續參考金鑰。不過,如果稍後停用金鑰,則 CloudWatch Logs 無法讀取使用該金鑰加密的日誌。
重要
CloudWatch 日誌僅支援對稱KMS金鑰。請勿使用非對稱金鑰來加密日誌群組中的資料。如需詳細資訊,請參閱使用對稱和非對稱金鑰。
限制
-
若要執行下列步驟,您必須擁有下列許可:
kms:CreateKey
、kms:GetKeyPolicy
和kms:PutKeyPolicy
。 -
在您建立或取消金鑰與日誌群組的關聯後,操作將在 5 分鐘內生效。
-
如果您撤銷對相關聯金鑰的 CloudWatch Logs 存取權或刪除相關聯KMS金鑰,則無法再擷取 CloudWatch Logs 中的加密資料。
-
您無法使用 CloudWatch 主控台將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"
]
}
}
步驟 2:設定KMS金鑰的許可
根據預設,所有 AWS KMS 金鑰都是私有的。只有資源擁有者可以使用它來加密和解密資料。不過,資源擁有者可以將存取KMS金鑰的許可授予其他使用者和資源。透過此步驟,您可以授予 CloudWatch Logs 服務主體和發起人角色許可,以使用 金鑰。此服務主體必須位於存放KMS金鑰的相同 AWS 區域。
最佳實務是,建議您將KMS金鑰的使用限制為您指定的 AWS 帳戶或日誌群組。
首先,policy.json
使用下列get-key-policy命令將KMS金鑰的預設政策儲存為 :
aws kms get-key-policy --key-id
key-id
--policy-name default --output text > ./policy.json
在文字編輯器中開啟 policy.json
檔案,並從下列其中一個陳述式中加入區段 (以粗體顯示)。使用逗號從新陳述式中分隔現有陳述式。這些陳述式使用 Condition
區段來增強 AWS KMS 金鑰的安全性。如需詳細資訊,請參閱AWS KMS 金鑰和加密內容。
此範例中的 Condition
區段會將金鑰限制為單一日誌群組 ARN。
{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
Your_account_ID
:root" }, "Action": "kms:*", "Resource": "*" },{ "Effect": "Allow", "Principal": { "Service": "logs.
] }region
.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnEquals": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:region
:account-id
:log-group:log-group-name
" } } }
本範例中的 Condition
區段將 AWS KMS 金鑰限用於指定的帳戶,但可用於任何日誌群組。
{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
Your_account_ID
:root" }, "Action": "kms:*", "Resource": "*" },{ "Effect": "Allow", "Principal": { "Service": "logs.
] }region
.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:region
:account-id
:*" } } }
接下來,將許可新增至將呼叫 CloudWatch 日誌的角色。您可以新增額外的陳述式至 AWS KMS 金鑰政策,或在角色本身IAM透過 新增。 CloudWatch Logs AWS KMS kms:ViaService
會使用 代表客戶呼叫 。如需詳細資訊,請參閱 kms:ViaService。
若要在 AWS KMS 金鑰政策中新增許可,請將下列其他陳述式新增至您的金鑰政策。如果您使用此方法,最佳實務是將政策範圍限定為將與 AWS KMS 加密日誌群組互動的角色。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
account_id
:role/role_name
" }, "Action": [ "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt", "kms:GenerateDataKey*" "kms:Describe*" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "logs.region
.amazonaws.com" ] } } }
或者,如果您想要在 中管理角色許可IAM,您可以透過下列政策新增同等許可。這可以新增到現有的角色政策,或做為額外的個別政策連接到角色。如果您使用此方法,最佳實務是將政策範圍限定為僅用於日誌加密的 AWS KMS 金鑰。如需詳細資訊,請參閱編輯IAM政策。
{ "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt", "kms:GenerateDataKey* ", "kms:Describe*" ], "Condition":{ "StringEquals":{ "kms:ViaService": [ "logs.
region
.amazonaws.com" ] } }, "Resource": "arn:aws:kms:region
:account_id
:key/key_id
" } ] }
最後,使用下列put-key-policy命令新增更新的政策:
aws kms put-key-policy --key-id
key-id
--policy-name default --policy file://policy.json
步驟 3:將KMS金鑰與日誌群組建立關聯
您可以在建立KMS金鑰時或在金鑰存在之後,將金鑰與日誌群組建立關聯。
若要尋找日誌群組是否已有相關聯的KMS金鑰,請使用下列describe-log-groups命令:
aws logs describe-log-groups --log-group-name-prefix "
log-group-name-prefix
"
如果輸出包含 kmsKeyId
欄位,則日誌群組會與該欄位值所顯示的索引鍵相關聯。
建立KMS金鑰時將金鑰與日誌群組建立關聯
使用 create-log-group 命令,如下所示:
aws logs create-log-group --log-group-name
my-log-group
--kms-key-id "key-arn
"
將KMS金鑰與現有日誌群組建立關聯
使用 associate-kms-key 命令,如下所示:
aws logs associate-kms-key --log-group-name
my-log-group
--kms-key-id "key-arn
"
步驟 4:取消金鑰與日誌群組的關聯
若要取消與日誌群組關聯的KMS金鑰關聯,請使用下列disassociate-kms-key命令:
aws logs disassociate-kms-key --log-group-name
my-log-group
AWS KMS 金鑰和加密內容
為了增強 AWS Key Management Service 金鑰和加密日誌群組的安全性, CloudWatch Logs 現在會將日誌群組ARNs做為加密日誌資料所用的加密內容的一部分。加密內容是一組做為額外驗證資料的索引鍵/值組。加密內容可讓您使用IAM政策條件,依 AWS 帳戶和日誌群組限制對 AWS KMS 金鑰的存取。如需詳細資訊,請參閱加密內容和IAMJSON政策元素:條件。
建議您為每個加密日誌群組使用不同的KMS金鑰。
如果您有先前加密的日誌群組,現在想要將日誌群組變更為使用僅適用於該日誌群組的新KMS金鑰,請依照下列步驟執行。
將加密的日誌群組轉換為使用具有政策的KMS金鑰,將其限制為該日誌群組
輸入下列命令來尋找日誌群組目前金鑰ARN的 :
aws logs describe-log-groups
輸出包括這一行。記下 ARN。步驟 7 中會用到。
... "kmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/01234567-89ab-cdef-0123-456789abcdef" ...
輸入下列命令來建立新的KMS金鑰:
aws kms create-key
輸入下列命令,將新金鑰的政策儲存至
policy.json
檔案:aws kms get-key-policy --key-id
new-key-id
--policy-name default --output text > ./policy.json使用文字編輯器來開啟
policy.json
,並將Condition
運算式新增至政策:{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
ACCOUNT-ID
:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.region
.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:REGION
:ACCOUNT-ID
:log- group:LOG-GROUP-NAME
" } } } ] }輸入下列命令,將更新的政策新增至新KMS金鑰:
aws kms put-key-policy --key-id
new-key-ARN
--policy-name default --policy file://policy.json輸入下列命令,將政策與日誌群組建立關聯:
aws logs associate-kms-key --log-group-name
my-log-group
--kms-key-idnew-key-ARN
CloudWatch 日誌現在使用新金鑰加密所有新資料。
接下來,撤銷舊金鑰的所有權限,除了
Decrypt
以外。首先,輸入下列命令以擷取舊政策:aws kms get-key-policy --key-id
old-key-ARN
--policy-name default --output text > ./policy.json使用文字編輯器來開啟
policy.json
,並移除Action
清單中的所有值,除了kms:Decrypt
以外{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
Your_account_ID
:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.region
.amazonaws.com" }, "Action": [ "kms:Decrypt" ], "Resource": "*" } ] }輸入下列命令,將更新的政策新增至舊金鑰:
aws kms put-key-policy --key-id
old-key-ARN
--policy-name default --policy file://policy.json