Tính năng Encrypt Data trên S3 Cloud Storage

I. Chức năng Encrypt Data trên S3

II. S3 Encrypt hoạt đông như thế nào.

  1. S3 Encrypt : SSE-C (Server Side Encrypt – Customer Provided Key)
    Yêu cầu: KH cũng cấp 1 key dạng chuỗi 32 ký tự

    • Tiến trình Encrypt
      • (1) Client tiến hành upload các objects đến S3 kèm theo Customer Key, qua kết nối HTTPS (Hypertext Transfer Protocol Secure) đảm bảo mã hóa nội dung gửi nếu dùng HTTP thì Key sẽ ở dạng plaintext.
      • (2) S3 Server tiếp nhận Objects và Customer Key, ở đây S3 sẽ tạo mã xác thực HMAC (Hash-based message authentication code) từ thông tin được tiếp nhận trước đó và lưu cùng Object đã mã hóa xuống Storage.
      • Key được lưu tạm trên RAM sẽ xóa đảm bảo phía nhà cũng cấp cũng không biết thông tin.
    • Tiến trình Decrypt
      • (1) Client gửi yêu cầu cùng Customer-Key đến S3
      • (2) S3 tiếp nhận thông tin Customer-Key, Server S3 xác nhận Key với HMAC tương ứng
      • (3) Sau khi xác nhận thông tin chính xác, S3 giải mã để tìm object tương ứng
      • (4) Phản hồi cho phía Client
    • Nhận xét chung:
      • Ưu điểm:
        • Customer-Key và Data mã hóa qua HTTPS trong quá trình truyền
        • Dữ liệu mã hóa, ngăn các truy cập không được xác thực kể cả nhà cũng cấp
        • Có thể tạo nhiều Key.
      • Nhược điểm:
        • Customer-Key do khách hàng cung cấp, nên nếu mất thông tin Key thì không thể truy cập, coi như mất dữ liệu, nên phải lưu lại thông tin Key.
  2. Client Side Encrypt
    • Tiến trình Encrypt:
      • (1) Client sử dụng tools (REST API, AWS SDK...) ví dụ java client tạo plaintext key dùng để encrypt Object Data
      • (2) Customer CMK được client cung cấp sẽ mã hóa chung với plaintext key (bước này có thể có hoặc không, tùy thuộc vào code hoặc tools)
      • (3) Client gửi Data và Key đã được mã hóa đến S3
      • (4) S3 Server lưu lại
    • Tiến trình Decrypt:
      • (1) Client gửi yêu cầu đến S3 Server
      • (2) S3 phản hồi Data Object về cho Client
      • (3) Client sử dụng tools (Rest API, AWS SDK, s3cmd…) nhận Data rồi tiến hành giải mã
      • (4) Client truy cập Data sau giải mã
    • Nhận xét chung:
      • Ưu điểm:
        • Key khách hàng tự quản lý
        • Data được mã hóa tại máy client trước khi gửi
        • Những truy cập không có thông tin mã hóa cũng không thể decrypt và sử dụng
      • Nhược điểm:
        • Customer-Key do khách hàng cung cấp, nên nếu mất thông tin Key thì không thể truy cập, coi như mất dữ liệu, nên phải lưu lại thông tin Key.

III. Cấu hình S3 Encrypt

A. Server Site Encrypt – Customer Provided Key (aws-cli v2/S3Browser)

  1. Sử dụng aws-cli v2
    • Tạo key:
      key=”12345678901234567890123456789012″
    • Upload file từ local lên S3
      aws s3 cp /root/She.mp4 s3://lvs2/ --endpoint-url https://s3-hcm-r1.longvan.net --sse AES256 --sse-c AES256 --sse-c-key $key
    • Download từ S3
      aws s3 cp s3://lvs2/She.mp4 /root/ --endpoint-url https://s3-hcm-r1.longvan.net --sse AES256 --sse-c AES256 --sse-c-key $key
    • Nếu không có SSE-C Key thì sẽ không truy cập được

  2. Sử dụng S3Browser
    • Enable SSE-C
    • Tạo Rule
    • Chọn Bucket/Folder hoặc các loại file cần Encrypt. Ví dụ: chỉ Encrypt các file có đuôi .mp4 -> SSE-C/*.mp4
      Nhập Key -> Chọn Enable
    • Các Object được upload lên S3 Bucket sẽ có thông tin được mã hóa

    • Client truy cập thông thường từ bên ngoài sẽ không view được
B. Client Site Encrypt – Customer Provided Key  (s3cmd/S3Browser)
  1. Sử dụng s3cmd
    • Cấu hình các thông tin sau trong file .s3cfg
      set “encrypt = True”
      gpg passphrase = “Key để mã hóa Object Data”
    • Send thử 1 file .txt với nội dung như sau

    • Client thử tải file về
    • Với client đã được set key
  2. Sử dụng S3BROWSER
    • Enable Client Side Encrypt
    • Chọn thông tin mong muốn và nhập password Key để Encrypt
    • So sánh kết quả
      Videos được upload lên bằng S3Browser trước khi Enable Encrypt

      Truy cập Videos sau khi được Enable Encrypt