S3 Encryption trong aws
Để tránh việc lưu trữ dữ liệu dưới dạng thô, Amazon S3 cung cấp phương thức mã hóa dữ liệu. Cách thức hoạt động của mã hóa là dùng key và thuật toán (algorithm) để biến dữ liệu ban đầu thành dữ liệu được mã hóa. Vậy nên, vấn đề cần quan tâm là lưu trữ key ở đâu. Trong S3 có 2 cách chính để mã hóa
- Server-side encryption: Mã hóa phía server (S3)
- Client-side encryption: Mã hóa phía client (dùng các libs để mã hóa) rồi upload dữ liệu được mã hóa lên S3 Amazon S3 cung cấp 4 phương thức mã hóa object:
- SSE-S3: Mã hóa S3 objects sử dụng key quản lý bởi AWS
- SSE-KMS: Sử dụng AWS Key Management Service (KMS) để quản lý encryption keys
- SSE-C: Sử dụng khi bạn muốn quản lý encryption keys riêng của mình
- Client Side Encryption
SSE-S3 trong AWS
- Mã hóa sử dụng key quản lý bởi Amazon S3
- Object được mã hóa phía server side
- Phương thức mã hóa: AES-256
- Phải set header: "x-amz-server-side-encryption":"AES256"
SSE-KMS trong AWS
- Mã hóa sử dụng key quản lý bởi AWS Key Management Service (KMS)
- Object được mã hóa phía server side
- Phải set header: "x-amz-server-side-encryption":"aws:kms"
SSE-C trong AWS
- Là server-side encryption sử dụng key cung cấp bởi khách hàng (AWS không quản lý key này)
- Phải dùng HTTPS
- Encyption key phải được cung cấp trong HTTPs headers trong mỗi request
Client Side Encryption trong AWS
- Mã hóa phía client trước khi upload lên S3
- Sử dụng client libs chẳng hạn như: Amazon S3 Encryption Client
- Khi đọc dữ liệu trả về cần decrypt chúng