4
votes

I'm setting up a Kinesis Firehose delivery stream to S3, and I noticed you can set a custom KMS key to be used for encrypting the files on S3.

However, if the S3 bucket already has KMS encryption enabled, files would be encrypted anyway. The difference is of course that the default AWS manager S3 KMS key will be used instead of the customer managed custom KMS key supplied to Firehose.

What reason is there typically to use a custom KMS key for the encryption of Firehose data on S3, as opposed to relying on the default S3 KMS key? Is there any point at all in doing so if you're also the owner of the S3 bucket and in control of its settings, or is the primary use to enable using encryption also when you're not in control of the settings of the target bucket?

Or is the Firehose associated KMS key also used for encrypting data in transit, as opposed to the S3 provided KMS key used to encrypt data at rest?

1

1 Answers

5
votes

Kinesis Firehose will use the KMS key you specify to encrypt the objects when landing in S3. You may not have control over the S3 bucket's encryption settings, and you may want to use a different KMS key (with different permissions) than the S3 default KMS encryption key for whatever reason. There can be many different objects in that S3 bucket at different hierarchies, requiring different KMS encryption, or not.

S3 should not "double encrypt" your data. The KMS encryption from Kinesis Firehose will be specified in the S3 put header, so S3 will know which encryption settings to use when it does the actual write. If there are default KMS settings on the S3 bucket, and it does not find an encryption setting in the put header (whether SSE or KMS), then S3 should apply the default encryption specified in the bucket settings.