Membuat dan menyesuaikan beban kerja

Workload dibuat oleh penulis workload, dan memproses data rahasia yang ingin digunakan oleh kolaborator data.

Penulis workload perlu menyusun resource berikut untuk membuat workload:

  • Aplikasi untuk memproses data rahasia. Anda dapat menulis aplikasi dalam bahasa apa pun yang Anda pilih, asalkan Anda membuat image yang di-container yang mendukungnya.

  • Image dalam container untuk memaketkan aplikasi ke dalamnya, menggunakan Docker.

  • Repositori di Artifact Registry untuk menyimpan image Docker.

  • Kebijakan peluncuran yang ditetapkan pada image container yang mengontrol cara menjalankan workload, dan membatasi kemampuan operator workload berbahaya.

Untuk men-deploy workload, Confidential VM dijalankan oleh operator workload berdasarkan image Confidential Space. Perintah ini mengambil image yang di-container dari Artifact Registry dan menjalankannya.

Kolaborator data harus memvalidasi pengesahan workload sebelum workload dapat mengakses data mereka.

Sebelum memulai

Menulis workload untuk Confidential Space bukan hanya sekadar kode dan proses debug. Anda juga perlu berbicara dengan kolaborator data untuk menilai kebutuhan mereka, menyiapkan lingkungan, mengemas kode ke dalam image yang dikontainerkan, dan bekerja sama dengan operator beban kerja untuk memastikan semuanya di-deploy dengan benar.

Berbicara dengan kolaborator data

Sebelum mulai menulis aplikasi, Anda perlu melakukan percakapan dengan kolaborator data Anda tentang data pribadi yang ingin mereka kerjakan. Pertanyaan yang dapat Anda ajukan meliputi:

  • Apa ID organisasi yang terlibat?

  • Berapa nomor project yang terlibat?

  • Apa saja Google Cloud resource yang perlu saya akses, dan apa ID serta namanya?

  • Apakah ada resource yang perlu saya akses yang tidak dikelola oleh IAM Google Cloud?

  • Layanan pengesahan mana yang ingin Anda gunakan, Google Cloud Attestation atau Intel Trust Authority?

  • Bagaimana aplikasi harus membandingkan dan memproses data pribadi?

  • Dalam format apa output harus ditampilkan?

  • Di mana output harus disimpan, dan apakah output harus dienkripsi?

  • Apakah semua kolaborator data melihat hasil yang sama, atau apakah outputnya unik untuk setiap kolaborator?

Selain itu, setiap kolaborator data mungkin juga memiliki persyaratan privasi unik yang perlu Anda penuhi. Sangat penting untuk memastikan tidak ada data pribadi yang terekspos sebagai akibat dari beban kerja.

Membangun solusi Confidential Space Anda

Sebaiknya siapkan dua (atau lebih) project dengan izin yang sesuai sebagai lingkungan pengujian, seperti dalam Membuat lingkungan Confidential Space pertama Anda. Cobalah untuk mencerminkan penyiapan project kolaborator data sebaik mungkin. Dengan begitu, Anda dapat memperoleh pengalaman terkait izin lintas project dan mengambil data yang Anda butuhkan dari resource Google Cloud tertentu. Anda juga dapat memahami peran operator workload dan kolaborator data serta tanggung jawab mereka.

Selama fase pembuatan awal, sebaiknya amati praktik berikut:

  • Saat bekerja sebagai kolaborator data, minimalkan validasi pengesahan demi kecepatan pengembangan.

  • Saat bekerja sebagai operator workload, gunakan image debug Confidential Space, bukan produksi, saat men-deploy workload. Hal ini memberi Anda lebih banyak cara untuk memecahkan masalah beban kerja.

Seiring dengan perkembangan aplikasi dan statusnya menjadi lebih dapat diprediksi, Anda dapat semakin mengamankan solusi Anda dengan validasi pengesahan dan kebijakan peluncuran, serta beralih ke image Confidential Space produksi.

