Data Protection with KMS
Security เริ่มจากการปกป้อง data ทั้งตอนเก็บ, ตอนส่งผ่าน network และตอน service ใช้งาน key เพื่อ encrypt/decrypt อย่างควบคุมได้
Encryption at Rest และ in Transit
Encryption at Rest คือการเข้ารหัสข้อมูลที่ถูกเก็บใน storage เช่น S3 object, EBS volume, RDS storage หรือ DynamoDB table ส่วน Encryption in Transit คือการเข้ารหัสข้อมูลระหว่าง client กับ service หรือ service กับ service เช่น HTTPS/TLS
AWS KMS และ Customer Managed Key
AWS KMS เป็น managed service สำหรับสร้างและควบคุม cryptographic keys ที่ AWS services ใช้เข้ารหัสข้อมูล AWS managed key ใช้ง่ายและดูแลโดย AWS ส่วน Customer Managed Key เหมาะเมื่อทีมต้องกำหนด Key Policy, audit, rotation, grants หรือแยก key ตาม environment/application
Key Policy
Key Policy คือ resource policy หลักของ KMS key ถ้า Key Policy ไม่อนุญาต Principal ใด Principal นั้นอาจใช้ key ไม่ได้
แม้จะมี IAM Policy ฝั่ง identity แล้วก็ตาม แนวทางที่ดีคือให้ key admin แยกจาก key user และให้ application role ใช้เฉพาะ
kms:Encrypt, kms:Decrypt, kms:GenerateDataKey ตามความจำเป็น
{
"Effect": "Allow",
"Principal": { "AWS": "arn:aws:iam::111122223333:role/app-role" },
"Action": ["kms:Decrypt", "kms:GenerateDataKey"],
"Resource": "*"
}
Key rotation
Key rotation ลดความเสี่ยงจาก key material ที่ถูกใช้ยาวนาน Customer Managed Key แบบ symmetric สามารถเปิด automatic rotation ได้ แต่ rotation ไม่ได้แทนที่การควบคุม permission และไม่ควรใช้เป็นเหตุผลให้ key access กว้างเกินไป
Best practices
- แยก Customer Managed Key สำหรับ workload สำคัญ เช่น production database, log archive หรือ backup
- ใช้ IAM role ของ workload แทน long-term access key
- เปิด CloudTrail เพื่อ audit KMS API activity
- ตั้ง alias ที่สื่อความหมาย เช่น
alias/prod/app-db - อย่า hard-code key ID ใน app ถ้า alias เพียงพอและลด coupling ได้
Common mistakes
- ให้
kms:*กับ application role โดยไม่จำเป็น - ลืมให้ service principal หรือ workload role ใช้ key ทำให้ S3/EBS/RDS เข้ารหัสแล้วใช้งานไม่ได้
- ลบ KMS key โดยไม่เข้าใจว่า encrypted data เดิมจะ decrypt ไม่ได้เมื่อ key ถูกลบถาวร
Review questions
- Encryption at Rest ต่างจาก Encryption in Transit อย่างไร?
- เมื่อไรควรใช้ Customer Managed Key แทน AWS managed key?
- Key Policy มีผลต่อ IAM Policy อย่างไร?