Remote attestation PeerPod memastikan bahwa kontainer rahasia berjalan di lingkungan komputasi rahasia yang autentik dan tidak dimodifikasi, seperti Intel TDX. Dengan secara otomatis memverifikasi integritas node sebelum penerapan dan memungkinkan aplikasi mengambil attestasi lingkungan sesuai permintaan selama runtime, mekanisme ini memberikan jaminan keamanan ujung ke ujung untuk workload sensitif.
Cara kerja
Remote attestation komputasi rahasia menciptakan lingkungan runtime yang dapat diverifikasi dan dilindungi perangkat keras untuk kontainer PeerPod, melindunginya dari serangan eksternal. Mekanisme ini menggunakan layanan remote attestation (disebut sebagai Trustee) sebagai jangkar kepercayaan untuk memeriksa integritas lingkungan pada dua tahap kritis dalam siklus hidup Pod: saat penerapan dan selama runtime.
Kasus penggunaan 1: Verifikasi lingkungan sebelum peluncuran
Proses ini dirancang untuk administrator kluster guna memastikan bahwa Pod hanya diluncurkan di lingkungan rahasia yang autentik dan tepercaya. Seluruh alur kerja diotomatiskan dan tidak memerlukan intervensi manual.
Mulai penerapan: Seorang administrator membuat workload dengan mengirimkan manifes Pod ke server API kluster. kubelet pada node kemudian meminta pembuatan sandbox Pod dari
containerdmelalui Container Runtime Interface (CRI).containerdmemeriksaruntimeClassNamePod dan memanggil runtime Kata Remote yang mendasarinya, yaitukata-runtime.Buat VM rahasia: Kata Remote merespons permintaan tersebut dengan memanggil Alibaba Cloud OpenAPI untuk meluncurkan ECS TDX confidential VM yang ringan dan terisolasi perangkat keras, yang berfungsi sebagai Pod Kubernetes.
Remote attestation wajib: Sebelum citra ditarik, Attestation Agent di dalam VM secara otomatis menghasilkan bukti lingkungan runtime, termasuk tanda tangan perangkat keras, lalu mengirimkannya ke layanan Trustee untuk verifikasi.
Validasi dan eksekusi workload: Hanya setelah Trustee mengonfirmasi bahwa bukti tersebut valid, logika kontrol guest akan melanjutkan operasi berikutnya, termasuk menarik gambar aplikasi dan menjalankan kontainer.
Kasus penggunaan 2: Remote attestation saat runtime
Kemampuan ini ditujukan untuk aplikasi kontainer yang sedang berjalan, memungkinkannya membuktikan secara proaktif keamanan lingkungannya sendiri kepada layanan eksternal, sehingga membangun rantai kepercayaan lintas sistem.
Aplikasi mengambil bukti: Aplikasi di dalam kontainer meminta laporan remote attestation real-time dengan memanggil operasi API lokal di
http://127.0.0.1:8006/aa/evidence.Verifikasi oleh layanan eksternal: Aplikasi mengirim bukti ini ke layanan eksternal (konsumen). Konsumen layanan tersebut kemudian meneruskan bukti ke layanan Trustee tepercayanya sendiri untuk divalidasi. Validasi yang berhasil membuktikan bahwa pihak yang berkomunikasi berjalan di lingkungan rahasia yang dilindungi, sehingga membangun kepercayaan secara dinamis.
Prasyarat
Solusi CAA telah diaktifkan di kluster Anda. Untuk detailnya, lihat Gunakan CAA untuk men-deploy kontainer rahasia pada VM rahasia.
Instal layanan Trustee di lingkungan tepercaya dan catat alamat IP-nya (ini akan menjadi titik akhir layanan Trustee Anda). Anda dapat menggunakan perintah berikut untuk menginstal Trustee.
PeerPod di kluster harus dapat mengakses alamat IP ini untuk menyelesaikan remote attestation. Pastikan jaringan Trustee dapat dijangkau dari VPC Pod kluster CAA.
Jalankan perintah berikut untuk menginstal Trustee. Topik ini menggunakan Alibaba Cloud Linux 3, dan contoh IP Trustee adalah
1.2.3.4.yum install trustee -yDi server Trustee, tambahkan aturan grup keamanan untuk mengizinkan traffic inbound pada port TCP 8080. Sumber aturan ini harus merupakan alamat IP egress yang digunakan oleh Pod kluster CAA untuk mengakses Trustee.
Jika kluster CAA dan Trustee berada dalam VPC yang sama, izinkan traffic dari blok CIDR VPC tersebut.
Jika komunikasi terjadi antar-VPC atau melalui Internet, izinkan traffic dari alamat IP egress publik Gateway NAT kluster.
Kasus penggunaan 1: Verifikasi dan deploy kontainer ke lingkungan tepercaya
Prosedur ini melakukan remote attestation selama fase penerapan kontainer untuk memastikan workload hanya berjalan pada node yang telah diverifikasi dan tepercaya.
1. Konfigurasikan Trustee
Di server Trustee, konfigurasikan kebijakan untuk menentukan karakteristik lingkungan mana yang dianggap tepercaya.
Konfigurasikan kebijakan peluncuran keamanan kontainer.
File kebijakan ini diperlakukan sebagai resource rahasia dan dibaca selama proses startup Pod TDX untuk memicu alur remote attestation.
# Buat direktori untuk menyimpan kebijakan mkdir -p /opt/trustee/kbs/repository/default/container-policy # Buat file kebijakan yang mengizinkan semua citra (hanya untuk demo) cat << EOF > /opt/trustee/kbs/repository/default/container-policy/insecure-accept-all { "default": [{"type": "insecureAcceptAnything"}], "transports": {} } EOFKonfigurasikan kebijakan remote attestation.
Kebijakan ini menetapkan standar spesifik untuk lingkungan perangkat keras dan perangkat lunak tepercaya. Misalnya, kebijakan ini dapat mensyaratkan lingkungan berjalan di platform Intel TDX.
# Ubah file kebijakan /opt/trustee/attestation-service/policies/opa/default.rego # Ganti isinya dengan kebijakan remote attestation untuk ECS TDX PeerPods cat << EOF > /opt/trustee/attestation-service/policies/opa/default.rego package policy import rego.v1 default executables := 32 default hardware := 97 default configuration := 32 default file_system := 32 ##### ECS TDX PeerPod executables := 3 if { input.tdx } hardware := 2 if { # Verifikasi bahwa bukti bertipe Intel TDX input.tdx.quote.header.tee_type == "81000000" # Verifikasi vendor ID input.tdx.quote.header.vendor_id == "939a7233f79c4ca9940a0db3957f0607" } configuration := 2 if { input.tdx } file_system := 2 if { input.tdx } EOFRestart layanan Trustee untuk menerapkan kebijakan.
service as restart
2. Deploy Pod dengan remote attestation diaktifkan
Persiapkan
initdatadan deploy Pod.initdatadigunakan untuk meneruskan informasi konfigurasi ke PeerPod, termasuk alamat layanan Trustee.# Ganti dengan alamat IP Trustee yang sebenarnya TRUSTEE_SERVICE_ENDPOINT=1.2.3.4 # Hasilkan file initdata.toml cat <<EOF > initdata.toml version = "0.1.0" algorithm = "sha256" [data] "aa.toml" = ''' [eventlog_config] enable_eventlog = true [token_configs] [token_configs.kbs] url = "http://${TRUSTEE_SERVICE_ENDPOINT}:8080" ''' "cdh.toml" = ''' [kbc] name = "cc_kbc" url = "http://${TRUSTEE_SERVICE_ENDPOINT}:8080" [image] image_security_policy_uri = "kbs:///default/container-policy/insecure-accept-all" ''' EOF # Kompres initdata dengan gzip dan encode dengan Base64 initdata=$(cat initdata.toml | gzip | base64 -w0)Jalankan
echo $initdatauntuk melihat konten terencode dariinitdata.Buat file YAML Pod.
Tuliskan string
initdatayang dihasilkan pada langkah sebelumnya ke bidangannotationsmetadata Pod.# Buat file bernama pod.yaml cat << EOF > pod.yaml apiVersion: v1 kind: Pod metadata: name: pod-caa-demo annotations: io.katacontainers.config.hypervisor.cc_init_data: ${initdata} spec: runtimeClassName: kata-remote containers: - image: alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3:latest name: hello command: ["sh", "-c", "echo hello && sleep infinity"] EOFDeploy Pod.
kubectl apply -f pod.yamlSetelah penerapan, jalankan
kubectl get po pod-caa-demountuk memeriksa status Pod.Verifikasi status remote attestation di server Trustee.
Periksa log layanan remote attestation untuk memastikan validasi lingkungan berhasil.
journalctl -u as -fJika Anda melihat pesan
Tdx Verifier/endorsement check passeddi log, hal ini menunjukkan bahwa remote attestation berhasil dan Pod telah dimulai di lingkungan tepercaya.
Kasus penggunaan 2: Ambil dan verifikasi keandalan lingkungan saat runtime kontainer
Kasus penggunaan ini menunjukkan alur kerja lengkap bagi aplikasi yang sudah berjalan di dalam PeerPod untuk secara dinamis mendapatkan laporan attestasi lingkungan eksekusinya dan memverifikasinya melalui layanan eksternal independen.
Proses ini melibatkan tiga lingkungan eksekusi yang berbeda:
Terminal lokal: Mesin yang Anda gunakan untuk berinteraksi dengan kluster.
Di dalam kontainer Pod: Tempat aplikasi rahasia berjalan dan menghasilkan laporan attestasi. Anda dapat menjalankan
kubectl exec -it pod-caa-demo -- shuntuk masuk ke kontainer.Server verifier: Node server independen dan tepercaya tempat layanan Trustee dideploy. Server ini bertanggung jawab untuk memvalidasi bukti yang diterima. Anda dapat menggunakan kembali Trustee yang ada atau mendeploy yang baru untuk tujuan ini.
1. Dapatkan bukti remote attestation dari dalam kontainer
(Opsional) Langkah 1: Tambahkan pengukuran dinamis
Pengukuran dinamis memungkinkan aplikasi menyematkan informasi runtime kustom ke dalam laporan remote attestation, yang meningkatkan kemampuan audit dan kepatuhan.
Sementara remote attestation standar memverifikasi keamanan "brankas"-nya sendiri, pengukuran dinamis lebih lanjut membuktikan bahwa "isi brankas" juga berada dalam kondisi yang diharapkan.
Dari dalam kontainer Pod, kirim permintaan HTTP POST ke API di http://127.0.0.1:8006/aa/aael untuk merekam informasi secara dinamis. Informasi ini disimpan ke Eventlog Pod TDX yang mendasari dan dikaitkan dengan laporan attestasi akhir untuk mencegah modifikasi.
Isi permintaan:
Bidang
domain,operation, dancontentsemuanya dapat dikustomisasi dan berupa string yang dapat dicetak. Bidang-bidang tersebut tidak boleh mengandung spasi.{ "domain": "<DOMAIN>", "operation": "<OPERATION>", "content": "<CONTENT>" }Contoh: Catat event pemuatan konfigurasi
# Jalankan perintah ini di dalam kontainer curl -X POST http://127.0.0.1:8006/aa/aael \ -H "Content-Type: application/json" \ -d '{"domain":"test","operation":"test","content":"test"}'
Langkah 2: Dapatkan bukti remote attestation
Dari dalam kontainer Pod, kirim permintaan HTTP GET untuk mengambil bukti remote attestation Trusted Execution Environment (TEE) saat ini guna diverifikasi oleh pihak eksternal.
Kirim permintaan GET ke http://127.0.0.1:8006/aa/evidence.
Parameter runtime_data harus berisi nilai tantangan (Nonce) yang diencode Base64 yang diberikan oleh verifier untuk melindungi dari serangan replay.curl 127.0.0.1:8006/aa/evidence?runtime_data=AAAAPerintah ini akan menghasilkan string JSON panjang, yang merupakan bukti remote attestation untuk TEE saat ini. Salin seluruh string ini (dari kurung kurawal pembuka { hingga penutup }) dan simpan ke file sementara untuk langkah berikutnya.
2. Persiapkan lingkungan verifikasi
Proses verifikasi bergantung pada instans Trustee independen dan tepercaya.
(Opsional) Jalankan
yum install trustee -yuntuk menginstal Trustee di server verifier Anda.Konfigurasikan kebijakan validasi sisi klien.
Di node verifier, buat file kebijakan baru
/opt/trustee/attestation-service/policies/opa/client.regodi layanan Trustee.# Buat file client.rego dengan isi berikut cat <<EOF > /opt/trustee/attestation-service/policies/opa/client.rego # Kebijakan untuk memverifikasi bukti yang diperoleh dari kontainer rahasia (TEE) package policy import rego.v1 # --- Skor default --- default executables := 32 default hardware := 97 default configuration := 32 default file_system := 32 # --- Aturan validasi untuk Alibaba Cloud ECS TDX PeerPods --- # Contoh: skor 2 = "tepercaya", 3 = "menegaskan" # Jika bukti input berisi bidang "tdx", tumpukan perangkat lunak dianggap "menegaskan" executables := 3 if { input.tdx } # Aturan penilaian perangkat keras: Jika kedua kondisi berikut terpenuhi, lingkungan perangkat keras dinilai "tepercaya" (skor 2). hardware := 2 if { # Periksa bidang tipe TEE. Harus berupa identifikasi Intel TDX "81000000" input.tdx.quote.header.tee_type == "81000000" # Periksa bidang vendor ID. Harus berupa UUID resmi Intel input.tdx.quote.header.vendor_id == "939a7233f79c4ca9940a0db3957f0607" } # Jika input berupa bukti TDX, konfigurasinya dianggap "tepercaya". configuration := 2 if { input.tdx } # Jika input berupa bukti TDX, sistem filenya dianggap "tepercaya". file_system := 2 if { input.tdx } EOFRestart Trustee untuk menerapkan kebijakan
client.rego.service as-restful restart
3. Persiapkan dan kirim permintaan verifikasi
Kirimkan bukti yang diperoleh dari kontainer ke layanan verifikasi.
(Disarankan) Simpan bukti asli secara aman.
Untuk menghindari kesalahan akibat karakter khusus, kami sarankan Anda menyimpan bukti ke file.
# Buat file sementara bernama evidence.json cat > evidence.jsonSetelah menjalankan perintah, tempelkan string JSON lengkap tersebut. Lalu, simpan file dan keluar dari mode edit.
Baca bukti dari file dan persiapkan permintaan.
# Baca konten dari file ke variabel EVIDENCE=$(cat evidence.json) # Encode bukti dengan Base64 dan buat agar aman untuk URL BASE64EVIDENCE=$(echo ${EVIDENCE} | base64 -w 0 2>/dev/null | tr '+/' '-_' | tr -d '=' ) # Buat file badan permintaan yang berisi bukti terencode cat << EOF > request.json { "verification_requests": [ { "tee": "tdx", "evidence": "${BASE64EVIDENCE}" } ], "policy_ids": ["client"] } EOFKirim permintaan verifikasi.
Kirim permintaan POST ke titik akhir/attestationlayanan verifikasi lokal Anda pada port default50005.curl -k -X POST http://127.0.0.1:50005/attestation \ -i \ -H 'Content-Type: application/json' \ -d @request.jsonBadan respons akan berisi bidang
token, yang merupakan string JWT. Ini adalah token verifikasi Anda. Salin token tersebut.
4. Uraikan dan evaluasi hasil verifikasi
Uraikan token JWT untuk mengambil skor keandalan setiap sub-status lingkungan saat ini.
Simpan token verifikasi.
# Ganti '<...>' dengan string JWT yang sebenarnya (tanpa tanda kutip) TOKEN='<Paste the JWT token here>'Uraikan token dan lihat skornya.
echo $TOKEN | cut -d'.' -f2 | base64 -d | jq '.submods.cpu0."ear.trustworthiness-vector"'Output yang diharapkan:
base64: invalid input { "configuration": 2, "executables": 3, "file-system": 2, "hardware": 2 }Pesan
base64: invalid inputdapat diabaikan dengan aman.Konten JSON menunjukkan hasil verifikasi. Skor-skor tersebut sesuai dengan nilai yang ditentukan dalam file kebijakan Anda, yang mengonfirmasi bahwa kontainer berjalan di lingkungan TDX yang sesuai dan tepercaya. Verifikasi berhasil.
Terapkan di lingkungan produksi
Perhalus kebijakan attestasi: Contoh-contoh menggunakan kebijakan longgar. Di lingkungan produksi, Anda harus membuat kebijakan Rego yang tepat sesuai platform perangkat keras dan tumpukan perangkat lunak spesifik Anda. Kebijakan ini harus dikelola dalam sistem kontrol versi untuk audit dan pelacakan perubahan.
Kelola kredensial dan kunci: File
initdata.tomldapat berisi konfigurasi sensitif. Kendalikan secara ketat proses pembuatan, distribusi, dan penyimpanannya untuk mencegah kebocoran informasi.