Requirement Summary:
Store customer orders in DynamoDB
Must encrypt data at rest
Company wants to use a key it generates (i.e., customer managed key)
Evaluate Options:
A. Set encryption to None, manually encrypt/decrypt in code
Overhead and error-prone
Also non-compliant with AWS encryption best practices
B. Use customer managed KMS key
Exactly meets the requirement: customer generates and controls the key
During table creation, you can specify a KMS CMK ARN
C. Default encryption + kms:Encrypt in SDK
Misunderstanding: DynamoDB handles encryption automatically
You don’t need to call kms:Encrypt manually in SDK
D. Use AWS managed key
Does not meet the requirement of using custom company-generated key
DynamoDB encryption: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EncryptionAtRest.html
KMS customer managed keys: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk