Kolaborator data harus menyiapkan resource berikut agar data rahasia mereka dapat diakses oleh beban kerja:
Data terenkripsi, yang disimpan di Google Cloud.
Workload identity pool (WIP) untuk mengizinkan workload. Setelah workload diizinkan oleh WIP, workload tersebut dapat mengakses dan mengoperasikan data rahasia kolaborator data.
Selain itu, kolaborator data perlu memilih tempat penyimpanan hasil workload Confidential Space, dan apakah hasil tersebut unik untuk setiap kolaborator, atau dibagikan. Misalnya, Anda dapat memilih untuk menghasilkan hasil yang sama ke beberapa bucket Cloud Storage milik setiap kolaborator data.
Menyimpan data terenkripsi Anda
Anda dapat menggunakan layanan Google Cloud apa pun yang menyimpan data untuk menghosting data rahasia Anda. Misalnya, Anda dapat menggunakan salah satu layanan berikut:
Anda harus memastikan data ini dienkripsi dalam penyimpanan, baik menggunakan fitur bawaan atau dengan sesuatu seperti Cloud Key Management Service (Cloud KMS).
Memberi otorisasi workload dengan WIP
WIP adalah mekanisme yang digunakan Confidential Space untuk mengizinkan workload eksternal mengakses dan menggunakan data rahasia Anda sebagai identitas gabungan. Identitas gabungan adalah entitas eksternal yang diperlakukan seolah-olah merupakan principal dalam project Anda sendiri, sehingga Anda dapat memberikan peran IAM kepadanya untuk memberikan akses ke resource tertentu, atau meniru identitas akun layanan untuk melakukan hal yang sama.
Sebagai kolaborator data, Anda menyiapkan penyedia di dalam WIP yang menetapkan aturan untuk entity yang diautentikasi sebagai identitas gabungan. Untuk Confidential Space, Anda harus menentukan hal berikut di penyedia:
Layanan pengesahan: Layanan ini memverifikasi bahwa workload adalah instance VM Rahasia, dan pada akhirnya menampilkan token pengesahan OpenID Connect (OIDC) ke penyedia WIP. Operator workload menetapkan layanan pengesahan yang digunakan, dan layanan tersebut harus cocok dengan layanan pengesahan yang ditambahkan ke penyedia WIP agar akses diberikan.
Pemetaan atribut: Atribut dalam token akses Security Token Service yang dipetakan ke pernyataan yang dibuat oleh entitas yang mengautentikasi—dalam hal ini, instance VM yang menjalankan workload. Pernyataan dibuat oleh instance VM itu sendiri, image Confidential Space, dan container workload, lalu diteruskan ke penyedia WIP oleh workload. Atribut ini digunakan untuk hal-hal seperti jejak audit di Cloud Logging, dan untuk memberikan peran melalui IAM berdasarkan autentikasi pernyataan entitas, seperti ringkasan container image workload. Baca selengkapnya tentang pemetaan atribut.
Kebijakan pengesahan: Serangkaian kondisi, yang harus dipenuhi oleh entity yang melakukan autentikasi untuk mendapatkan akses, berdasarkan pernyataan yang mereka buat.
Saat workload dimulai, Peluncur Confidential Space mengirimkan laporan pengesahannya ke layanan pengesahan yang ditentukan oleh operator workload, yang memverifikasi instance VM Rahasia, lalu menampilkan token pengesahan OIDC. Token ini berlaku selama satu jam, dan diperbarui secara otomatis.
Token pengesahan kemudian diteruskan ke penyedia WIP oleh beban kerja, dan penyedia menggunakannya untuk memeriksa apakah pernyataan lulus kebijakan pengesahan yang ditentukan dalam penyedia. Jika ya, workload diizinkan mengakses resource rahasia.
Akses beban kerja eksternal
Sebelum menyiapkan WIP dan penyedia, Anda harus memilih cara workload akan mengakses resource Anda: akses resource langsung, atau peniruan identitas akun layanan.
Akses resource langsung
Sebaiknya gunakan metode akses resource langsung untuk workload.
Metode ini melibatkan penyiapan identitas gabungan di penyedia WIP yang terkait dengan pernyataan entitas yang melakukan autentikasi. Dengan cara ini, workload dapat diizinkan untuk mengakses resource secara langsung melalui binding IAM, berdasarkan atribut seperti ringkasan image container workload.
Akses resource langsung memiliki keuntungan berikut:
Penyiapan lingkungan Confidential Space memerlukan lebih sedikit langkah, karena kolaborator data tidak perlu menyiapkan akun layanan untuk akun layanan beban kerja yang akan di-impersonate.
Workload hanya diizinkan untuk mengakses resource tertentu sebagaimana ditentukan oleh IAM. Cara ini lebih aman daripada metode peniruan akun layanan, di mana akun layanan yang memiliki izin berlebih atau hak peniruan mungkin memberikan akses yang lebih banyak kepada pihak tidak bertanggung jawab daripada yang dimaksudkan.
Setiap akses resource dicatat dengan identitas gabungan instance VM workload, bukan identitas akun layanan yang di-impersonate yang mungkin dibagikan oleh beberapa workload. Identitas instance VM workload dapat mencakup detail seperti ringkasan image container, nomor project tempat workload beroperasi, dan ID instance VM yang menjalankan workload, sehingga memberikan jejak audit yang lebih mendetail.
Anda tidak perlu memetakan properti
selfLinkinstance VM ke atributgoogle.subjectdi penyedia WIP. NilaiselfLinkyang sangat panjang dapat melebihi batas 127 byte atribut ini, sehingga menyebabkan kegagalan autentikasi penyedia WIP.
Peniruan akun layanan
Metode peniruan identitas akun layanan melibatkan setiap kolaborator data yang menyiapkan akun layanan untuk mendekripsi data pribadinya, lalu melampirkan akun layanan tersebut ke WIP-nya sendiri. Mereka juga menentukan akun layanan workload di penyedia WIP mereka, yang memungkinkan akun layanan workload menirukan akun layanan kolaborator data sehingga dapat mengambil dan mengoperasikan data rahasia mereka.
Peniruan akun layanan hanya boleh digunakan dalam skenario berikut:
Saat Anda perlu menggunakan tanda tangan gambar sebagai kredensial autentikasi, karena sintaksis yang digunakan oleh tanda tangan tidak berfungsi dengan pemetaan atribut.
Saat Anda mengakses API yang tidak mendukung identitas gabungan.
Metode peniruan akun layanan mungkin gagal melakukan autentikasi ke provider WIP jika instance VM memiliki properti selfLink yang sangat panjang. Hal ini karena klaim sub dalam token pengesahan—yang ditetapkan ke nilai selfLink—dipetakan di penyedia WIP ke atribut google.subject, yang memiliki batas 127 byte.
Untuk nilai selfLink instance VM yang melebihi 127 byte, Anda harus mengganti nama instance VM untuk memperpendek selfLink, atau menggunakan metode akses resource langsung.
Menyiapkan WIP dan penyedia
Langkah-langkah untuk menyiapkan penyedia berubah bergantung pada apakah Anda menggunakan akses resource langsung atau peniruan akun layanan.
Akses resource langsung
Metode akses resource langsung melibatkan penyiapan WIP dan penyedia, lalu penyiapan peran IAM berdasarkan ringkasan image container beban kerja tertentu.
Menyiapkan WIP dan penyedia
Untuk menyiapkan WIP dan penyedia, selesaikan petunjuk berikut:
Buat WIP:
gcloud iam workload-identity-pools create DATA_COLLABORATOR_POOL_NAME \ --location=globalMembuat penyedia OIDC di WIP:
gcloud iam workload-identity-pools providers create-oidc attestation-verifier \ --location=global \ --workload-identity-pool=DATA_COLLABORATOR_POOL_NAME \ --issuer-uri="ISSUER_URI" \ --allowed-audiences="https://sts.googleapis.com" \ --attribute-mapping="google.subject=\"gcpcs::\"+assertion.submods.container.image_digest+\"::\"+assertion.submods.gce.project_number+\"::\"+assertion.submods.gce.instance_id,attribute.image_digest=assertion.submods.container.image_digest" \ --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' \ && 'STABLE' in assertion.submods.confidential_space.support_attributes"Contoh ini menggunakan nilai berikut:
issuer-uriyang cocok dengan layanan pengesahan yang Anda gunakan:Google Cloud Attestation:
https://confidentialcomputing.googleapis.comIntel Trust Authority:
https://portal.trustauthority.intel.com
allowed-audiencesdarihttps://sts.googleapis.com. Ini adalah Security Token Service Google, yang menukar kredensial dengan token akses.attribute-mappinggoogle.subject, dengan nilai berikut:\"gcpcs::\"+assertion.submods.container.image_digest+\"::\"+assertion.submods.gce.project_number+\"::\"+assertion.submods.gce.instance_id,attribute.image_digest=assertion.submods.container.image_digestNilai ini dibuat menggunakan Common Expression Language (CEL). Nilai berikut ditetapkan ke atribut
gcpcs, dan muncul di Cloud Logging setiap kali beban kerja mengakses resource:assertion.submods.container.image_digest: Ringkasan image container workload.assertion.submods.gce.project_number: Nomor project instance VM.assertion.submods.gce.instance_id: ID instance VM.
Selain itu,
attribute.image_digestdisetel keassertion.submods.container.image_digest, ringkasan image container workload. Atribut ini dipetakan sehingga Anda dapat memberikan peran IAM identitas gabungan berdasarkan ringkasan gambar tertentu.Anda dapat memetakan salah satu pernyataan beban kerja yang tersedia, selama total panjang nilai
google.subjectkurang dari 127 byte.attribute-conditionsberikut, yang membentuk kebijakan pengesahan. Jika kondisi ini cocok dengan pernyataan workload, maka workload diizinkan mengakses resource rahasia sebagai identitas gabungan:assertion.swname == 'CONFIDENTIAL_SPACE': Memverifikasi bahwa Confidential Space adalah software yang berjalan di VM, dengan semua jaminan keamanan bawaannya.'STABLE' in assertion.submods.confidential_space.support_attributes: Memverifikasi bahwa image Confidential Space produksi sedang digunakan, dan memilikiSTABLEatribut dukungan.
Untuk mengetahui kondisi atribut lainnya yang dapat Anda gunakan, lihat Membuat kebijakan pengesahan.
Memberikan peran IAM identitas gabungan
Setelah membuat penyedia WIP, Anda dapat memberikan peran IAM kepada identitas gabungan berdasarkan apakah ringkasan container image workload identitas cocok dengan nilai yang diharapkan.
Contoh berikut menunjukkan pemberian kemampuan kepada identitas gabungan untuk mendekripsi kunci Cloud Key Management Service tertentu:
gcloud kms keys add-iam-policy-binding \
projects/DATA_COLLABORATOR_PROJECT_ID/locations/global/keyRings/DATA_COLLABORATOR_KEYRING_NAME/cryptoKeys/DATA_COLLABORATOR_KEY_NAME \
--member="principalSet://iam.googleapis.com/projects/DATA_COLLABORATOR_PROJECT_NUMBER/locations/global/workloadIdentityPools/DATA_COLLABORATOR_POOL_NAME/attribute.image_digest/WORKLOAD_CONTAINER_IMAGE_DIGEST" \
--role=roles/cloudkms.cryptoKeyDecrypter
Peniruan akun layanan
Metode peniruan akun layanan melibatkan hal berikut:
Membuat akun layanan di setiap project kolaborator data, dan memberikan izin kepada akun layanan tersebut untuk mendekripsi data rahasia.
Membuat WIP di setiap project kolaborator data, lalu melampirkan akun layanan setiap project yang baru saja dibuat ke WIP-nya.
Membuat penyedia WIP di setiap WIP, yang menentukan akun layanan workload sebagai akun yang diizinkan untuk meniru identitas akun layanan kolaborator data.
Menyiapkan akun layanan untuk mendekripsi data rahasia
Buat akun layanan di project kolaborator data:
gcloud iam service-accounts create DATA_COLLABORATOR_SERVICE_ACCOUNT_NAMEBeri akun layanan izin yang diperlukan untuk mendekripsi data rahasia. Misalnya, Anda dapat mengenkripsi file rahasia di Cloud Storage dengan Cloud KMS, sehingga Anda perlu memberikan izin akun layanan untuk mendekripsi data tersebut:
gcloud kms keys add-iam-policy-binding \ projects/DATA_COLLABORATOR_PROJECT_ID/locations/global/keyRings/DATA_COLLABORATOR_KEYRING_NAME/cryptoKeys/DATA_COLLABORATOR_KEY_NAME \ --member=serviceAccount:DATA_COLLABORATOR_SERVICE_ACCOUNT_NAME@DATA_COLLABORATOR_PROJECT_ID.iam.gserviceaccount.com \ --role=roles/cloudkms.cryptoKeyDecrypter
Menyiapkan WIP dan penyedia
Untuk menyiapkan WIP dan penyedia, selesaikan petunjuk berikut di setiap project kolaborator data:
Buat WIP:
gcloud iam workload-identity-pools create DATA_COLLABORATOR_POOL_NAME \ --location=globalLampirkan akun layanan yang akan di-impersonate ke WIP, dengan peran
roles/iam.workloadIdentityUser:gcloud iam service-accounts add-iam-policy-binding \ DATA_COLLABORATOR_SERVICE_ACCOUNT_NAME@DATA_COLLABORATOR_PROJECT_ID.iam.gserviceaccount.com \ --member="principalSet://iam.googleapis.com/projects/DATA_COLLABORATOR_PROJECT_NUMBER/locations/global/workloadIdentityPools/DATA_COLLABORATOR_POOL_NAME/*" \ --role=roles/iam.workloadIdentityUserBuat penyedia OIDC di WIP, dan tentukan akun layanan workload di dalamnya agar dapat meniru akun layanan kolaborator data:
gcloud iam workload-identity-pools providers create-oidc attestation-verifier \ --location=global \ --workload-identity-pool=DATA_COLLABORATOR_POOL_NAME \ --issuer-uri="https://confidentialcomputing.googleapis.com/" \ --allowed-audiences="https://sts.googleapis.com" \ --attribute-mapping="google.subject=assertion.sub" \ --attribute-condition="assertion.submods.container.image_digest == 'WORKLOAD_CONTAINER_IMAGE_DIGEST' \ && 'WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts \ && assertion.swname == 'CONFIDENTIAL_SPACE' \ && 'STABLE' in assertion.submods.confidential_space.support_attributes"Contoh ini menggunakan nilai berikut:
issuer-uridarihttps://confidentialcomputing.googleapis.com/, yang berarti Pengesahan Google Cloud digunakan sebagai layanan pengesahan.allowed-audiencesdarihttps://sts.googleapis.com. Ini adalah Security Token Service Google, yang menukar kredensial dengan token akses.attribute-mappinggoogle.subject, dengan nilaiassertion.sub. Ini adalahselfLinkinstance VM, seperti yang ditentukan dalam klaimsubdi token pengesahan.selfLinkinstance VM muncul di Cloud Logging setiap kali beban kerja mengakses resource.attribute-conditionsberikut, yang membentuk kebijakan pengesahan. Jika kondisi ini cocok dengan pernyataan workload, maka workload diizinkan untuk mengakses resource sebagai identitas gabungan:assertion.submods.container.image_digest == 'WORKLOAD_CONTAINER_IMAGE_DIGEST': Memverifikasi bahwa ringkasan image container workload cocok dengan nilai yang diharapkan.'WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts: Memverifikasi bahwa akun layanan yang terlampir pada beban kerja cocok dengan akun layanan yang diharapkan, lalu menggunakannya untuk meniru identitas akun layanan kolaborator data.assertion.swname == 'CONFIDENTIAL_SPACE': Memverifikasi bahwa Confidential Space adalah software yang berjalan di VM, dengan semua jaminan keamanan bawaannya.'STABLE' in assertion.submods.confidential_space.support_attributes: Memverifikasi bahwa image Confidential Space produksi sedang digunakan, dan memilikiSTABLEatribut dukungan.
Untuk mengetahui kondisi atribut lainnya yang dapat Anda gunakan, lihat Membuat kebijakan pengesahan.
Membuat kebijakan pengesahan
Sebagai bagian dari pembuatan WIP, Anda perlu membuat kebijakan pengesahan. Pernyataan entitas yang mengautentikasi harus cocok dengan kebijakan Anda agar dapat mengakses data Anda.
Kebijakan ditulis dalam
Common Expression Language
(CEL), dan terdiri dari serangkaian pernyataan yang dapat dirangkai bersama
dengan operator &&.
Pernyataan menggunakan pernyataan dari image Confidential Space, image container workload, atau instance VM sebagai variabel, dan nilai yang Anda tentukan sebagai ekspresi.
Misalnya, berikut adalah kebijakan yang mewajibkan workload menggunakan
Confidential Space, harus menggunakan
STABLE image Confidential Space,
dan zona tempat instance VM workload berjalan harus
us-central1-a:
assertion.swname == 'CONFIDENTIAL_SPACE' \
&& 'STABLE' in assertion.submods.confidential_space.support_attributes" \
&& assertion.submods.gce.zone == "us-central1-a"
Lihat pernyataan pengesahan untuk mengetahui informasi selengkapnya.
Pernyataan pengesahan
Pernyataan yang tersedia untuk membuat kebijakan pengesahan dijelaskan dalam tabel berikut. Kebijakan dapat memvalidasi pernyataan yang dibuat oleh image Confidential Space, container workload, dan instance VM.
Pernyataan gambar
| Pernyataan | Jenis | Deskripsi |
|---|---|---|
|
Berinteraksi dengan:
|
Enumerasi |
Memverifikasi bahwa image Confidential Space adalah versi debug atau produksi. Nilai yang valid adalah sebagai berikut:
ContohKode berikut memverifikasi bahwa image Confidential Space versi debug sedang digunakan: Kode berikut memverifikasi bahwa versi produksi image Confidential Space sedang digunakan: |
assertion.submods.confidential_space.support_attributes
|
Array string |
Memverifikasi versi keamanan image Confidential Space produksi yang berjalan di instance Confidential VM, menggunakan atribut dukungannya. Image Confidential Space untuk proses debug tidak memiliki set atribut dukungan. Berikut adalah atribut dukungan yang valid:
ContohKode berikut memverifikasi bahwa image Confidential Space versi stabil sedang digunakan: |
assertion.swname |
Enumerasi |
Memverifikasi software yang berjalan di entitas yang membuktikan. Nilai
selalu Contoh |
assertion.swversion |
Array string |
Memverifikasi versi software image Confidential Space. Sebaiknya gunakan
Contoh |
Pernyataan penampung
| Pernyataan | Jenis | Deskripsi |
|---|---|---|
|
Berinteraksi dengan:
|
Array string |
Memverifikasi perintah CMD dan parameter yang digunakan dalam image workload. ContohKode berikut memverifikasi bahwa CMD image beban kerja belum ditimpa:
Kode berikut memverifikasi bahwa |
|
Berinteraksi dengan:
|
Objek JSON |
Memverifikasi bahwa variabel lingkungan dan nilainya telah diteruskan secara eksplisit ke container. Contoh
Kode berikut memverifikasi bahwa variabel lingkungan
|
|
Berinteraksi dengan:
|
String |
Memverifikasi apakah operator workload telah mengganti variabel lingkungan dalam container. Contoh
Kode berikut memverifikasi bahwa operator workload belum
mengganti variabel lingkungan Kode berikut memverifikasi bahwa operator workload belum menimpa variabel lingkungan apa pun: |
assertion.submods.container.image_digest |
String |
Memverifikasi ringkasan image container beban kerja. Dengan menentukan kondisi ini, beberapa pihak dapat menyetujui workload yang sah dan diizinkan untuk mengakses data mereka. Contoh |
assertion.submods.container.image_id |
String |
Memverifikasi ID image container beban kerja. Contoh |
|
Berinteraksi dengan:
|
String |
Memverifikasi lokasi container workload yang berjalan di atas image Confidential Space. Contoh |
|
Berinteraksi dengan:
|
Objek JSON |
Memverifikasi bahwa gambar memiliki tanda tangan tertentu atau ditandatangani oleh algoritma penandatanganan dan kunci publik. Dengan menentukan kondisi ini, beberapa pihak dapat menyetujui workload yang diizinkan dan diizinkan untuk mengakses data mereka. Pernyataan dapat mencakup elemen berikut:
Contoh |
|
Berinteraksi dengan:
|
Enumerasi |
Memverifikasi kebijakan mulai ulang peluncur container saat beban kerja berhenti. Nilai yang valid adalah sebagai berikut:
Contoh |
Pernyataan VM
| Pernyataan | Jenis | Deskripsi |
|---|---|---|
|
Berinteraksi dengan:
|
Array string |
Memverifikasi bahwa akun layanan tertentu terhubung ke VM yang menjalankan workload, atau telah dicantumkan menggunakan Contoh |
assertion.hwmodel |
String |
Memverifikasi teknologi Confidential Computing yang mendasarinya. Platform yang didukung adalah sebagai berikut:
Contoh |
|
Berinteraksi dengan:
|
Boolean |
Memverifikasi status pemantauan pada entitas yang membuktikan. Contoh |
assertion.submods.gce.instance_id |
String |
Memverifikasi ID instance VM. Contoh |
assertion.submods.gce.instance_name |
String |
Memverifikasi nama instance VM. Contoh |
assertion.submods.gce.project_id |
String |
Memverifikasi bahwa VM menjalankan project Google Cloud dengan project ID yang ditentukan. Contoh |
assertion.submods.gce.project_number |
String |
Memverifikasi bahwa VM berjalan di project Google Cloud dengan nomor project yang ditentukan. Contoh |
|
Berinteraksi dengan:
|
String |
Memverifikasi bahwa VM berjalan di zona yang ditentukan. Contoh |
|
Berinteraksi dengan:
|
Enumerasi |
Memverifikasi fitur Confidential Computing yang didukung oleh
GPU NVIDIA. Hanya mode penerusan GPU tunggal (SPT) yang didukung
di Confidential Space, sehingga nilainya selalu Untuk mengetahui informasi selengkapnya tentang dukungan NVIDIA Confidential Computing, lihat NVIDIA Trusted Computing Solutions (PDF). Contoh |
|
Berinteraksi dengan:
|
Enumerasi |
Memverifikasi status driver Confidential Computing NVIDIA. Nilai yang valid adalah sebagai berikut:
Contoh |
|
Berinteraksi dengan:
|
Array objek |
Memverifikasi klaim untuk setiap GPU NVIDIA yang dibuktikan. Confidential Space hanya mendukung satu klaim GPU. Objek { "hwmodel": "GCP_NVIDIA_H100", "ueid": "490457405999046854973671575630853621547794591064", "l4_serial_number": "1216669666319372030078", "driver_version": "570.00", "vbios_version": "96.00.9F.00.01" } ContohKode berikut memverifikasi bahwa model hardware GPU pertama adalah NVIDIA H100 yang berjalan di Google Cloud: Kode berikut memverifikasi bahwa klaim pengesahan memiliki klaim terkait GPU: |