Thursday, November 21, 2024

[AWS] S3 Encryption

-

S3 Encryption for Objects là tính năng cho phép mã hóa dữ liệu trên các đối tượng S3. S3 hỗ trợ hai loại mã hóa khác nhau:

  • Server-side encryption (SSE): S3 mã hóa dữ liệu khi lưu trữ nó trên đĩa của mình. SSE có thể được thực hiện bằng cách sử dụng khóa được quản lý bởi Amazon S3 (SSE-S3) hoặc bằng cách sử dụng khóa được quản lý bởi khách hàng (SSE-C).
  • Client-side encryption: Dữ liệu được mã hóa trước khi được gửi đến S3 và được giải mã sau khi được lấy về. Việc này cung cấp một lớp bảo mật thêm cho các đối tượng S3, đặc biệt là khi người dùng muốn giữ quyền kiểm soát hoàn toàn quá trình mã hóa và giải mã.

Sử dụng S3 Encryption for Objects giúp bảo vệ dữ liệu của người dùng và đảm bảo rằng dữ liệu của họ được an toàn khi được lưu trữ trên S3.

Có tất cả 4 phương pháp mã hóa đối tượng trong S3 như sau:

– SSE-S3 (Server-Side Encryption with Amazon S3-managed Keys): Phương pháp này sử dụng khóa được quản lý bởi Amazon S3 để mã hóa dữ liệu của đối tượng S3. Khóa này được quản lý bởi AWS và hoàn toàn nằm trong quyền kiểm soát của AWS.

SSE-S3 (Server-Side Encryption with S3 Managed Keys) là một trong 4 phương pháp mã hóa đối tượng (objects) trên Amazon S3. Khi sử dụng SSE-S3, dữ liệu của bạn sẽ được mã hóa trên máy chủ của Amazon S3 bằng cách sử dụng khóa mã hóa được quản lý bởi S3, đảm bảo tính bảo mật và toàn vẹn dữ liệu của bạn.

Khi upload đối tượng lên S3, bạn có thể yêu cầu Amazon S3 mã hóa đối tượng bằng SSE-S3 bằng cách đặt cờ x-amz-server-side-encryption trong yêu cầu HTTP header với giá trị là AES256. Sau đó, khi đối tượng được lưu trữ trên S3, nó sẽ được mã hóa tự động với khóa được quản lý bởi S3. Khi tải xuống đối tượng từ S3, Amazon S3 sẽ giải mã đối tượng tự động cho bạn.

SSE-S3 có thể được sử dụng với tất cả các tính năng S3 như bucket policies, S3 Lifecycle, S3 Versioning và các tính năng khác.

Việc sử dụng SSE-S3 có nhiều lợi ích như đơn giản, thuận tiện và tiết kiệm chi phí so với việc triển khai và quản lý hệ thống mã hóa riêng tư.

– SSE-KMS (Server-Side Encryption with AWS KMS-managed Keys): Phương pháp này sử dụng dịch vụ quản lý khóa của AWS (AWS KMS) để quản lý khóa mã hóa của đối tượng S3. Khóa này có thể được quản lý và kiểm soát bởi khách hàng.

SSE-KMS là một trong 4 phương pháp mã hóa đối với đối tượng S3, trong đó KMS là viết tắt của Key Management Service. Với SSE-KMS, khóa được sử dụng để mã hóa đối tượng S3 được quản lý bởi KMS.

Khi một đối tượng S3 được yêu cầu để giải mã, yêu cầu đó sẽ được gửi tới KMS để xác định khóa để sử dụng. KMS sau đó sẽ trả về khóa đó cho S3 để giải mã đối tượng.

Một trong những lợi ích của SSE-KMS là cho phép quản lý khóa dễ dàng hơn. Người dùng có thể sử dụng các chính sách IAM để kiểm soát quyền truy cập vào khóa và giảm thiểu sự cố rò rỉ khóa. SSE-KMS cũng cung cấp khả năng theo dõi, ghi nhật ký và kiểm soát truy cập với khóa, giúp các nhà quản trị có thể theo dõi các hoạt động của khóa và phát hiện các hoạt động bất thường.

Tuy nhiên, SSE-KMS có thể tăng chi phí hoạt động và trễ thời gian đối với việc mã hóa và giải mã do việc tương tác giữa S3 và KMS.

– SSE-C (Server-Side Encryption with Customer-provided Keys): Phương pháp này cho phép khách hàng tự quản lý khóa mã hóa của đối tượng S3 bằng cách cung cấp khóa của riêng mình.

