Confidential Compute trên AWS EKS với AMD SEV-SNP, Kata Containers và Trustee KBS
Triển Khai Confidential Compute Trên AWS EKS Với AMD SEV-SNP, Kata Containers Và Trustee
Trong môi trường enterprise hiện đại, bảo vệ dữ liệu khi truyền tải (TLS) và lưu trữ (KMS/LUKS) đã trở thành tiêu chuẩn bắt buộc. Tuy nhiên, dữ liệu đang xử lý (data in use)—nội dung chưa mã hóa nằm trong RAM khi CPU tính toán—vẫn có nguy cơ bị khai thác bởi quản trị viên hệ thống có quyền root trên host, hypervisor của nhà cung cấp cloud, hoặc các lỗ hổng mức kernel. Confidential Computing giải quyết thách thức này bằng cách sử dụng TEE (Trusted Execution Environment) dựa trên phần cứng.
Bài viết này sẽ hướng dẫn chi tiết cách kiến trúc một nền tảng Confidential Computing chuẩn enterprise trên Amazon EKS sử dụng chip AMD EPYC thế hệ 3/4 hỗ trợ AMD SEV-SNP (Secure Encrypted Virtualization-Secure Nested Paging), Kata Containers microVM, và framework xác thực từ xa Trustee (CoCo KBS/AS).
1. Tổng Quan Kiến Trúc
Giải pháp hoạt động bằng cách cô lập các Kubernetes Pods bên trong các microVM riêng biệt. Tại đây, CPU memory register và RAM hệ thống được mã hóa tự động bằng khóa phần cứng được sinh trực tiếp bên trong AMD Secure Processor (SP). Không một hypervisor nào (kể cả AWS Nitro) hay user root của máy chủ vật lý có thể truy cập hoặc thay đổi bộ nhớ của guest microVM.
| Thành phần | Vai trò trong Confidential Stack | Ranh giới bảo mật (Security Boundary) |
|---|---|---|
| AMD SEV-SNP | TEE phần cứng cung cấp mã hóa bộ nhớ, chống can thiệp và chống tấn công replay. | Cấp độ Silicon / Phần cứng |
| Kata Containers | Chạy Kubernetes Pod bên trong microVM (QEMU/Cloud-Hypervisor) kết nối với SEV-SNP. | Ranh giới Hypervisor / MicroVM |
| Trustee (CoCo) | Cung cấp Key Broker Service (KBS) & Attestation Service (AS) để xác thực measurement của enclave. | Control Plane Zero-Trust từ xa |
| AWS EKS | Điều phối các worker node chạy trên các EC2 Instance hỗ trợ SEV-SNP (như C7a, M7a). | Framework điều phối Container |
2. Khởi Tạo EKS Worker Nodes Hỗ Trợ SEV-SNP
AWS cung cấp tính năng confidential VM trên các dòng instance AMD hiện đại (như c7a hoặc m7a). Dưới đây là cấu hình OpenTofu/Terraform để tạo node group chạy SEV-SNP.
resource 'aws_launch_template' 'sev_snp_nodes' {
name_prefix = 'eks-sev-snp-'
image_id = 'ami-0123456789abcdef0' # AMI tùy chỉnh đã cài Kata Containers & QEMU SEV-SNP
instance_type = 'c7a.2xlarge'
cpu_options {
core_fraction = 1
threads_per_core = 2
}
private_dns_name_options {
enable_resource_name_dns_a_record = true
}
# Kích hoạt tính năng CPU Confidential Compute
enclave_options {
enabled = true
}
user_data = base64encode(<<-EOF
#!/bin/bash
set -o errexit
/etc/eks/bootstrap.sh my-eks-cluster \
--kubelet-extra-args '--node-labels=confidential-compute=true,container-runtime=kata'
EOF
)
tag_specifications {
resource_type = 'instance'
tags = {
Name = 'eks-confidential-node'
'eks:cpu-architecture' = 'amd-sev-snp'
}
}
}
3. Cấu Hình Runtime Kata Containers Cho SEV-SNP
Để hỗ trợ khởi tạo guest microVM với SEV-SNP, Kata Containers phải truyền các tham số khởi tạo SEV-SNP vào QEMU. Tạo tệp cấu hình configuration-qemu-sev.toml và khai báo RuntimeClass trong Kubernetes.
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
name: kata-coco-sev-snp
handler: kata-qemu-sev
scheduling:
nodeSelector:
confidential-compute: "true"
container-runtime: kata
tolerations:
- key: "confidential-workload"
operator: "Exists"
effect: "NoSchedule"
Cấu hình Kata bên dưới (/opt/kata/share/defaults/kata-containers/configuration-qemu-sev.toml) áp dụng các ràng buộc attestation phần cứng:
[hypervisor.qemu]
path = "/usr/bin/qemu-system-x86_64"
kernel = "/opt/kata/share/kata-containers/vmlinuz-sev.container"
initrd = "/opt/kata/share/kata-containers/kata-containers-initrd-sev.img"
machine_type = "q35"
machine_accelerator = "cpm=on"
[hypervisor.qemu.sev]
enabled = true
sev_snp = true
cbitpos = 51
phys_bits = 48
policy = "0x30000" # Bắt buộc dùng SEV-SNP, tắt debug mode và ngăn cấm migration guest
4. Triển Khai Trustee Key Broker Service (KBS) Và Attestation
Trustee là giải pháp chuẩn của dự án Confidential Containers (CoCo) dùng cho xác thực từ xa (remote attestation). Khi microVM khởi động, nó gửi một Attestation Report đã được mã hóa bằng chữ ký phần cứng của AMD tới Trustee KBS, chứa thông số đo lường (launch measurement) của kernel, initrd và tham số khởi động.
Luồng Xác Thực Attestation
- Khởi tạo: Kata bật microVM; AMD Secure Processor đo lường trạng thái boot ban đầu và tạo báo cáo SNP Attestation Report được ký bằng chìa khóa VCEK (Versioned Chip Endorsement Key) của AMD.
- Yêu cầu khóa: Enclave client trong microVM gửi báo cáo attestation tới Trustee KBS.
- Xác minh: Trustee đối soát chuỗi chứng chỉ VCEK với Root of Trust của AMD và kiểm tra xem thông số measurement có khớp với chính sách an toàn đã đăng ký không.
- Giao khóa mã hóa: Sau khi xác thực thành công, Trustee cấp khóa giải mã container image hoặc secret qua kênh mã hóa TLS gắn liền với TEE.
apiVersion: apps/v1
kind: Deployment
metadata:
name: trustee-kbs
namespace: confidential-system
spec:
replicas: 2
selector:
matchLabels:
app: trustee-kbs
template:
metadata:
labels:
app: trustee-kbs
spec:
containers:
- name: kbs
image: ghcr.io/confidential-containers/starlight/kbs:v0.8.0
ports:
- containerPort: 8080
name: kbs-port
volumeMounts:
- name: kbs-config
mountPath: /etc/kbs-config.toml
subPath: kbs-config.toml
- name: kbs-keys
mountPath: /opt/kbs/repository
volumes:
- name: kbs-config
configMap:
name: trustee-kbs-config
- name: kbs-keys
secret:
secretName: trustee-attestation-keys
5. Khởi Tạo Confidential Workload Cho Ứng Dụng Chăn Ngăn Tài Chính
Dưới đây là manifest triển khai ứng dụng xử lý thanh toán ngân hàng chạy bên trong phần cứng AMD SEV-SNP enclave. Container image của ứng dụng chỉ được tải về và giải mã trực tiếp trong RAM của microVM đã mã hóa.
apiVersion: apps/v1
kind: Deployment
metadata:
name: confidential-payment-processor
namespace: secure-banking
labels:
tier: payment-gateway
spec:
replicas: 3
selector:
matchLabels:
app: payment-processor
template:
metadata:
labels:
app: payment-processor
annotations:
io.katacontainers.config.hypervisor.machine_type: "q35"
io.katacontainers.config.hypervisor.sev_policy: "0x30000"
spec:
runtimeClassName: kata-coco-sev-snp
tolerations:
- key: "confidential-workload"
operator: "Exists"
effect: "NoSchedule"
containers:
- name: payment-app
image: private-registry.enterprise.internal/secure/payment-processor:v2.1.0-encrypted
imagePullPolicy: Always
resources:
limits:
cpu: "2"
memory: "4Gi"
requests:
cpu: "1"
memory: "2Gi"
env:
- name: KBS_URI
value: "https://trustee-kbs.confidential-system.svc.cluster.local:8080"
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
runAsNonRoot: true
runAsUser: 10001
6. Kiểm Tra Trạng Thái Hardware Attestation Qua CLI
Để đảm bảo Pod đang chạy thực sự bên trong enclave AMD SEV-SNP hợp lệ, bạn có thể kiểm tra trực tiếp driver trong microVM hoặc log của host kernel:
# Kiểm tra driver SEV-SNP trên máy chủ Host
dmesg | grep -i sev
# Kiểm tra driver SEV-SNP bên trong Kata microVM
kubectl exec -it deployment/confidential-payment-processor -n secure-banking -- \
dmesg | grep -i "sev-snp"
# Kết quả mong đợi trong microVM:
# [ 0.000000] AMD Memory Encryption Features active: SEV SEV-ES SEV-SNP
# [ 0.214052] Memory Encryption Address Mask: 0x7f0000000000
# [ 1.042119] sev-guest /dev/sev-guest: Registered SEV-SNP guest driver
7. Tối Ưu Vận Hành Và Best Practices Bảo Mật
- Quản lý Launch Measurement: Cập nhật chính sách Trustee KBS (OPA/Rego) mỗi khi có bản cập nhật kernel Kata hoặc thay đổi binary của ứng dụng. Bất kỳ sai lệch nào về measurement đều cảnh báo nguy cơ can thiệp trái phép trên host.
- Cấu hình No-Debug: Đảm bảo bit 19 trong SEV policy luôn bằng 0 (
0x30000). Nếu bật chế độ debug, hypervisor trên host có thể đọc dữ liệu trong RAM, làm mất tác dụng của Confidential Compute. - Caching Chứng Chỉ VCEK: Thực hiện cache intermediate certificate của AMD VCEK tại cluster để tránh phụ thuộc vào kết nối Internet tới server AMD khi EKS thực hiện auto-scale workload.
