Control: 3.5 Ensure CloudTrail logs are encrypted at rest using KMS CMKs
Description
AWS CloudTrail is a web service that records AWS API calls for an account and makes those logs available to users and resources in accordance with IAM policies. AWS Key Management Service (KMS) is a managed service that helps create and control the encryption keys used to encrypt account data, and uses Hardware Security Modules (HSMs) to protect the security of encryption keys. CloudTrail logs can be configured to leverage server side encryption (SSE) and KMS customer created master keys (CMK) to further protect CloudTrail logs. It is recommended that CloudTrail be configured to use SSE-KMS.
Configuring CloudTrail to use SSE-KMS provides additional confidentiality controls on log data as a given user must have S3 read permission on the corresponding log bucket and must be granted decrypt permission by the CMK policy.
Remediation
Perform the following to configure CloudTrail to use SSE-KMS:
From Console:
- Sign in to the AWS Management Console and open the CloudTrail console at https://console.aws.amazon.com/cloudtrail.
- In the left navigation pane, choose
Trails
. - Click on a Trail
- Under the
S3
section click on the edit button (pencil icon). - Click
Advanced
. - Select an existing CMK from the
KMS key Id
drop-down menu
- Note: Ensure the CMK is located in the same region as the S3 bucket.
- Note: You will need to apply a KMS key policy on the selected CMK in order for CloudTrail, as a service, to encrypt and decrypt log files using the CMK provided. View the AWS documentation for editing the selected CMK Key policy.
- Click
Save
. - You will see a notification message stating that you need to have decryption permissions on the specified KMS key to decrypt log files.
- Click
Yes
.
From Command Line:
Run the following command to specify a KMS key ID to use with a trail:
aws cloudtrail update-trail --name <trail-name> --kms-id <cloudtrail-kms-key>
Run the following command to attach a key policy to a specified KMS key:
aws kms put-key-policy --key-id <cloudtrail-kms-key> --policy <cloudtrail-kms-key-policy>
Usage
Run the control in your terminal:
powerpipe control run aws_compliance.control.cis_v400_3_5
Snapshot and share results via Turbot Pipes:
powerpipe loginpowerpipe control run aws_compliance.control.cis_v400_3_5 --share
SQL
This control uses a named query:
cloudtrail_trail_logs_encrypted_with_kms_cmk