Cấu hình giao tiếp giữa Database và Intel PCS
Để Database có thể xác thực tính toàn vẹn của Enclave, nó cần liên lạc với Intel Provisioning Certification Server (PCS) để lấy chứng chỉ và xác minh báo cáo Attestation.
Bước này yêu cầu thiết lập biến môi trường để chỉ định URL của PCS và cấu hình chứng chỉ CA của Intel trong thư mục cấu hình của Database SGX.
Cài đặt biến môi trường PCS
Chúng ta cần định nghĩa biến môi trường INTEL_SGXPCS_URL để trỏ đến dịch vụ PCS của Intel. Đối với môi trường phát triển hoặc test, sử dụng URL mặc định. Trong môi trường production, bạn có thể deploy server PCS nội bộ.
echo 'export INTEL_SGXPCS_URL=https://api.sgx.trustedservices.intel.com' >> /etc/environment
Kết quả mong đợi: Biến môi trường được ghi vào file /etc/environment và sẽ tự động được load khi khởi động lại session hoặc service.
Cấu hình chứng chỉ CA cho Database SGX
Database cần file chứng chỉ CA của Intel để xác minh chữ ký từ PCS. File này thường nằm trong SDK, nhưng chúng ta cần copy nó vào thư mục cấu hình của Database để đảm bảo quyền truy cập an toàn.
sudo mkdir -p /etc/mysql-sgx/certs
sudo cp /opt/intel/sgx-sdk/certs/sgx_pcs_ca_cert.pem /etc/mysql-sgx/certs/
sudo chmod 644 /etc/mysql-sgx/certs/sgx_pcs_ca_cert.pem
Kết quả mong đợi: File chứng chỉ được sao chép vào /etc/mysql-sgx/certs/ với quyền đọc cho tất cả người dùng, cho phép service Database đọc được.
Cập nhật cấu hình Database để trỏ đến PCS
Cần chỉnh sửa file cấu hình chính của Database (ví dụ: mysqld.cnf) để chỉ định đường dẫn đến chứng chỉ và bật tính năng Attestation.
cat > /etc/mysql-sgx/sgx_policy.cnf
Kết quả mong đợi: File /etc/mysql-sgx/sgx_policy.cnf được tạo với các thông số cấu hình chính xác. Database sẽ đọc file này khi khởi động.
Verify kết quả cấu hình
Chạy lệnh kiểm tra xem Database có thể đọc được cấu hình và chứng chỉ hay không trước khi khởi động.
grep sgx_pcs_cert_path /etc/mysql-sgx/sgx_policy.cnf && ls -l /etc/mysql-sgx/certs/sgx_pcs_ca_cert.pem
Kết quả mong đợi: Lệnh hiển thị đường dẫn chứng chỉ trong file config và file chứng chỉ tồn tại với quyền 644.
Thực hiện quy trình Attestation tự động khi khởi động
Quy trình Attestation tự động diễn ra ngay khi Database khởi động. Enclave sẽ tạo báo cáo (quote), gửi lên PCS, và PCS trả về chứng chỉ xác nhận Enclave chạy trên phần cứng thật.
Tạo script khởi động và xác thực
Chúng ta cần một script wrapper để gọi lệnh khởi động Database với tham số kích hoạt Attestation, đảm bảo quá trình này diễn ra trong ngữ cảnh Enclave.
cat > /usr/local/bin/start-sgx-db.sh
Kết quả mong đợi: Script start-sgx-db.sh được tạo và có quyền thực thi. Script này sẽ dùng để thay thế service systemd thông thường.
Cấu hình Service Systemd cho quy trình Attestation
Cần tạo file unit file của systemd để chạy script trên, đảm bảo service chạy với quyền root (để truy cập /dev/sgx) nhưng chuyển sang user mysql khi cần thiết.
cat > /etc/systemd/system/mysql-sgx.service
Kết quả mong đợi: File service /etc/systemd/system/mysql-sgx.service được tạo, trỏ đúng đến script khởi động đã tạo ở bước trước.
Khởi động và theo dõi quá trình Attestation
Khởi động service và quan sát log để xác nhận Enclave đã liên lạc thành công với PCS và nhận được chứng chỉ hợp lệ.
sudo systemctl daemon-reload
sudo systemctl start mysql-sgx
journalctl -u mysql-sgx -f --no-pager | grep -i "attest\|quote\|pcs"
Kết quả mong đợi: Log hiển thị các dòng như Requesting quote from PCS..., Quote verified successfully, hoặc Enclave attestation completed. Nếu không thấy, kiểm tra lỗi kết nối mạng.
Verify kết quả khởi động
Kiểm tra trạng thái service và đảm bảo không có lỗi liên quan đến Attestation trong log.
systemctl status mysql-sgx | grep -E "Active:|attest"
Kết quả mong đợi: Trạng thái là Active: running và không có dòng Failed liên quan đến attest.
Xác minh signature của Enclave từ phía client hoặc auditor
Để đảm bảo Enclave đang chạy là phiên bản hợp lệ và không bị giả mạo, auditor hoặc client cần kiểm tra signature (chữ ký) của Enclave. Signature này được tạo bởi Intel và được đính kèm trong Quote.
Trích xuất Quote từ Enclave
Chúng ta cần một công cụ hoặc endpoint để trích xuất Quote (báo cáo Attestation) từ Enclave đang chạy. Database SGX thường cung cấp endpoint hoặc file log chứa quote này.
# Giả sử database lưu quote vào file sau khi khởi động thành công
sudo cat /var/lib/mysql-sgx/enclave_quote.bin > /tmp/current_enclave_quote.bin
Kết quả mong đợi: File current_enclave_quote.bin được tạo trong thư mục /tmp, chứa dữ liệu nhị phân của Quote.
Công cụ xác minh Quote (sgx_qv)
Sử dụng công cụ sgx_qv (Quote Verification) từ Intel SGX DCAT để xác minh tính hợp lệ của Quote. Công cụ này sẽ liên hệ với PCS để kiểm tra chữ ký của Intel.
cat > /tmp/verify_quote.sh
Kết quả mong đợi: Script verify được tạo sẵn sàng để chạy. Nó sử dụng thư viện DCAT để kiểm tra quote.
Thực hiện xác minh từ phía Auditor
Auditor chạy script trên để xác nhận Enclave đang chạy là bản gốc của Database SGX.
/tmp/verify_quote.sh
Kết quả mong đợi: Xuất hiện thông báo VERIFICATION PASSED nếu Enclave hợp lệ. Nếu Enclave bị giả mạo hoặc chạy trên phần cứng giả lập không hỗ trợ DCAP, sẽ báo lỗi.
Verify kết quả xác minh
Chạy lại lệnh verify với tham số chi tiết để xem mã lỗi cụ thể nếu có.
/opt/intel/sgx-dcap/dcap_qvl/bin/sgx_qv -q /tmp/current_enclave_quote.bin -t dcap -v
Kết quả mong đợi: Output hiển thị chi tiết về Quote Version, Product ID và trạng thái Verified.
Cấu hình policy để chỉ cho phép Enclave hợp lệ hoạt động
Policy (chính sách) định nghĩa các điều kiện mà Enclave phải thỏa mãn mới được phép khởi động. Ví dụ: chỉ cho phép chạy trên CPU Intel thế hệ 10 trở lên, hoặc chỉ cho phép Enclave có mã hash cụ thể.
Tạo file Policy JSON
File policy này sẽ được Database đọc và so sánh với các thông tin trong Quote của Enclave. Nếu không khớp, Enclave sẽ bị từ chối khởi động.
cat > /etc/mysql-sgx/policy.json
Kết quả mong đợi: File policy.json được tạo với các quy tắc kiểm tra CPU và hash Enclave. Lưu ý: Giá trị mrenclave cần được cập nhật bằng hash thực tế của Enclave của bạn.
Áp dụng Policy vào cấu hình Database
Cần đảm bảo Database biết đường dẫn đến file policy này. Chúng ta đã cấu hình đường dẫn trong file sgx_policy.cnf ở phần 1, nhưng cần kiểm tra lại quyền truy cập.
sudo chmod 640 /etc/mysql-sgx/policy.json
sudo chown root:mysql /etc/mysql-sgx/policy.json
Kết quả mong đợi: File policy có quyền đọc cho user mysql và root, đảm bảo an toàn nhưng vẫn cho phép service đọc.
Reload Database để áp dụng Policy mới
Để Database áp dụng policy mới, cần reload service. Quá trình này sẽ kích hoạt lại quy trình Attestation và so sánh với policy.
sudo systemctl reload mysql-sgx
Kết quả mong đợi: Service reload thành công. Nếu Enclave không thỏa mãn policy, service sẽ tự động crash hoặc không start được.
Verify kết quả Policy
Kiểm tra log để xem Database có từ chối Enclave do không khớp policy không.
journalctl -u mysql-sgx -n 50 | grep -i "policy\|mismatch\|denied"
Kết quả mong đợi: Không có dòng log nào báo lỗi Policy mismatch. Nếu có, cần điều chỉnh giá trị trong policy.json.
Ghi nhật ký (logging) quá trình Attestation để kiểm toán
Việc ghi log chi tiết quá trình Attestation là bắt buộc cho mục đích kiểm toán (audit) và xử lý sự cố. Log cần ghi lại thời gian, trạng thái, và các tham số quan trọng của Quote.
Cấu hình Log Level trong Database
Cập nhật file cấu hình Database để tăng mức độ logging cho module SGX lên mức DEBUG hoặc VERBOSE.
cat >> /etc/mysql-sgx/sgx_policy.cnf
Kết quả mong đợi: File config được cập nhật với các tham số logging. Database sẽ bắt đầu ghi log chi tiết vào file được chỉ định.
Tạo thư mục và quyền cho file log
Đảm bảo thư mục log tồn tại và user mysql có quyền ghi vào đó.
sudo mkdir -p /var/log/mysql-sgx
sudo touch /var/log/mysql-sgx/attestation.log
sudo chown mysql:mysql /var/log/mysql-sgx/attestation.log
sudo chmod 640 /var/log/mysql-sgx/attestation.log
Kết quả mong đợi: Thư mục log được tạo, file log tồn tại với quyền sở hữu của user mysql.
Chạy lại Database để sinh log
Khởi động lại Database để kích hoạt logging mới và tạo log cho quy trình Attestation hiện tại.
sudo systemctl restart mysql-sgx
Kết quả mong đợi: Database khởi động lại và bắt đầu ghi log vào /var/log/mysql-sgx/attestation.log.
Trích xuất và kiểm tra log Attestation
Sử dụng lệnh grep hoặc jq (nếu log là JSON) để xem các sự kiện Attestation quan trọng.
sudo tail -n 50 /var/log/mysql-sgx/attestation.log | grep -E "quote_request|quote_verify|attestation_success"
Kết quả mong đợi: Log hiển thị các dòng JSON hoặc text mô tả quá trình gửi quote, nhận phản hồi từ PCS và kết quả xác minh.
Cấu hình log rotation cho Audit
Để đảm bảo log không chiếm hết dung lượng disk nhưng vẫn giữ lại dữ liệu kiểm toán, cần cấu hình logrotate.
cat > /etc/logrotate.d/mysql-sgx-attest
Kết quả mong đợi: File logrotate được tạo, đảm bảo log được xoay vòng hàng ngày và giữ lại 90 ngày.
Verify kết quả logging
Kiểm tra xem logrotate có được cấu hình đúng và file log có đang được ghi không.
logrotate -d /etc/logrotate.d/mysql-sgx-attest && ls -lh /var/log/mysql-sgx/attestation.log
Kết quả mong đợi: Lệnh logrotate -d chạy không lỗi (chế độ debug) và file log có kích thước tăng lên sau khi Database hoạt động.
Điều hướng series:
Mục lục: Series: Triển khai Database Confidential Computing với Intel SGX trên Ubuntu 24.04
« Phần 4: Cấu hình Database (MySQL/MariaDB) với tính năng SGX
Phần 6: Kiểm thử hiệu năng và bảo mật cho Database SGX »