Cơ chế ký và xác thực Enclave bằng chứng chỉ Intel
Bước đầu tiên để đảm bảo tính toàn vẹn của Enclave là thiết lập quy trình ký (Signing) và xác thực (Attestation) sử dụng chứng chỉ từ Intel.
Mục đích: Tạo khóa riêng tư (Signing Key) để ký mã nguồn Enclave, sau đó sinh ra báo cáo (Quote) để xác minh danh tính phần cứng và phần mềm.
Kết quả mong đợi: File `.sig` được tạo ra, và quy trình Attestation trả về trạng thái "Verified" khi kiểm tra.
Đầu tiên, bạn cần tạo cặp khóa riêng tư và công khai để ký cho Enclave của PostgreSQL. Sử dụng công cụ `sgx_sign` từ SDK Intel.
cd /opt/intel/sgxsdk/bin
./sgx_sign sign -key /root/sgx_keys/sgx_signing_key.pem -out /var/lib/postgresql/sgx/psql_enclave.sig /var/lib/postgresql/sgx/psql_enclave.signed.so
File `.sig` chứa chữ ký số xác nhận mã nguồn chưa bị giả mạo. Nếu file này không khớp với mã nguồn thực tế, Enclave sẽ từ chối khởi động.
Tiếp theo, thiết lập cơ chế Attestation bằng chứng chỉ PCK (Provisioning Certification Key) của Intel. Bạn cần cấu hình script để lấy Quote từ Enclave và gửi về Intel Attestation Service.
cat > /opt/sgx-tools/attest_check.sh
Script này lấy dữ liệu quote từ hệ thống và xác minh nó với dịch vụ đám mây của Intel. Kết quả trả về "Verified" chứng tỏ phần cứng là thật và phần mềm bên trong Enclave chưa bị thay đổi.
Để tích hợp vào PostgreSQL, cấu hình file `postgresql.conf` để chỉ định đường dẫn file ký và yêu cầu Attestation khi khởi động.
cat >> /var/lib/postgresql/15/data/postgresql.conf
Tham số `sgx_require_attestation = on` buộc database chỉ khởi động khi chứng chỉ Enclave được xác thực thành công.
Verify kết quả: Chạy lệnh khởi động lại PostgreSQL và kiểm tra log.
systemctl restart postgresql@15-main
grep -i "attestation\|enclave" /var/log/postgresql/postgresql-15-main.log
Bạn sẽ thấy dòng log xác nhận "Enclave loaded successfully" và "Attestation verified". Nếu không, quá trình khởi động sẽ bị dừng.
Cấu hình Trusted Execution Environment (TEE) trên nền tảng đám mây
Triển khai SGX trên đám mây yêu cầu chọn đúng loại instance có hỗ trợ phần cứng Intel SGX và cấu hình TEE đúng cách.
Mục đích: Khởi tạo instance trên AWS hoặc Azure có khả năng chạy Enclave, đồng thời cấu hình môi trường để phần mềm nhận diện phần cứng.
Kết quả mong đợi: Instance chạy lên, driver SGX được load, và `/dev/sgx_enclave` tồn tại.
Trên AWS, bạn phải chọn instance series `c5d` hoặc `c6d` với tùy chọn "Intel SGX". Lưu ý: SGX trên AWS hiện tại chủ yếu hỗ trợ SGX1 hoặc SGX2 tùy theo region và instance type.
aws ec2 run-instances \
--image-id ami-0abcdef1234567890 \
--instance-type c6d.2xlarge \
--count 1 \
--key-name my-sgx-key \
--security-group-ids sg-12345678 \
--placement "AvailabilityZone=us-east-1a" \
--instance-market-option "MarketType=ON_DEMAND"
Lệnh này khởi tạo instance EC2 có CPU Intel Xeon hỗ trợ SGX. Bạn cần thay thế `ami-0abcdef...` bằng ID của AMI Linux đã cài đặt driver SGX (ví dụ: Amazon Linux 2 với SGX enabled).
Sau khi instance chạy, bạn cần kích hoạt driver SGX nếu chưa được load mặc định. Trên AWS, driver thường đã có sẵn nhưng cần xác nhận.
lsmod | grep sgx
dmesg | grep -i sgx
Kết quả mong đợi: Xuất hiện module `sgx_enclave`, `sgx_driver` trong danh sách module đang chạy. Nếu không thấy, cần chạy `modprobe sgx_enclave`.
Trên Azure, bạn chọn instance series `NCas` hoặc `NCads` (Dedicated SGX instances). Cấu hình TEE qua Azure Portal hoặc CLI.
az vm create \
--resource-group myResourceGroup \
--name sgx-db-vm \
--image UbuntuLTS \
--size Standard_NC6ads_v3 \
--admin-username azureuser \
--generate-ssh-keys
Instance `Standard_NC6ads_v3` trên Azure được thiết kế riêng cho các tác vụ bảo mật cao với SGX. Sau khi tạo, bạn cần cập nhật kernel và cài đặt driver SGX mới nhất từ repo của Intel.
Cấu hình file `/etc/sgx_default_enclave.conf` để đảm bảo quyền truy cập đúng cho TEE.
cat > /etc/sgx_default_enclave.conf
File cấu hình này đảm bảo chỉ user `postgres` mới có quyền truy cập vào file enclave, ngăn chặn rò rỉ dữ liệu từ bên ngoài.
Verify kết quả: Kiểm tra xem TEE đã sẵn sàng chưa bằng cách chạy công cụ kiểm tra phần cứng.
sgx_get_quote --quote /tmp/test_quote.bin --pid $$
ls -l /dev/sgx_enclave
Nếu lệnh chạy thành công và tạo ra file quote, đồng thời thiết bị `/dev/sgx_enclave` tồn tại, thì TEE đã được cấu hình đúng trên đám mây.
Triển khai container Docker với SGX (kata-containers hoặc gVisor)
Chạy database SGX trong container đòi hỏi runtime hỗ trợ phần cứng bảo mật. Docker mặc định không hỗ trợ SGX, bạn cần dùng Kata Containers hoặc gVisor.
Mục đích: Đóng gói PostgreSQL SGX vào container cách ly, đảm bảo Enclave chỉ chạy trong môi trường container được bảo vệ.
Kết quả mong đợi: Container chạy thành công, truy vấn database vẫn hoạt động nhưng dữ liệu được mã hóa trong Enclave.
Đầu tiên, cài đặt và cấu hình Kata Containers runtime trên host. Đây là runtime container dựa trên microVM, hỗ trợ tốt cho SGX.
curl -s https://raw.githubusercontent.com/kata-containers/kata-containers/main/tools/install.sh | sudo bash
sudo systemctl enable --now kata-containers
Lệnh này cài đặt runtime Kata. Bạn cần đảm bảo host đã có driver SGX và kernel hỗ trợ KVM (Kata cần virtualization để tạo microVM).
Cấu hình file `configuration.conf` của Kata để bật hỗ trợ SGX và mount thiết bị `/dev/sgx` vào container.
cat > /usr/share/containers/containers.conf
Việc mount thiết bị `/dev/sgx_enclave` là bắt buộc để container có thể tương tác với phần cứng SGX. Nếu thiếu dòng này, Enclave sẽ không khởi động được.
Tiếp theo, tạo file Dockerfile cho PostgreSQL SGX. Đảm bảo copy file enclave và thư viện cần thiết vào image.
cat > /var/lib/postgresql/sgx/Dockerfile
Dockerfile này đóng gói mọi thứ cần thiết để chạy PostgreSQL trong môi trường SGX. Nó sử dụng thư viện `libsgx-dcap-ql2` để thực hiện Attestation.
Xây dựng image Docker và chạy container với runtime Kata.
docker build -t postgres-sgx:1.0 /var/lib/postgresql/sgx/
docker run -d --rm --runtime=kata \
--device /dev/sgx_enclave \
--device /dev/sgx_provision \
-v /var/lib/postgresql/data:/var/lib/postgresql/15/data \
-e SGX_ENCLAVE_PATH=/var/lib/postgresql/sgx/psql_enclave.signed.so \
--name psql-sgx-container \
postgres-sgx:1.0
Tham số `--runtime=kata` bắt buộc Docker sử dụng microVM thay vì namespace thông thường, cung cấp lớp bảo vệ vật lý cho Enclave. Tham số `--device` mount thiết bị SGX vào container.
Verify kết quả: Kiểm tra trạng thái container và khả năng kết nối.
docker ps | grep psql-sgx-container
docker logs psql-sgx-container | grep -i "enclave\|attestation"
psql -h localhost -U postgres -d testdb -c "SELECT version();"
Nếu container chạy và bạn có thể thực thi lệnh SQL, đồng thời log hiển thị "Attestation verified", thì việc triển khai thành công. Dữ liệu trong database giờ đã được bảo vệ bởi SGX ngay cả khi container bị xâm nhập.
Điều hướng series:
Mục lục: Series: Triển khai Database bảo mật với Confidential Computing và Linux SGX
« Phần 5: Triển khai ứng dụng thực tế: Kết nối và truy vấn database bảo mật
Phần 7: Troubleshooting, tối ưu hiệu năng và bảo mật nâng cao »