Setelah beban kerja Anda berfungsi dengan benar di lingkungan pengujian, Anda dapat beralih ke pengujian di project kolaborator data dengan resource nyata, tetapi data palsu sehingga Anda dapat mendemonstrasikan kepada kolaborator data cara kerjanya. Pada tahap ini, Anda dapat mulai menggunakan operator workload independen.

Setelah semuanya berfungsi dan outputnya sesuai yang diharapkan, Anda dapat mulai menguji data produksi. Setelah pengujian tersebut selesai dan semua pihak menyetujui hasilnya, workload siap untuk diterapkan ke produksi.

Berhati-hatilah dengan output

Saat menguji kode, Anda mungkin tergoda untuk melakukan debug dengan mencetak ke STDOUT atau STDERR. Jika Anda memilih untuk melakukannya, berhati-hatilah agar Anda tidak mengekspos data pribadi yang dapat dibaca oleh pihak lain dengan mengakses log. Sebelum kode Anda mulai berfungsi di produksi, pastikan kode tersebut tidak menghasilkan output apa pun selain yang benar-benar diperlukan.

Hal yang sama berlaku untuk output akhir. Hanya berikan hasil akhir yang tidak membahayakan privasi dan sensitivitas data asli.

Membangun image dalam container dengan Docker

Aplikasi perlu dipaketkan ke dalam image dalam container yang dibuat oleh Docker, yang disimpan di Artifact Registry. Saat workload di-deploy, image Docker diambil dari repositori Artifact Registry oleh image Confidential Space, dijalankan, dan aplikasi dapat mulai bekerja pada resource project yang sesuai.

Saat membangun image Docker, pertimbangkan hal-hal berikut:

Kemampuan Linux tambahan

Beban kerja Confidential Space berjalan di container Linux menggunakan containerd. Container ini berjalan menggunakan kemampuan Linux default.

Untuk menambahkan kemampuan, Anda dapat menggunakan tee-added-capabilities.

Batas disk dan memori

Confidential Space secara otomatis mengubah ukuran partisi stateful boot disk saat menggunakan ukuran boot disk yang lebih besar. Ukuran partisi kira-kira adalah ukuran boot disk dikurangi 5 GB.

Sebagai bagian dari perlindungan sistem file integritas Confidential Space, Confidential Space menyimpan tag integritas disk dalam memori. Hal ini menggunakan overhead memori sekitar 1% untuk setiap byte disk. Misalnya, disk 100 GB memerlukan memori 1 GB dan disk 10 TB memerlukan memori 100 GB.

Pastikan untuk tetap berada dalam batas memori VM. Memori swap dinonaktifkan di VM Confidential Space, yang berarti penggunaan memori yang berlebihan dapat menyebabkan workload error. Pastikan pilihan mesin Anda mendukung penggunaan memori workload Anda selain overhead integritas disk.

Penonaktifan yang benar

Saat operator meminta penonaktifan VM Confidential Space, Peluncur Confidential Space akan mencoba menonaktifkan workload dengan tuntas dengan mengirim sinyal SIGTERM. Setelah diterima, beban kerja memiliki waktu hingga 120 detik untuk melakukan pembersihan sebelum Peluncur Ruang Rahasia memulai proses penonaktifan. Beban kerja yang tidak menerapkan penanganan sinyal SIGTERM akan langsung dihentikan setelah menerima sinyal.

Pemasangan sementara dalam memori

Confidential Space mendukung penambahan ruang sementara dalam memori. Tindakan ini menggunakan memori yang tersedia di VM Confidential Space. Karena ruang sementara menggunakan memori Confidential VM, ruang tersebut memiliki integritas dan properti kerahasiaan yang sama dengan Confidential VM.

Anda dapat menggunakan tee-dev-shm-size untuk meningkatkan ukuran pemasangan memori bersama /dev/shm untuk beban kerja. Ukuran /dev/shm ditentukan dalam KB.

