Giới thiệu tính năng  mã hóa phía máy chủ với các khóa mã hóa được quản lý bởi Amazon Simple Queue Service (SSE-SQS)

Được viết bởi James Beswick

Amazon Simple Queue Service (SQS) hiện cung cấp mã hóa phía máy chủ (SSE) bằng cách sử dụng mã hóa do SQS sở hữu (SSE-SQS) theo mặc định. Tính năng này giúp đơn giản hóa hơn nữa khả năng bảo mật để mã hóa nội dung message trong hàng đợi SQS.

SQS là dịch vụ hàng đợi message được toàn quyền quản lý cho phép bạn tách riêng và mở rộng quy mô các microservices, hệ thống phân tán và ứng dụng không có máy chủ. Khách hàng ngày càng tách các ứng dụng monolithic của họ thành các microservices và chuyển khối lượng công việc nhạy cảm sang SQS, chẳng hạn như các ứng dụng tài chính và chăm sóc sức khỏe, những ứng dụng có quy định tuân thủ bắt buộc phải mã hóa dữ liệu.

SQS đã hỗ trợ mã hóa phía máy chủ bằng khóa mã hóa do khách hàng cung cấp bằng AWS Key Management Service (SSE-KMS) hoặc sử dụng khóa mã hóa do SQS sở hữu (SSE-SQS). Cả hai tùy chọn mã hóa đều giảm đáng kể gánh nặng vận hành và độ phức tạp liên quan đến việc bảo vệ dữ liệu. Ngoài ra, với loại mã hóa SSE-SQS, bạn không cần tạo, quản lý hoặc trả tiền cho các khóa mã hóa do SQS quản lý. 

Sử dụng mã hóa mặc định

Với tính năng này, tất cả các hàng đợi mới được tạo bằng end point HTTPS (TLS) và Signature Version 4 đều được mã hóa bằng mã hóa do SQS sở hữu (SSE-SQS) theo mặc định, tăng cường bảo vệ dữ liệu của bạn khỏi bị truy cập trái phép. Bất kỳ hàng đợi mới nào được tạo bằng end point không phải TLS sẽ không bật mã hóa SSE-SQS theo mặc định. Do đó, chúng tôi khuyến khích bạn tạo hàng đợi SQS bằng cách sử dụng end point HTTPS như một phương pháp bảo mật tốt nhất.

Mã hóa mặc định SSE-SQS có sẵn cho cả hàng đợi standard và FIFO. Bạn không cần thực hiện bất kỳ thay đổi mã hoặc ứng dụng nào để mã hóa hàng đợi mới. Điều này không ảnh hưởng đến hàng đợi hiện có. Tuy nhiên, bạn có thể thay đổi tùy chọn mã hóa cho hàng đợi hiện có bất kỳ lúc nào bằng cách sử dụng bảng điều khiển SQS, AWS CLI hoặc API.

Hình trên hiển thị bảng điều khiển tạo hàng đợi SQS với các tùy chọn cấu hình để mã hóa. Như bạn có thể thấy, mã hóa phía máy chủ được bật theo mặc định với tùy chọn loại khóa mã hóa SSE-SQS được chọn.

Tạo hàng đợi SQS với mã hóa SQS-SES bằng CloudFormation

Mã hóa SSE-SQS mặc định cũng được hỗ trợ trong AWS CloudFormation. Để tìm hiểu thêm, hãy xem trang tài liệu này.

Dưới đây là code mẫu CloudFormation để tạo hàng đợi tiêu chuẩn SQS với Mã hóa phía máy chủ (SSE-SQS) thuộc sở hữu của SQS được bật.

AWSTemplateFormatVersion: “2010-09-09″Description: SSE-SQS Cloudformation templateResources:  SQSEncryptionQueue: Type: AWS::SQS::Queue Properties:   MaximumMessageSize: 262144   MessageRetentionPeriod: 86400   QueueName: SSESQSQueue   SqsManagedSseEnabled: true   KmsDataKeyReusePeriodSeconds: 900   VisibilityTimeout: 30

AWSTemplateFormatVersion: “2010-09-09”

Description: SSE-SQS Cloudformation template

Resources:

  SQSEncryptionQueue:

Type: AWS::SQS::Queue

Properties:

   MaximumMessageSize: 262144

   MessageRetentionPeriod: 86400

   QueueName: SSESQSQueue

   SqsManagedSseEnabled: true

   KmsDataKeyReusePeriodSeconds: 900

   VisibilityTimeout: 30

