All checks
Medium Kinesis · regional

Firehose delivery streams should be encrypted at rest

Checks that a Firehose stream's records are encrypted at rest with an AWS KMS key. A Direct PUT stream needs Firehose server-side encryption; a stream reading from a Kinesis data stream passes when that source stream is encrypted (Kinesis.1), since Firehose cannot encrypt it, and one reading from Amazon MSK passes, as MSK always encrypts data at rest.

service
Kinesis
severity
Medium
scope
evaluated in every region

How to fix it

  • Can break clients: With a customer managed key, PutRecord callers need kms:GenerateDataKey and kms:Decrypt on it, and records Firehose cannot decrypt for 24 hours are discarded.
  • Affects another check: A stream reading from a Kinesis data stream cannot enable this, so set Server-side encryption to Enabled on that source stream instead, which clears this check and Kinesis.1 together.

In the console

Amazon Data Firehose → the Firehose stream → Configuration → Server-side encryption (SSE)

Server-side encryption (SSE)
Enable server-side encryption for source records in Firehose stream
Encryption type
AWS owned key, or a customer managed key Firehose can use

With the AWS CLI

aws firehose start-delivery-stream-encryption --delivery-stream-name <stream-name> --delivery-stream-encryption-configuration-input KeyType=AWS_OWNED_CMK --region <region>

With Terraform

resource "aws_kinesis_firehose_delivery_stream" "this" {
  name        = var.stream_name
  destination = var.destination

  server_side_encryption {
    enabled  = true
    key_type = "AWS_OWNED_CMK"
  }
}

See which of your accounts this check is failing on.

Book a live scan