– Mã hóa phía khách hàng (Client Side Encryption): Phương pháp này mã hóa dữ liệu của đối tượng S3 trước khi gửi nó đến AWS và giải mã dữ liệu khi lấy nó về. Điều này cho phép khách hàng giữ quyền kiểm soát hoàn toàn quá trình mã hóa và giải mã.

Mã hóa trên phía máy chủ với khóa do khách hàng cung cấp (SSE-C) là một phương pháp mã hóa đối tượng trên Amazon S3 cho phép bạn quản lý các khóa mã hóa của riêng mình bên ngoài AWS. Với SSE-C, bạn cung cấp khóa mã hóa của mình và gửi nó đến Amazon S3 như một phần của cuộc gọi API khi tải lên một đối tượng. Khi một đối tượng được tải lên với SSE-C, khóa được sử dụng để mã hóa dữ liệu đối tượng trước khi nó được lưu trữ trong S3.

Khác với SSE-S3 và SSE-KMS, Amazon S3 không có quyền truy cập vào khóa mã hóa khi sử dụng SSE-C, do đó quản lý và bảo vệ khóa là rất quan trọng. SSE-C có thể hữu ích cho các khách hàng yêu cầu kiểm soát cao hơn đối với các khóa mã hóa của họ hoặc có yêu cầu tuân thủ quy định hoặc tiêu chuẩn liên quan đến quản lý khóa mã hóa.

Nên lưu ý rằng khi sử dụng SSE-C, Amazon S3 không lưu trữ khóa mã hóa của bạn, vì vậy bạn phải cung cấp cùng khóa mã hóa mỗi lần truy cập đến đối tượng. Nếu bạn mất khóa, bạn sẽ không thể truy cập đến đối tượng. Do đó, việc quản lý và lưu trữ khóa mã hóa an toàn là rất quan trọng.

Việc hiểu rõ các phương pháp mã hóa này rất quan trọng để đảm bảo rằng chúng ta sử dụng phương pháp phù hợp với tình huống cụ thể trong việc mã hóa dữ liệu trên S3. Điều này đặc biệt quan trọng khi tham gia kỳ thi AWS.

Encryption in transit (SSL/TLS)

Encryption in transit (SSL/TLS) là phương thức mã hóa thông tin trong quá trình truyền tải giữa các thiết bị mạng, đảm bảo rằng các thông tin nhạy cảm không bị lộ trên đường truyền. SSL/TLS sử dụng các chứng chỉ kỹ thuật số để xác thực danh tính của các bên tham gia giao tiếp, sau đó sử dụng các phương thức mã hóa để mã hóa dữ liệu trong quá trình truyền tải. Khi dữ liệu đã được mã hóa, chỉ những bên có chứng chỉ kỹ thuật số được cấp phép mới có thể giải mã nó.

Sử dụng SSL/TLS cho phép truyền tải dữ liệu an toàn và bảo vệ khỏi các mối đe dọa như đánh cắp thông tin, tấn công gián điệp hoặc tấn công nghe trộm dữ liệu. Nó cũng cung cấp tính toàn vẹn của dữ liệu, đảm bảo rằng dữ liệu truyền tải không bị thay đổi trong quá trình truyền tải. SSL/TLS là một phần quan trọng trong các giao thức bảo mật của nhiều ứng dụng, bao gồm cả truyền tải email, truyền tải web và truyền tải file.

Thực hành về S3 Encryption.

Bây giờ mình thử tải lên 1 tập tin mới tên là coffee.jpg. Trong phần Upload bạn hãy kéo xuống

Kéo xuống dưới, tại Additional upload options bạn hãy bấm xổ xuống để có thêm các tuỳ chọn ẩn.

Kéo xuống phần Server-side encryption settings, mặc định Server-side encryption sẽ tắt, để bật nó bạn hãy chọn Enable. Tại Encryption key type mình chọn loại mã hoá Amazon S3 key (SSE-S3). Kéo xuống dưới cùng bấm Upload.

Bây giờ hãy lặp lại điều đó đối với file beach.jpg nhưng lần này mình sẽ chọn loại mã hoá là AWS Key Management Service key (SSE-KMS) và AWS KMS key là AWS managed key (aws/s3). Nhưng trước hết hãy tìm hiểu 1 chút về 3 tuỳ chọn của AWS KMS key nhé:

AWS KMS (Key Management Service) là dịch vụ quản lý khóa mã hóa được cung cấp bởi Amazon Web Services (AWS). Có nhiều tùy chọn khóa khác nhau trong KMS để cung cấp tính năng mã hóa và giải mã cho các dịch vụ AWS khác nhau, bao gồm Amazon S3 và Amazon EBS.

