Check ID:
Provider: AWS
Service:
Severity: MEDIUM
Categories:
Resource type:
cloudwatch_log_group_kms_encryption_enabledProvider: AWS
Service:
cloudwatchSeverity: MEDIUM
Categories:
encryptionResource type:
OtherWhat this check verifies
CloudWatch log groups are assessed for at-rest encryption by checking if an AWS KMS key is associated with the log group viakmsKeyId.
Risk
Without a customer-managed KMS key, logs rely on service-managed encryption, limiting control and auditability.- Confidentiality: weaker key-policy barriers against unauthorized reads
- Integrity/availability: no custom rotation or rapid revoke, hindering incident response and compliance
Recommendation
Associate each log group with a customer-managed KMS key viakmsKeyId.
- Enforce least privilege in key and IAM policies, granting
kms:Decryptonly to required principals - Enable rotation and monitor key usage
- Separate keys by app/tenant to support defense in depth and rapid revocation
Remediation
- CLI
- Terraform
- Native IaC
- Dashboard steps
aws logs associate-kms-key —log-group-name <LOG_GROUP_NAME> —kms-key-id arn:aws:kms:<REGION>:<ACCOUNT_ID>:key/<KEY_ID>
References
- https://docs.aws.amazon.com/cli/latest/reference/logs/associate-kms-key.html
- https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudwatch_log_group
- https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/logs/client/associate_kms_key.html
- https://support.icompaas.com/support/solutions/articles/62000233436-ensure-cloudwatch-log-groups-are-protected-by-aws-kms
Where this check fires
This check runs on every scheduled scan against your AWS account. Findings appear at Cloud Security → Findings filterable byCheck ID = cloudwatch_log_group_kms_encryption_enabled. To re-evaluate after a fix, hit Run now on the account’s schedule under Cloud Security → Schedules — the next scan re-checks this control and marks the finding fixed or keeps it persistent.
← Back to AWS checks