paint-brush
Cách di chuyển dữ liệu được mã hóa đầu cuối qua Kafkatừ tác giả@ockam
9,416 lượt đọc
9,416 lượt đọc

Cách di chuyển dữ liệu được mã hóa đầu cuối qua Kafka

từ tác giả Ockam8m2023/04/19
Read on Terminal Reader

dài quá đọc không nổi

Tiện ích Confluent dành cho Ockam Orchestrator cho phép các luồng tin nhắn được mã hóa đầu cuối và chống giả mạo thông qua Confluent Cloud. Giải pháp drop-in cho phép các công ty vượt qua các yêu cầu tuân thủ và bảo mật thông thường mà không cần đến công việc phát triển hoặc kiến trúc lại tốn kém.
featured image - Cách di chuyển dữ liệu được mã hóa đầu cuối qua Kafka
Ockam HackerNoon profile picture

Tiện ích bổ sung Confluent dành cho Ockam Orchestrator cho phép các luồng tin nhắn được mã hóa đầu cuối và chống giả mạo thông qua Confluent Cloud mà không cần thay đổi mã. Giải pháp drop-in cho phép các công ty vượt qua các yêu cầu tuân thủ và bảo mật thông thường mà không cần đến công việc phát triển hoặc kiến ​​trúc lại tốn kém.


Việc triển khai Kafka thường kết hợp mã thông báo xác thực và Bảo mật tầng vận chuyển (TLS) để bảo vệ dữ liệu di chuyển vào và ra khỏi các chủ đề Kafka. Mặc dù điều này bảo mật dữ liệu khi truyền qua Internet, nhưng nó không cung cấp giải pháp hoàn chỉnh để bảo mật dữ liệu khi dữ liệu truyền qua Kafka. Nhà môi giới Kafka sẽ có thể tạm thời xem dữ liệu văn bản gốc.


Mã hóa giao tiếp cả vào và ra khỏi trình môi giới Kafka của bạn kết hợp với mã hóa dữ liệu ở trạng thái nghỉ, bên trong Kafka, sẽ không đủ bảo vệ khỏi vi phạm dữ liệu nếu trình môi giới Kafka hoặc cơ sở hạ tầng mà nó đang chạy trên đó bị xâm phạm, vì dữ liệu văn bản gốc và các khóa để giải mã dữ liệu có sẵn trong bộ nhớ. Ockam giải quyết những vấn đề này, đồng thời cung cấp thêm lợi ích giảm thiểu rủi ro và đảm bảo tính toàn vẹn của dữ liệu, thông qua tiện ích bổ sung Confluent dành cho Ockam Orchestrator.

Tin tưởng vào dữ liệu đang chuyển động của bạn


Nhóm của bạn đã quyết định rằng việc tích hợp một nền tảng xử lý luồng vào hệ thống của bạn là cách tốt nhất để đáp ứng cả nhu cầu về quy mô và sự linh hoạt của doanh nghiệp của bạn và Apache Kafka là lựa chọn rõ ràng để sử dụng nền tảng này. Bạn cũng đã quyết định tận dụng lợi thế của việc sử dụng nền tảng được quản lý có kinh nghiệm trong Confluent Cloud để nhóm của bạn có thể tập trung vào việc gia tăng giá trị thay vì chạy cơ sở hạ tầng. Quá trình phát triển đã hoàn tất, nhóm có một giải pháp hoạt động trong đó nhà sản xuất có thể gửi dữ liệu tới Confluent Cloud và người tiêu dùng có thể nhận dữ liệu đó ở phía bên kia. Giao tiếp giữa nhà sản xuất, người tiêu dùng và Confluent Cloud của bạn được mã hóa và bảo mật bằng Bảo mật tầng vận chuyển (TLS), vì vậy bạn sắp tiến hành chuyển mọi thứ sang sử dụng sản xuất.


Một đánh giá bảo mật và tuân thủ đã phát hiện ra một vấn đề. Mặc dù bạn tin tưởng Confluent Cloud, nhưng việc tập trung nhiều hơn vào việc giảm rủi ro chuỗi cung ứng có nghĩa là việc dữ liệu di chuyển qua hệ thống của họ không được mã hóa không còn đáp ứng các yêu cầu bảo mật của bạn nữa. Làm cách nào để bạn giảm thiểu rủi ro cho doanh nghiệp của mình nếu một số nhà cung cấp khác trong chuỗi cung ứng của bạn vi phạm an ninh? Bạn cần có khả năng đảm bảo rằng:


  1. Không có khả năng bên thứ ba đọc dữ liệu trong khi truyền
  2. Bên thứ ba không thể sửa đổi dữ liệu khi đang truyền
  3. Chỉ các bên được xác thực và được ủy quyền mới có thể tạo dữ liệu