Lưu ý rằng nếu thuộc tính SqsManagedSseEnabled: true không được chỉ định thì SSE-SQS sẽ được bật theo mặc định.

Cấu hình mã hóa SSE-SQS cho hàng đợi bằng Bảng điều khiển quản lý AWS

Để định cấu hình mã hóa SSE-SQS cho hàng đợi hiện có bằng bảng điều khiển SQS:

1. Điều hướng đến bảng điều khiển SQS tại https://console.aws.amazon.com/sqs/.

2. Trong ngăn điều hướng, chọn Queues.

3. Chọn một hàng đợi rồi chọn Edit.

4. Trong hộp thoại Encryption, đối với Server-side encryption, hãy chọn Enabled.

5. Chọn khóa Amazon SQS (SSE-SQS).

6.     Chọn Save.

Cấu hình mã hóa SSE-SQS cho hàng đợi hiện có bằng AWS CLI

Để bật SSE-SQS cho hàng đợi hiện không có mã hóa, hãy sử dụng lệnh AWS CLI sau:

aws sqs set-queue-attributes –queue-url <queueURL> –attributes SqsManagedSseEnabled=true

aws sqs set-queue-attributes –queue-url <queueURL> –attributes SqsManagedSseEnabled=true

Thay thế <queueURL> bằng URL của hàng đợi SQS của bạn.

Để tắt SSE-SQS cho hàng đợi hiện có bằng AWS CLI, hãy chạy:

      aws sqs set-queue-attributes –queue-url <queueURL> –attributes SqsManagedSseEnabled=false

      aws sqs set-queue-attributes –queue-url <queueURL> –attributes SqsManagedSseEnabled=false

Kiểm tra hàng đợi khi bật mã hóa SSE-SQS

Để kiểm tra việc gửi tin nhắn đến hàng đợi SQS khi bật SSE-SQS, hãy chạy:

      aws sqs send-message –queue-url <queueURL> –message-body test-message

      aws sqs send-message –queue-url <queueURL> –message-body test-message

Thay thế <queueURL> bằng URL của hàng đợi SQS của bạn. Bạn sẽ thấy phản hồi sau, có nghĩa là tin nhắn đã được gửi thành công vào hàng đợi:

{ “MD5OfMessageBody”: “beaa0032306f083e847cbf86a09ba9b2”, “MessageId”: “6e53de76-7865-4c45-a640-f058c24a619b”}

{

“MD5OfMessageBody”: “beaa0032306f083e847cbf86a09ba9b2”,

“MessageId”: “6e53de76-7865-4c45-a640-f058c24a619b”

}

SSE-SQS mặc định và tin nhắn được mã hóa

Việc mã hóa message làm cho nội dung của message không được cung cấp cho người dùng ẩn danh hoặc trái phép. Yêu cầu ẩn danh là các yêu cầu được gửi tới hàng đợi mở cho mạng công cộng mà không có bất kỳ xác thực nào. Lưu ý, nếu bạn đang sử dụng các yêu cầu SendMessage và AcceptMessage ẩn danh cho hàng đợi mới được tạo, thì các yêu cầu này giờ đây sẽ bị từ chối khi SSE-SQS được bật theo mặc định.

Việc đưa ra các yêu cầu ẩn danh tới hàng đợi SQS không tuân theo các phương pháp hay nhất về bảo mật SQS. Chúng tôi thực sự khuyên bạn nên cập nhật chính sách của mình để thực hiện các yêu cầu đã ký tới hàng đợi SQS bằng AWS SDK hoặc AWS CLI và tiếp tục sử dụng SSE-SQS được bật theo mặc định.

Xem phản hồi của dịch vụ SQS đối với các tin nhắn ẩn danh khi bật mã hóa SSE-SQS. Đối với hàng đợi hiện có, bạn có thể thay đổi chính sách hàng đợi để cấp cho tất cả người dùng (người dùng ẩn danh) quyền SendMessage cho hàng đợi có tên EncryptionQueue:

{  “Version”: “2012-10-17”,  “Id”: “Queue1_Policy_UUID”,  “Statement”: [ {   “Sid”: “Queue1_SendMessage”,   “Effect”: “Allow”,   “Principal”: “*”,   “Action”: “sqs:SendMessage”,   “Resource”: “<queueARN>” }  ]}

{

  “Version”: “2012-10-17”,

  “Id”: “Queue1_Policy_UUID”,

  “Statement”: [

{

   “Sid”: “Queue1_SendMessage”,

   “Effect”: “Allow”,

   “Principal”: “*”,

   “Action”: “sqs:SendMessage”,

   “Resource”: “<queueARN>”

}

  ]

}