Anda dapat menggunakan tee-mount untuk menentukan pemasangan tmpfs di container yang sedang berjalan menggunakan konfigurasi yang dipisahkan dengan titik koma. type dan source selalu tmpfs. destination adalah titik pemasangan, yang berinteraksi dengan kebijakan peluncuran tee.launch_policy.allow_mount_destinations. Anda dapat menentukan ukuran tmpfs dalam byte (opsional). Ukuran defaultnya adalah 50% dari memori VM.

Port masuk

Secara default, VM Confidential Space beroperasi dengan aturan firewall untuk memblokir semua port masuk. Saat menggunakan versi image Confidential Space 230600 atau yang lebih baru, Anda dapat menentukan port masuk yang harus tetap terbuka di Dockerfile saat membangun image workload.

Untuk membuka port, tambahkan kata kunci EXPOSE ke Dockerfile Anda, beserta nomor port yang akan tetap dibuka dan protokol opsional tcp atau udp. Jika Anda tidak menentukan protokol untuk port, TCP dan UDP diizinkan. Berikut adalah contoh Dockerfile yang mengekspos port masuk:

FROM alpine:latest
EXPOSE 80
EXPOSE 443/tcp
EXPOSE 81/udp
WORKDIR /test
COPY salary /test
ENTRYPOINT ["/test/salary"]
CMD []

Bergantung pada image dasar yang Anda gunakan, beberapa port mungkin sudah diekspos. Dockerfile Anda hanya mengekspos port tambahan; tidak dapat memblokir port yang telah dibuka oleh image dasar.

Operator beban kerja harus memastikan bahwa port yang diekspos terbuka di firewall VPC sebelum menjalankan beban kerja. Nomor port dapat diberikan oleh penulis workload, atau diambil dari informasi image Docker.

Port yang terekspos dicatat dalam log di konsol dan dialihkan ke Cloud Logging saat menggunakan variabel metadata tee-container-log-redirect.

Kebijakan peluncuran

Kebijakan peluncuran menggantikan variabel metadata VM yang ditetapkan oleh operator workload untuk membatasi tindakan berbahaya. Penulis workload dapat menetapkan kebijakan dengan label sebagai bagian dari pembuatan image container mereka.

Misalnya, dalam Dockerfile:

LABEL "tee.launch_policy.allow_cmd_override"="true"

Dalam file BUILD Bazel:

container_image(
    ...
    labels={"tee.launch_policy.allow_cmd_override":"true"}
    ...
)

Kebijakan peluncuran yang tersedia ada dalam tabel berikut:

Kebijakan Jenis Deskripsi

tee.launch_policy.allow_capabilities

Berinteraksi dengan:

Boolean (default-nya adalah false) Menentukan apakah operator workload dapat menambahkan kemampuan Linux tambahan ke container workload.

tee.launch_policy.allow_cgroups

Berinteraksi dengan:

Boolean (default-nya adalah false) Menentukan apakah container workload diizinkan untuk menyertakan pemasangan cgroup yang memiliki namespace di /sys/fs/cgroup.

tee.launch_policy.allow_cmd_override

Berinteraksi dengan:

Boolean (default-nya adalah false) Menentukan apakah CMD yang ditentukan dalam Dockerfile container workload dapat diganti oleh operator workload dengan nilai metadata tee-cmd.

tee.launch_policy.allow_env_override

Berinteraksi dengan:

String yang dipisahkan koma String nama variabel lingkungan yang diizinkan dan dipisahkan koma yang diizinkan untuk ditetapkan oleh operator workload dengan nilai metadata tee-env-ENVIRONMENT_VARIABLE_NAME.

tee.launch_policy.allow_mount_destinations

Berinteraksi dengan:

  • Operator beban kerja: Variabel metadata tee-mount.
String yang dipisahkan dengan titik dua

String direktori pemasangan yang diizinkan dan dipisahkan dengan titik dua yang dapat dipasang oleh operator workload menggunakan tee-mount.

Contoh: /run/tmp:/var/tmp:/tmp

tee.launch_policy.log_redirect

Berinteraksi dengan:

String yang ditentukan

Menentukan cara kerja logging jika tee-container-log-redirect disetel ke true oleh operator workload.