Nếu không có giải pháp cho cả hai vấn đề này, sẽ có nguy cơ vi phạm an ninh trong chuỗi cung ứng của chính bạn không chỉ có thể làm lộ dữ liệu nhạy cảm của bạn mà còn gây ra sự leo thang bất ngờ ở hạ lưu của chính chúng.

Tích hợp mà không thay đổi mã

Để tôi đưa bạn qua một ví dụ hoạt động hoàn chỉnh về cách, chỉ trong vài phút, bạn có thể định cấu hình và tích hợp toàn bộ giải pháp đầu cuối để đảm bảo rằng dữ liệu của bạn luôn được mã hóa và chống giả mạo trong khi di chuyển thông qua Kafka và Confluent .


Lưu ý: Các ví dụ mã bên dưới có thể thay đổi khi chúng tôi tiếp tục cải thiện trải nghiệm của nhà phát triển. Vui lòng kiểm tra https://docs.ockam.io/ để biết tài liệu cập nhật nhất.

Thiết lập ban đầu của Ockam

Nếu trước đây bạn đã thiết lập Ockam, bạn có thể bỏ qua phần này và chuyển thẳng đến hai ví dụ bên dưới.


 brew install build-trust/ockam/ockam

(nếu bạn không sử dụng brew để quản lý gói, chúng tôi có hướng dẫn cài đặt cho các hệ thống khác trong tài liệu của chúng tôi)


Sau khi cài đặt, bạn cần đăng ký danh tính cục bộ của mình với Ockam Orchestrator, hãy chạy lệnh bên dưới và làm theo hướng dẫn được cung cấp:


 ockam enroll

Định cấu hình tiện ích Confluent

Ở đây, chúng tôi giả định rằng bạn đã có một cụm hoạt động trên Confluent Cloud (và Công cụ dòng lệnh Kafka đi kèm với bản phân phối Kafka mới nhất ), vì vậy, bước đầu tiên là định cấu hình dự án Ockam của bạn để sử dụng tiện ích bổ sung Confluent bằng cách trỏ nó tới địa chỉ máy chủ bootstrap của bạn:


 ockam project addon configure confluent \ --bootstrap-server YOUR_CONFLUENT_CLOUD_BOOTSTRAP_SERVER_ADDRESS


Sau đó, chúng tôi sẽ cần lưu cấu hình dự án Ockam của mình để sau này chúng tôi có thể sử dụng nó để đăng ký nhà sản xuất và người tiêu dùng của mình, vì vậy hãy lưu đầu ra vào tên tệp project.json :


 ockam project information default --output json > project.json


Với tư cách là quản trị viên của dự án Ockam, bạn có thể kiểm soát danh tính nào khác được phép đăng ký vào dự án của mình bằng cách phát hành mã thông báo đăng ký sử dụng một lần duy nhất. Chúng tôi sẽ bắt đầu bằng cách tạo một cái cho người tiêu dùng của chúng tôi:​


 ockam project enroll --project-path project.json --attribute role=member > consumer.token


... và sau đó là một cho nhà sản xuất đầu tiên:


 ockam project enroll --project-path project.json --attribute role=member > producer1.token


Tệp cấu hình cuối cùng mà chúng tôi cần tạo là kafka.config , đây sẽ là nơi bạn lưu trữ tên người dùng và mật khẩu mà bạn sử dụng để truy cập cụm của mình trên Confluent Cloud:


 cat > kafka.config <<EOF request.timeout.ms=30000 security.protocol=SASL_PLAINTEXT sasl.mechanism=PLAIN sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \ username="YOUR_CONFLUENT_CLOUD_USER_NAME" \ password="YOUR_CONFLUENT_CLOUD_PASSWORD"; EOF

Định cấu hình người tiêu dùng để nhận tin nhắn được mã hóa

Trên nút khách hàng của bạn, bạn sẽ bắt đầu bằng cách tạo một danh tính mới (bạn sẽ cần cài đặt Lệnh Ockam, vì vậy hãy lặp lại hướng dẫn cài đặt nếu bạn đang thực hiện việc này trên một máy chủ riêng):


 ockam identity create consumer


Sao chép các tệp project.jsonconsumer.token từ phần trước, sau đó sử dụng chúng để xác thực và đăng ký danh tính này vào dự án Ockam của bạn:


 ockam project authenticate \ --project-path project.json \ --identity consumer \ --token $(cat consumer.token)


Nút Ockam là một cách để kết nối an toàn kết nối các dịch vụ khác nhau với nhau, vì vậy chúng tôi sẽ tạo một nút ở đây mà chúng tôi sẽ sử dụng để liên lạc qua cụm Đám mây kết hợp bằng cách sử dụng danh tính mà chúng tôi vừa tạo:


 ockam node create consumer \ --project project.json --identity consumer


Sau khi hoàn thành, giờ đây chúng ta có thể hiển thị máy chủ bootstrap Kafka của mình. Điều này giống như máy chủ bootstrap Kafka từ xa và các nhà môi giới hầu như liền kề nhau trên localhost:4000 :


 ockam service start kafka-consumer \ --node consumer \ --project-route /project/default \ --bootstrap-server-ip 127.0.0.1 \ --bootstrap-server-port 4000 \ --brokers-port-range 4001-4100


Sao chép tệp kafka.config và sử dụng nó để tạo một chủ đề mới mà chúng tôi sẽ sử dụng để gửi tin nhắn giữa nhà sản xuất và người tiêu dùng trong bản trình diễn này (trong trường hợp này, chúng tôi đã gọi chủ đề này demo-topic )


 kafka-topics.sh \ --bootstrap-server localhost:4000 \ --command-config kafka.config \ --create \ --topic demo-topic \ --partitions 3


Bước cuối cùng là bắt đầu tập lệnh người tiêu dùng của chúng tôi, trỏ nó tới localhost:4000 làm máy chủ bootstrap của chúng tôi:


 kafka-console-consumer.sh \ --topic demo-topic \ --bootstrap-server localhost:4000 \ --consumer.config kafka.config


Mã người tiêu dùng sẽ đẩy tất cả giao tiếp vào quy trình nút Ockam đang chạy trên máy chủ cục bộ. Quy trình Ockam cục bộ đó sẽ tự động quản lý việc tạo khóa mật mã, thiết lập kênh an toàn để liên lạc với bất kỳ nút sản xuất nào, sau đó nhận, giải mã và chuyển tiếp bất kỳ tin nhắn nào nhận được từ nhà môi giới chạy trên cụm Đám mây hợp lưu của chúng tôi.

Gửi tin nhắn được mã hóa từ nhiều nhà sản xuất

Để có thông điệp cho người tiêu dùng của chúng tôi xử lý, chúng tôi cần phải có thứ gì đó tạo ra chúng. Bây giờ chúng ta sẽ trải qua một quá trình tương tự nhưng thay vào đó tạo ra các bộ phận cần thiết cho một nhà sản xuất. Chúng tôi bắt đầu lại bằng cách tạo danh tính trên máy chủ của nhà sản xuất (một lần nữa, cài đặt Lệnh Ockam trên máy chủ đó nếu cần):


 ockam identity create producer1


Sao chép các tệp project.jsonproducer1.token từ phần trước và sử dụng tệp đó để xác thực và đăng ký vào dự án Ockam của chúng tôi:


 ockam project authenticate \ --project-path project.json \ --identity producer1 \ --token $(cat producer1.token)


Tạo một nút và liên kết nó với cả dự án và danh tính mà chúng tôi đã tạo:


 ockam node create producer1 \ --project project.json \ --identity producer1


Và hiển thị máy chủ bootstrap Kafka của chúng tôi trên cổng 5000 để chúng tôi có thể bắt đầu gửi tin nhắn qua Confluent Cloud:


 ockam service start kafka-producer \ --node producer1 \ --project-route /project/default \ --bootstrap-server-ip 127.0.0.1 \ --bootstrap-server-port 5000 \ --brokers-port-range 5001-5100


Đảm bảo sao chép tệp kafka.config và khởi động trình sản xuất của bạn:


 kafka-console-producer.sh \ --topic demo-topic \ --bootstrap-server localhost:5000 \ --producer.config kafka.config


Mã nhà sản xuất hiện tại của bạn hiện sẽ chạy, giao tiếp với nhà môi giới thông qua cổng bảo mật mà chúng tôi đã tạo đã hiển thị máy chủ bootstrap Kafka và nhà môi giới Kafka trên các cổng cục bộ, đồng thời gửi tin nhắn đến người tiêu dùng đã được thiết lập ở bước trước. Tuy nhiên, tất cả các tải trọng tin nhắn sẽ được mã hóa minh bạch khi chúng đi vào nút trên nhà sản xuất và không được giải mã cho đến khi chúng thoát khỏi nút của người tiêu dùng. Tại bất kỳ thời điểm nào trong quá trình chuyển tiếp, nhà môi giới có thể nhìn thấy tải trọng tin nhắn văn bản gốc do nhà sản xuất gửi ban đầu.


Để làm rõ thêm ví dụ này, bạn có thể lặp lại bước này cho N số nhà sản xuất bằng cách tạo mã thông báo đăng ký mới cho mỗi người, sau đó lặp lại các bước trong phần này.


Nếu bạn xem các tin nhắn được mã hóa bên trong Confluent Cloud, chúng sẽ hiển thị dưới dạng các ký tự không thể nhận dạng được như trong ảnh chụp màn hình sau:

Tin nhắn được mã hóa từ đầu đến cuối bing được viết cho chủ đề demo trong Kafka trong Confluent Cloud

Luồng tin nhắn được mã hóa đầu cuối

Một ví dụ chỉ mất vài phút để triển khai có nghĩa là có thể dễ dàng bỏ sót một số cải tiến quan trọng đối với tính bảo mật và tính toàn vẹn đến từ phương pháp này:


  • Khóa duy nhất cho mỗi danh tính : mỗi người tiêu dùng và nhà sản xuất tạo khóa mật mã của riêng mình và được cấp thông tin xác thực duy nhất của riêng mình. Sau đó, họ sử dụng những thứ này để thiết lập một kênh an toàn đáng tin cậy lẫn nhau. Bằng cách loại bỏ sự phụ thuộc vào dịch vụ của bên thứ ba để lưu trữ hoặc phân phối khóa, bạn có thể giảm diện tích bề mặt dễ bị tổn thương và loại bỏ các điểm lỗi đơn lẻ.


  • Truyền dữ liệu chống giả mạo : bằng cách đẩy quyền kiểm soát các khóa đến các cạnh của hệ thống, nơi diễn ra quá trình mã hóa và giải mã được xác thực, không bên nào khác trong chuỗi cung ứng có thể sửa đổi dữ liệu trong quá trình truyền. Bạn có thể yên tâm rằng dữ liệu bạn nhận được từ người tiêu dùng chính xác là dữ liệu được gửi bởi nhà sản xuất của bạn. Bạn cũng có thể yên tâm rằng chỉ những nhà sản xuất được ủy quyền mới có thể viết cho chủ đề để đảm bảo rằng dữ liệu trong chủ đề của bạn có độ tin cậy cao. Nếu bạn có các yêu cầu nghiêm ngặt hơn nữa, bạn có thể kiểm soát cơ quan cấp chứng chỉ của mình và thực thi các chính sách cấp quyền chi tiết.


  • Cửa sổ hiển thị giảm : Các kênh bảo mật Ockam thường xuyên luân phiên các khóa xác thực và bí mật phiên. Cách tiếp cận này có nghĩa là nếu một trong những bí mật phiên đó bị lộ thì tổng thời lượng hiển thị dữ liệu của bạn bị giới hạn trong khoảng thời gian nhỏ mà bí mật đó được sử dụng. Luân phiên khóa xác thực có nghĩa là ngay cả khi khóa nhận dạng của nhà sản xuất bị xâm phạm - không có dữ liệu lịch sử nào bị xâm phạm. Bạn có thể xóa có chọn lọc nhà sản xuất bị xâm phạm và dữ liệu của nhà sản xuất đó. Với các phương pháp phân phối khóa được chia sẻ tập trung, có nguy cơ là tất cả dữ liệu hiện tại và lịch sử không thể tin cậy được sau khi vi phạm vì dữ liệu đó có thể đã bị giả mạo hoặc bị đánh cắp. Phương pháp của Ockam giúp loại bỏ nguy cơ dữ liệu lịch sử bị xâm phạm và giảm thiểu rủi ro đối với dữ liệu trong tương lai bằng cách sử dụng các phím xoay tự động.


Ngày nay, tất cả những lợi ích này đều có thể thực hiện được mà không cần thay đổi mã và thay đổi cấu hình tối thiểu đối với các triển khai hiện có.

Bước tiếp theo

  • Nếu bạn chưa làm theo ví dụ trong hướng dẫn này, bạn có thể bắt đầu sử dụng Ockam miễn phí bằng cách làm theo hướng dẫn trong tài liệu của chúng tôi.
  • Nếu bạn muốn nói cụ thể về điều này hoặc các trường hợp sử dụng tiềm năng khác cho Ockam, nhóm sẽ rất sẵn lòng tṛ chuyện với bạn .
  • Ngoài ra, bạn có thể tham gia cùng chúng tôi và cộng đồng các nhà phát triển ngày càng phát triển, những người muốn xây dựng lòng tin bằng cách tạo ra các ứng dụng an toàn theo thiết kế, trong Xây dựng máy chủ Trust Discord hoặc trên Github .


Cũng được xuất bản ở đây .