Sau đó, bạn có thể thực hiện một yêu cầu ẩn danh đối với hàng đợi:

      curl <queueURL> -d ‘Action=SendMessage&MessageBody=Hello’

      curl <queueURL> -d ‘Action=SendMessage&MessageBody=Hello’

 Bạn sẽ nhận được lỗi như sau:

<?xml version=”1.0″?><ErrorResponse       xmlns=”http://queue.amazonaws.com/doc/2012-11-05/”>     &nbsp; <Error>                 <Type>Sender</Type>                 <Code>AccessDenied</Code>                 <Message>Access to the resource The specified queue does not exist or you do not have access to it. is denied.</Message>                 <Detail/>       </Error>       <RequestId> RequestID </RequestId></ErrorResponse>

Tuy nhiên, vì bất kỳ lý do gì nếu bạn muốn tiếp tục sử dụng các yêu cầu ẩn danh đối với hàng đợi mới được tạo trong tương lai, bạn phải tạo hoặc cập nhật hàng đợi bị vô hiệu hóa mã hóa SSE-SQS.

SqsManagedSseEnabled =false

 Bạn cũng có thể tắt SSE-SQS bằng bảng điều khiển Amazon SQS.

Mã hóa hàng đợi SQS bằng khóa mã hóa của riêng bạn

Bạn luôn có thể thay đổi mặc định mã hóa hàng đợi SSE-SQS và sử dụng khóa của riêng mình. Để mã hóa hàng đợi SQS bằng khóa mã hóa của riêng bạn bằng  AWS Key Management Service  (SSE-KMS), mã hóa mặc định bằng SSE-SQS có thể được ghi đè lên SSE-KMS trong quá trình tạo hàng đợi hoặc sau đó.

Bạn có thể cập nhật loại khóa mã hóa phía máy chủ của hàng đợi SQS bằng bảng điều khiển Amazon SQS, AWS CLI hoặc API.

Lợi ích của mã hóa do SQS sở hữu (SSE-SQS)

Sau đây là những lợi ích đáng kể khi mã hóa dữ liệu của bạn bằng mã hóa do SQS quản lý (SSE-SQS):

  • SSE-SQS cho phép bạn truyền dữ liệu an toàn hơn và cải thiện trạng thái bảo mật thường được yêu cầu để tuân thủ và các quy định mà không cần thêm chi phí vì bạn không cần tạo và quản lý khóa mã hóa.
  • Mã hóa ở trạng thái lưu trữ bằng SSE-SQS mặc định được cung cấp miễn phí.
  • Việc mã hóa và giải mã dữ liệu của bạn được xử lý một cách minh bạch và tiếp tục mang lại hiệu suất như bạn mong đợi.
  • Dữ liệu được mã hóa bằng 256-bit Advanced Encryption Standard (thuật toán AES-256 GCM), do đó chỉ những vai trò và dịch vụ được ủy quyền mới có thể truy cập dữ liệu.

Ngoài ra, khách hàng có thể kích hoạt CloudWatch Alarms để cảnh báo về các hoạt động như lỗi ủy quyền, thay đổi chính sách AWS Identity and Access Management (IAM) hoặc giả mạo nhật ký CloudTrail để giúp phát hiện và theo dõi các sự cố bảo mật trong ứng dụng của khách hàng (để tìm hiểu thêm, hãy xem Hướng dẫn sử dụng Amazon CloudWatch).

Tổng kết

SQS hiện cung cấp mã hóa phía máy chủ (SSE) bằng cách sử dụng mã hóa do SQS sở hữu (SSE-SQS) theo mặc định. Cải tiến này giúp tạo hàng đợi SQS dễ dàng hơn, đồng thời giảm đáng kể gánh nặng vận hành và độ phức tạp liên quan đến việc bảo vệ dữ liệu.

Mã hóa ở trạng thái lưu trữ bằng SSE-SQS mặc định được cung cấp miễn phí và được hỗ trợ cho cả hàng đợi SQS tiêu chuẩn và FIFO sử dụng điểm cuối HTTPS. Mã hóa SSE-SQS mặc định hiện có sẵn.

Để tìm hiểu thêm về Amazon Simple Queue Service (SQS), hãy xem Bắt đầu với Amazon SQS Hướng dẫn dành cho nhà phát triển dịch vụ SQScủa Amazon.