Nilai yang valid adalah sebagai berikut:

  • debugonly (default): Hanya mengizinkan pengalihan stdout dan stderr saat menggunakan image debug.
  • always: Selalu izinkan pengalihan stdout dan stderr.
  • never: Jangan pernah mengizinkan pengalihan stdout dan stderr.

tee.launch_policy.monitoring_memory_allow

Berinteraksi dengan:

String yang ditentukan

Menentukan cara kerja pemantauan penggunaan memori workload jika tee-monitoring-memory-enable disetel ke true oleh operator workload.

Nilai yang valid adalah sebagai berikut:

  • debugonly (default): Hanya izinkan pemantauan penggunaan memori saat menggunakan image debug.
  • always: Selalu izinkan pemantauan penggunaan memori.
  • never: Jangan pernah mengizinkan pemantauan penggunaan memori.

Beberapa eksekusi workload

Untuk menjalankan ulang workload, operator workload harus memulai ulang instance VM. Tindakan ini akan memulai workload di lingkungan yang paling bersih dan mengenkripsi disk instance VM dengan kunci sementara baru.

Memulai ulang mengatasi vektor serangan yang memodifikasi image beban kerja pada disk setelah didownload dan diukur. Namun, hal ini juga menambah overhead seperti waktu booting dan menarik image workload ke setiap proses workload. Jika overhead ini terlalu memengaruhi performa workload Anda, dengan risiko meningkatkan profil risiko, Anda dapat mengodekan ulang workload ke dalam workload itu sendiri.

Cgroup dengan namespace

Workload Confidential Space berjalan tanpa pemasangan cgroup secara default.

Untuk mengelola cgroup dalam container workload, Anda dapat menggunakan tee-cgroup-ns. Kunci metadata ini menginstruksikan instance VM untuk membuat pemasangan di /sys/fs/cgroup dalam sistem file container.

Image container yang dapat direproduksi

Membangun image container dengan cara yang dapat direproduksi dapat membantu meningkatkan kepercayaan antarpihak. Anda dapat membuat gambar yang dapat direproduksi dengan Bazel.

Resource yang tidak dikelola oleh Google Cloud IAM

Untuk mengakses resource yang tidak dikelola oleh Google Cloud IAM, beban kerja Anda harus menentukan audiens kustom.

Untuk mengetahui informasi selengkapnya, lihat Mengakses resource yang tidak dikelola oleh Google Cloud IAM.

Image container bertanda tangan

Anda dapat menandatangani image container dengan kunci publik, yang kemudian dapat digunakan oleh kolaborator data untuk pengesahan, bukan menentukan ringkasan image dalam kebijakan WIP mereka.

Artinya, kolaborator data tidak perlu memperbarui kebijakan WIP mereka setiap kali workload diperbarui, dan workload dapat terus mengakses resource yang dilindungi tanpa terganggu.

Anda dapat menggunakan Sigstore Cosign untuk menandatangani image container. Agar Confidential Space dapat mengambil tanda tangan, operator workload harus menambahkan informasi tanda tangan ke variabel metadata tee-signed-image-repos sebelum men-deploy workload.

Selama runtime, tanda tangan dikirim ke layanan pengesahan untuk diverifikasi. Layanan pengesahan menampilkan token klaim pengesahan yang berisi klaim tanda tangan terverifikasi. Berikut adalah contoh klaim tanda tangan:

"image_signatures": [
  {
    "key_id": "hexadecimal-sha256-fingerprint-public-key1",
    "signature": "base64-encoded-signature",
    "signature_algorithm": "RSASSA_PSS_SHA256"
  },
  {
    "key_id": "hexadecimal-sha256-fingerprint-public-key2",
    "signature": "base64-encoded-signature",
    "signature_algorithm": "RSASSA_PSS_SHA256",
  },
  {
    "key_id": "hexadecimal-sha256-fingerprint-public-key3",
    "signature": "base64-encoded-signature",
    "signature_algorithm": "RSASSA_PSS_SHA256",
  }
]

Untuk mengonfigurasi penandatanganan image container, lihat Codelab image container bertanda tangan.