Dưới đây là ý nghĩa của các tuỳ chọn khóa trong KMS:

  • Customer managed CMK (Khóa quản lý khách hàng): Đây là khóa mà khách hàng tự tạo và quản lý trên KMS. Khóa này có thể được sử dụng cho việc mã hóa và giải mã dữ liệu trên các dịch vụ AWS.
  • AWS managed CMK: Đây là khóa được tạo và quản lý bởi AWS. AWS managed CMK có thể được sử dụng cho việc mã hóa và giải mã dữ liệu trên các dịch vụ AWS mà không cần phải tạo hoặc quản lý các khóa riêng của khách hàng.
  • AWS owned CMK (Khóa quản lý của AWS): Đây là khóa quản lý được sử dụng bởi các dịch vụ AWS khác nhau để mã hóa dữ liệu. Khóa này không thể được sử dụng trực tiếp để mã hóa dữ liệu của khách hàng, mà phải được sử dụng thông qua các dịch vụ AWS hỗ trợ nó.
  • Custom key store (Khoá lưu trữ tùy chỉnh): Đây là tùy chọn cho phép khách hàng tạo và quản lý khóa riêng tại một vị trí được quản lý bởi khách hàng. Khoá lưu trữ tùy chỉnh này có thể được sử dụng để cung cấp tính năng mã hóa và giải mã cho các dịch vụ AWS mà không cần phải truy cập trực tiếp vào KMS của AWS.

Mỗi tùy chọn khóa trong KMS có ưu điểm và giới hạn riêng, do đó, khi triển khai mã hóa dữ liệu trên các dịch vụ AWS, người dùng nên cân nhắc và chọn tùy chọn khóa phù hợp với nhu cầu của họ.

Sau khi tìm hiểu xong, kéo xuống dưới cùng và bấm Upload.

Vậy những gì chúng ta có sau khi upload file là 5 phiên bản với coffee.jpg và beach.jpg mỗi file đều có các phiên bản khác nhau.

Bây giờ lần lượt hãy mở tab mới 2 file beach.jpg. Ta thấy file beach.jpg đầu tiên có mã hoá AWS-KMS master-key (SSE-KMS).

Và file beach.jpg thứ 2 hoàn toàn không có mã hoá, điều này là đúng với cài đặt của chúng ta.

Như vậy chúng ta có thể thấy, mã hoá sẽ áp dụng cho từng đối tượng cụ thể với từng Version ID cụ thể. Chúng ta hãy test 1 trường hợp nữa là Encryption sẽ được bật theo mặc định bằng cách hãy vào Properties và kéo xuống phần Default encryption › Edit.

Tại Server-side encryption hãy lựa chọn Enable, Encryption key type để đơn giản mình lựa chọn Amazon S3 key (SSE-S3) và bấm vào Save changes.

Save changes

Bây giờ hãy tiến hành tải lên 1 file mới cho dù chúng ta không chỉ định 1 hình thức mã hoá nào thì mặc định Default encryption vẫn được bật.

Có một vấn đề là tại sao chúng ta không thấy Encryption SSE-C trên Console?

SSE-C (Server-Side Encryption with Customer-Provided Keys) là một trong bốn phương pháp mã hóa đối với các đối tượng được lưu trữ trong Amazon S3. Tuy nhiên, khi sử dụng SSE-C, AWS không quản lý hoặc lưu trữ các khóa mã hóa. Thay vào đó, khóa mã hóa được cung cấp bởi khách hàng và được sử dụng để mã hóa và giải mã các đối tượng.

Do khóa mã hóa được cung cấp bởi khách hàng và không được quản lý bởi AWS, nó không xuất hiện trên giao diện điều khiển của Amazon S3. Bạn sẽ phải tự quản lý các khóa mã hóa của mình và sử dụng chúng để mã hóa và giải mã các đối tượng S3. Các tùy chọn khác nhau để quản lý khóa mã hóa của khách hàng được cung cấp bởi AWS, chẳng hạn như sử dụng AWS KMS (Key Management Service) hoặc các giải pháp quản lý khóa mã hóa bên ngoài AWS.

Để sử dụng SSE-C trên Amazon S3, bạn cần thực hiện các bước sau:

  • Tạo một khóa mã hóa bí mật (secret encryption key) bằng một thư viện mã hóa bên thứ ba hoặc bằng công cụ quản lý khóa của riêng mình.
  • Tải lên các đối tượng muốn mã hóa lên S3 thông qua các yêu cầu HTTP/HTTPS, cung cấp khóa mã hóa bí mật như là một phần của xác thực yêu cầu.

Vì SSE-C là mã hóa do khách hàng thực hiện, AWS không lưu trữ khóa mã hóa và không kiểm soát quản lý khóa. Bạn phải quản lý khóa mã hóa của riêng mình để đảm bảo an toàn và khả năng truy cập dữ liệu.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories