Google Cloud IoT là một nền tảng hoàn chỉnh để kết nối, xử lý, lưu trữ và phân tích dữ liệu trên đám mây. Nền tảng này bao gồm các dịch vụ đám mây có thể mở rộng và được quản lý đầy đủ, cung cấp các phương án xây dựng ứng dụng phong phú có thể tích hợp các dịch vụ dữ liệu lớn, học máy từ nền tảng điện toán đám mây Google.
Google Cloud IoT cung cấp một số dịch vụ chính như sau:
- Kết nối điều khiển và quản lý: Google IoT Core.
- Sắp xếp, định tuyến dữ liệu: Cloud PubSub
- Lưu trữ dữ liệu: Cloud Bigtable, Cloud Datastore, Cloud Spanner, Cloud SQL, Cloud Storage, Cloud Firestore, Cloud Firestore.
Từ các quy trình phân loại gói tin và thiết kế luồng dữ liệu đã được trình bày ở các bài viết trước, nhóm nghiên cứu đề xuất thiết kế hệ thống nhà thông minh sử dụng nền tảng Google Cloud IoT với hai chiều như sau:
Hình 1: Kiến trúc dữ liệu từ Thiết bị -> Đám mây -> Ứng dụng
Hình 2: Kiến trúc dữ liệu từ Ứng dụng -> Đám mây -> Thiết bị
Trong sơ đồ trên, tương tự như thiết kế với AWS, các luồng dữ liệu biểu thị bởi đường nét liền được thực hiện trong nghiên cứu này để so sánh đánh giá, còn luồng dữ liệu biểu thị bởi đường nét đứt (dữ liệu phân tích) sẽ không đánh giá nhưng vẫn được đề xuất kiến trúc.
Dịch vụ Cloud IoT Core
Cloud IoT Core là dịch vụ được quản lý toàn diện cho phép kết nối, quản lý và nhập dữ liệu từ hàng triệu thiết bị phân tán trên toàn cầu một cách dễ dàng và an toàn [1]. Dịch vụ sử dụng tính năng cân bằng tải tự động và mở rộng theo chiều ngang để đảm bảo quá trình nhập dữ liệu diễn ra suôn sẻ trong mọi điều kiện, các thành phần của Cloud IoT Core được mô tả trong Hình 3:
Hình 3: Các thành phần của dịch vụ Google Cloud IoT Core (Nguồn: GCP)
Cloud IoT Core hỗ trợ hai giao thức để thiết bị kết nối và giao tiếp với đám mây là MQTT và HTTP. Thiết bị giao tiếp với đám mây qua một cầu nối (bridge) gọi là cầu nối MQTT hoặc cầu nối HTTP [2], đây là thành phần trung tâm của Cloud IoT Core được mô tả ở Hình 3. Thiết bị ESP32 trong hệ thống nhà thông minh sử dụng giao thức MQTT để truyền nhận dữ liệu. Để một thiết bị kết nối thành công, trước tiên thiết bị đó phải được đăng ký trong trình quản lý thiết bị, bao gồm hai đối tượng là registry và device. Registry là một phân vùng chứa các thiết bị, được tạo trong một vùng đám mây cụ thể và thuộc về một dự án đám mây; thiết bị khi được tạo bên trong registry sẽ được xem là một tài nguyên của Cloud IoT Core và có thể theo dõi thông tin cũng như cấu hình các thuộc tính của thiết bị [3].
Bảo mật là mối quan tâm hàng đầu khi triển khai và quản lý các thiết bị IoT trên Google Cloud, Cloud IoT Core cung cấp các tính năng bảo mật sau [4]:
- Mỗi thiết bị khi kết nối đều được xác thực qua tiêu chuẩn JSON Web Tokens (JWTs, RFC 7519), phương pháp này có hai ưu điểm:
- Thứ nhất là giới hạn phạm vi tấn công bảo mật từ bên ngoài vì mỗi khóa bảo mật bị xâm phạm chỉ ảnh hưởng đến một thiết bị duy nhất chứ không ảnh hưởng đến toàn bộ hệ thống
- Thứ hai là JWT chỉ có hiệu lực trong một khoản thời gian nhất định được cấu hình, vì vậy nếu một khóa bị xâm phạm sẽ bị hết hạn sau khoản thời gian đó
- Hỗ trợ các thuật toán RSA hoặc Elliptic Curve để xác thực chữ ký;
- Hỗ trợ xoay vòng các khóa trên mỗi thiết bị bằng cách cho phép đăng ký các khóa đồng thời trên cùng một thiết bị;
- Kết nối TLS 1.2 , sử dụng ủy quyền chứng chỉ gốc (root certificate authorities) (bắt buộc đối với giao thức MQTT);
- Quyền truy cập Cloud IoT Core được kiểm soát bởi dịch vụ kiểm soát quyền truy cập Identity and Access Management (IAM).
Quy trình xác thực trong Cloud IoT Core qua kết nối bằng giao thức MQTT được mô tả trong Hình 4 gồm 5 bước:
- Thiết bị chuẩn bị trước chuỗi JWT, chuỗi JWT được ký với khóa riêng tư;
- Khi kết nối, thiết bị sử dụng chuỗi JWT làm trường mật khẩu trong gói tin CONNECT của giao thức MQTT;
- Cầu nối MQTT xác minh chuỗi JWT dựa trên khóa công khai của thiết bị đã đăng ký với Cloud IoT Core;
- Cầu nối MQTT chấp nhận kết nối nếu xác minh thành công;
- Sau khi chuỗi JWT hế thạn, kết nối sẽ bị đóng bởi Cloud IoT Core.
Cloud IoT Core sử dụng xác thực dựa trên chữ ký số RSA và Elliptic Curve. Thuật toán RSA được sử dụng phổ biến và được hỗ trợ rộng rãi bởi thư viện phía thiết bị với nhiều ngôn ngữ hỗ trợ. Tuy nhiên, các khóa và chữ ký được tạo ra từ thuật toán này có dung lượng tương đối lớn (từ 1 đến 2 KB). Ngoài ra khi thực thi RSA sử dụng một lượng tài nguyên đáng kể, điều này có thể ảnh hưởng đến các thiết bị có tài nguyên hạn chế như các vi điều khiển. Thuật toán Elliptic Curve phù hợp hơn với các thiết bị có tài nguyên hạn chế vì các khóa và chữ ký được tạo ra nhỏ hơn rất nhiều so với thuật toán RSA nhưng thư viện hỗ trợ không nhiều vì vậy đôi lúc sẽ gây khó khăn khi sử dụng.
Thiết bị Wireless-MCU ESP32 trong hệ thống nhà thông minh mà nhóm thiết kế sử dụng thuật toán Elliptic Curve để thực hiện xác thực với máy chủ Google Cloud IoT nhằm giảm thiểu tài nguyên sử dụng và tăng tốc độ xử lý trong quá trình giao tiếp.
Chuỗi bài viết được thực hiện và chia sẻ bởi LCV.Khải và Các nhóm nghiên cứu tại Cộng đồng Kỹ thuật TAPIT
Chúc các bạn thành công!
Tài liệu tham khảo:
[1] GCP (March 2019), “Cloud IoT Core overview – Components”, https://cloud.google.com/iot/docs/concepts/overview.
[2] GCP (June 2020), “Cloud IoT Core Documentation – Protocols”, https://cloud.google.com/iot/docs/concepts/protocols.
[3] GCP (July 2020), “Cloud IoT Core Documentation – Devices, configuration, and state”, https://cloud.google.com/iot/docs/concepts/devices.
[4] GCP (August 2020), “Cloud IoT Core Documentation – Device security”, https://cloud.google.com/iot/docs/concepts/device-security.