1. Panoramica
Confidential Space offre la condivisione e la collaborazione sicure dei dati tra più parti, consentendo alle organizzazioni di preservare la riservatezza dei propri dati. Ciò significa che le organizzazioni possono collaborare tra loro mantenendo il controllo sui propri dati e proteggendoli da accessi non autorizzati.
Confidential Space sblocca scenari in cui vuoi ottenere un valore reciproco dall'aggregazione e dall'analisi di dati sensibili, spesso regolamentati, mantenendo il pieno controllo. Con Confidential Space, le organizzazioni possono ottenere un valore reciproco dall'aggregazione e dall'analisi di dati sensibili come informazioni che consentono l'identificazione personale (PII), informazioni sanitarie protette (PHI), proprietà intellettuale e secret crittografici, mantenendo il controllo completo.
Che cosa ti serve
- Un progetto Google Cloud
- Un browser, ad esempio Chrome o Firefox
- Conoscenza di base di Google Compute Engine ( codelab), Confidential VM, container e repository remoti
- Conoscenza di base di Cloud KMS ( codelab)
- Conoscenza di base di service account, federazione delle identità per i carichi di lavoro e condizioni degli attributi.
Cosa imparerai a fare
- Come configurare le risorse cloud necessarie per eseguire Confidential Space
- Come eseguire il workload in una Confidential VM che esegue l'immagine VM Confidential Space
- Come autorizzare l'accesso alle risorse protette in base agli attributi del codice del workload (cosa), all'ambiente Confidential Space (dove) e all'account che esegue il workload (chi).
In questo codelab configurerai uno spazio confidenziale tra Primus e Secundus Bank per determinare i loro clienti comuni senza condividere reciprocamente gli elenchi completi degli account. che include i seguenti passaggi:
- Passaggio 1: configura le risorse cloud richieste per le banche Primus e Secundus. Queste risorse cloud includono bucket di archiviazione cloud, chiavi KMS, service account e pool di identità dei workload per le banche Primus e Secundus. Primus Bank e Secundus Bank archiviano i dati dei clienti nei bucket Cloud Storage e li criptano utilizzando le chiavi Cloud Key Management Service.
- Passaggio 2: crea un service account del workload che verrà utilizzato dalla VM del workload. Secundus Bank, che sarà l'operatore del workload, avvierà la VM del workload. Primus Bank creerebbe il codice del workload.
- Passaggio 3: crea un workload che includa due comandi CLI, uno per conteggiare i clienti della località fornita e un altro per trovare i clienti comuni di Primus e Secundus Bank. Il workload verrà creato da Primus Bank e verrà pacchettizzato come immagine Docker. Questa immagine Docker verrà pubblicata in Artifact Registry.
- Passaggio 4: autorizza un carico di lavoro. Primus Bank utilizzerebbe un pool di identità del workload per autorizzare i workload ad accedere ai dati dei clienti in base agli attributi di chi esegue il workload, a cosa fa il workload e a dove viene eseguito.
- Passaggio 5: quando viene eseguito il carico di lavoro, viene richiesto l'accesso alle risorse cloud dei collaboratori dei dati (Primus Bank e Secundus Bank) offrendo un token del servizio di verifica dell'attestazione con le attestazioni del carico di lavoro e dell'ambiente. Se le rivendicazioni di misurazione del carico di lavoro nel token corrispondono alla condizione dell'attributo nei pool di identità per i carichi di lavoro di Primus Bank e Secundus Bank, viene restituito il token di accesso all'account di servizio che dispone dell'autorizzazione per accedere alle rispettive risorse cloud. Le risorse cloud saranno accessibili solo al carico di lavoro in esecuzione all'interno di Confidential Space.
- Passaggio 5a: esegui il primo workload che conta i clienti di Primus Bank di località specifiche. Per questo workload, Primus Bank sarebbe un collaboratore di dati e autore del workload, che fornirebbe l'elenco dei clienti criptato al workload in esecuzione in Confidential Space. Secundus Bank sarà un operatore del workload ed eseguirà il workload in uno spazio confidenziale.
- Passaggio 5b: esegui il secondo workload che trova i clienti comuni di Primus Bank e Secundus Bank. Per questo carico di lavoro, Primus Bank e Secundus Bank sarebbero entrambi collaboratori dei dati. Fornirebbero gli elenchi di clienti criptati al workload in esecuzione in Confidential Space. Secundus Bank tornerebbe a essere un operatore del workload. Questo workload sarebbe autorizzato anche da Secundus Bank perché deve accedere anche agli elenchi di clienti criptati di Secundus Bank per trovare i clienti comuni. In questo caso, Secundus Bank autorizzerebbe il workload ad accedere ai dati dei clienti in base agli attributi di chi esegue il workload, a cosa fa il workload e a dove viene eseguito, come indicato nel passaggio 4 per Primus Bank.

2. Configurare le risorse cloud
Prima di iniziare
- Clona questo repository utilizzando il comando riportato di seguito per ottenere gli script richiesti utilizzati in questo codelab.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
- Cambia la directory per questo codelab.
cd confidential-space/codelabs/bank_data_analysis_codelab/scripts
- Assicurati di aver impostato le variabili di ambiente del progetto richieste come mostrato di seguito. Per saperne di più sulla creazione di un progetto Google Cloud, consulta questo codelab. Puoi fare riferimento a questo articolo per scoprire come recuperare l'ID progetto e in che modo è diverso dal nome e dal numero del progetto.
export PRIMUS_PROJECT_ID=<GCP project id of Primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus bank>
- Abilita la fatturazione per i tuoi progetti.
- Abilita l'API Confidential Computing e le seguenti API per entrambi i progetti.
gcloud services enable \
cloudapis.googleapis.com \
cloudkms.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudshell.googleapis.com \
container.googleapis.com \
containerregistry.googleapis.com \
iam.googleapis.com \
confidentialcomputing.googleapis.com
- Imposta le variabili per i nomi delle risorse come indicato di seguito utilizzando questo comando. Puoi eseguire l'override dei nomi delle risorse utilizzando queste variabili (ad es.
export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket') - Puoi impostare le seguenti variabili con i nomi delle risorse cloud esistenti nel progetto Primus. Se la variabile è impostata, viene utilizzata la risorsa cloud esistente corrispondente del progetto Primus. Se la variabile non è impostata, il nome della risorsa cloud verrà generato dal nome del progetto e la nuova risorsa cloud verrà creata come parte di quanto segue:
| Il bucket che archivia il file di dati dei clienti di Primus Bank. |
| Il pool di identità del workload (WIP) di Primus Bank che convalida le rivendicazioni. |
| Il fornitore di pool di identità del workload di Primus Bank che include la condizione di autorizzazione da utilizzare per i token firmati dal servizio di verifica dell'attestazione. |
| Il service account di Primus Bank che |
| La chiave KMS utilizzata per criptare i dati archiviati in |
| Il keyring KMS che verrà utilizzato per creare la chiave di crittografia |
| Il repository di artefatti in cui verrà eseguito il push dell'immagine Docker del carico di lavoro. |
- Puoi impostare le seguenti variabili con i nomi delle risorse cloud esistenti nel progetto Secundus. Se la variabile è impostata, viene utilizzata la risorsa cloud esistente corrispondente del progetto Secundus. Se la variabile non è impostata, il nome della risorsa cloud verrà generato dal nome del progetto e la nuova risorsa cloud verrà creata come parte di quanto segue:
| Il bucket che archivia il file di dati dei clienti di Secundus Bank |
| Il pool di identità del workload (WIP) di Secundus Bank che convalida le rivendicazioni. |
| Il fornitore di pool di identità del workload di Secundus Bank che include la condizione di autorizzazione da utilizzare per i token firmati dal servizio di verifica dell'attestazione. |
| Il service account di Secundus Bank che |
| La chiave KMS utilizzata per criptare i dati archiviati in |
| Il keyring KMS utilizzato per creare la chiave di crittografia |
| Il bucket che archivia i risultati del workload. |
| Il nome dell'immagine container del workload. |
| Il tag dell'immagine container del workload. |
| Il service account con l'autorizzazione per accedere alla VM confidenziale che esegue il workload. |
- Come indicato di seguito, in questo codelab vengono utilizzati alcuni artefatti:
primus_customer_list.csv: il file che contiene i dati dei clienti di Primus Bank. Qui trovi il file di esempio utilizzato in questo codelab.secundus_customer_list.csv: il file che contiene i dati dei clienti di Secundus Bank. Qui trovi il file di esempio utilizzato in questo codelab.- Per questi due progetti sono necessarie determinate autorizzazioni:
- Per
$PRIMUS_PROJECT_ID, avrai bisogno di Amministratore Cloud KMS, Amministratore Storage, Amministratore Artifact Registry, Amministratore service account e Amministratore pool Workload Identity IAM. - Per
$SECUNDUS_PROJECT_ID, avrai bisogno di Amministratore Compute, Amministratore Storage, Amministratore service account, Amministratore Cloud KMS, Amministratore pool Workload Identity IAM, Amministratore della sicurezza (facoltativo). - Esegui il seguente script per impostare i nomi delle variabili rimanenti su valori basati sull'ID progetto per i nomi delle risorse.
source config_env.sh
Configura le risorse cloud per Primus Bank
Per Primus Bank sono necessarie le seguenti risorse cloud. Esegui questo script per configurare le risorse per Primus Bank:
- Bucket Cloud Storage (
$PRIMUS_INPUT_STORAGE_BUCKET) per archiviare il file di dati dei clienti criptato di Primus Bank. - Chiave di crittografia (
$PRIMUS_ENC_KEY) e portachiavi ($PRIMUS_ENC_KEYRING) in KMS per criptare il file di dati dei clienti di Primus Bank. - Pool di identità del workload (
$PRIMUS_WORKLOAD_IDENTITY_POOL) per convalidare le rivendicazioni in base alle condizioni degli attributi configurate nel relativo fornitore. - Il service account (
$PRIMUS_SERVICE_ACCOUNT) collegato al pool di identità del workload menzionato sopra ($PRIMUS_WORKLOAD_IDENTITY_POOL) ha accesso alla decriptografia dei dati utilizzando la chiave KMS (utilizzando il ruoloroles/cloudkms.cryptoKeyDecrypter), alla lettura dei dati dal bucket Cloud Storage (utilizzando il ruoloobjectViewer) e al collegamento del service account al pool di identità del workload (utilizzandoroles/iam.workloadIdentityUser).
./setup_primus_bank_resources.sh
Configura le risorse cloud per Secundus Bank
Per Secundus Bank sono necessarie le seguenti risorse cloud. Esegui questo script per configurare le risorse di Secundus Bank. Nell'ambito di questi passaggi, verranno create le risorse menzionate di seguito:
- Bucket Cloud Storage (
$SECUNDUS_INPUT_STORAGE_BUCKET) per archiviare il file di dati dei clienti criptati di Secundus Bank. - Chiave di crittografia (
$SECUNDUS_ENC_KEY) e portachiavi ($SECUNDUS_ENC_KEYRING) in KMS per criptare il file di dati di Secundus Bank. - Pool di identità del workload (
$SECUNDUS_WORKLOAD_IDENTITY_POOL) per convalidare le rivendicazioni in base alle condizioni degli attributi configurate nel relativo fornitore. - Il service account (
$SECUNDUS_SERVICE_ACCOUNT) collegato al pool di identità del workload menzionato sopra ($SECUNDUS_WORKLOAD_IDENTITY_POOL) ha accesso alla decriptografia dei dati utilizzando la chiave KMS (utilizzando il ruoloroles/cloudkms.cryptoKeyDecrypter), alla lettura dei dati dal bucket Cloud Storage (utilizzando il ruoloobjectViewer) e al collegamento del service account al pool di identità del workload (utilizzando il ruoloroles/iam.workloadIdentityUser). - Bucket Cloud Storage (
$SECUNDUS_RESULT_STORAGE_BUCKET) per archiviare il risultato dell'esecuzione del carico di lavoro da parte di Secundus Bank.
./setup_secundus_bank_resources.sh
3. Crea workload
Crea un service account del workload
Ora creerai un service account per il workload con i ruoli e le autorizzazioni richiesti, come indicato di seguito. Esegui il seguente script per creare un service account del workload nel progetto Secundus Bank. La VM che esegue il workload utilizzerebbe questo service account.
Questo service account del workload ($WORKLOAD_SERVICE_ACCOUNT) avrà i seguenti ruoli:
- Concedi il ruolo
confidentialcomputing.workloadUserall'account di servizio del workload . In questo modo, l'account utente potrà generare un token di attestazione. - Concedi il ruolo
logging.logWriterall'autorizzazione dell'account di servizio del workload. Ciò consente all'ambiente Confidential Space di scrivere i log in Cloud Logging oltre che nella console seriale, in modo che i log siano disponibili dopo la terminazione della VM. objectViewerper leggere i dati dal bucket di archiviazione cloud$PRIMUS_INPUT_STORAGE_BUCKET.objectViewerper leggere i dati dal bucket di archiviazione cloud$SECUNDUS_INPUT_STORAGE_BUCKET.objectAdminper scrivere il risultato del workload nel bucket Cloud Storage$SECUNDUS_RESULT_STORAGE_BUCKET.
./create_workload_service_account.sh
Crea workload
Nell'ambito di questo passaggio, creerai un'immagine Docker per il carico di lavoro utilizzato in questo codelab. Il carico di lavoro è una semplice applicazione GoLang che:
- Conta i clienti in una determinata località geografica.
- Trova i clienti comuni di Primus Bank e Secundus Bank dagli elenchi di clienti archiviati nei rispettivi bucket Cloud Storage.
Esegui il seguente script per creare un carico di lavoro in cui vengono eseguiti i seguenti passaggi:
- Crea Artifact Registry (
$PRIMUS_ARTIFACT_REPOSITORY) di proprietà di Primus Bank in cui verrà pubblicato il workload. - Genera il codice e aggiornalo con i nomi delle risorse richieste. Il codice del workload utilizzato in questo codelab è disponibile qui.
- Compila il codice e pacchettizzalo in un'immagine Docker. Il Dockerfile corrispondente è disponibile qui.
- Pubblica l'immagine Docker in Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY) di proprietà di Primus Bank. - Concedi all'account di servizio l'autorizzazione di lettura
$WORKLOAD_SERVICE_ACCOUNTper Artifact Registry ($PRIMUS_ARTIFACT_REGISTRY).
./create_workload.sh
4. Autorizza ed esegui i carichi di lavoro
Autorizza workload
Primus Bank vuole autorizzare i workload ad accedere ai dati dei clienti in base agli attributi delle seguenti risorse:
- Cosa: codice verificato
- Dove: un ambiente sicuro
- Chi: un operatore considerato attendibile
Primus utilizza la federazione delle identità per i carichi di lavoro per applicare un criterio di accesso basato su questi requisiti.
La federazione delle identità per i workload consente di specificare condizioni degli attributi. Queste condizioni limitano le identità che possono autenticarsi con il pool di identità del workload (WIP). Puoi aggiungere il servizio di verifica dell'attestazione al pool di identità del workload come provider del pool di identità del workload per presentare le misurazioni e applicare il criterio.
Il pool di identità del workload è già stato creato in precedenza nell'ambito del passaggio di configurazione delle risorse cloud. Ora Primus Bank creerà un nuovo provider di pool di identità del workload OIDC. Il --attribute-condition specificato autorizza l'accesso al container del carico di lavoro. Richiede:
- Cosa: l'ultima versione di
$WORKLOAD_IMAGE_NAMEcaricata nel repository$PRIMUS_ARTIFACT_REPOSITORY. - Dove: il Trusted Execution Environment di Confidential Space viene eseguito sull'immagine VM di Confidential Space completamente supportata.
- Chi: service account di Secundus Bank
$WORKLOAD_SERVICE_ACCOUNT.
gcloud config set project $PRIMUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $PRIMUS_WIP_PROVIDER \
--location="global" \
--workload-identity-pool="$PRIMUS_WORKLOAD_IDENTITY_POOL" \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject='assertion.sub'" \
--attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
'STABLE' in assertion.submods.confidential_space.support_attributes &&
assertion.submods.container.image_reference == 'us-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
Analogamente al WIP creato per Primus Bank, Secundus Bank vuole autorizzare i carichi di lavoro ad accedere ai dati dei clienti in base a:
- Che cosa: il carico di lavoro.
- Dove: l'ambiente Confidential Space.
- Chi: l'account (
$WORKLOAD_SERVICE_ACCOUNT) che esegue il carico di lavoro.
Primus Bank utilizza l'attestazione image_reference, che include il tag immagine, per determinare se autorizzare l'accesso. Controllano il repository remoto, quindi possono assicurarsi di taggare solo le immagini che non divulgano i loro dati.
Al contrario, Secundus Bank non controlla il repository da cui recupera l'immagine, quindi non può fare questa ipotesi in modo sicuro. ma scelgono di autorizzare l'accesso al workload in base al suo image_digest. A differenza di image_reference, che Primus Bank potrebbe modificare per indirizzare a un'immagine diversa, Primus Bank non potrebbe fare in modo che image_digest faccia riferimento a un'immagine diversa da quella sottoposta ad audit da Secundus Bank nel passaggio precedente.
Prima di creare i fornitori di pool di identità del workload, raccoglieremo image_digest per l'immagine del container del workload, che verrà utilizzata nelle condizioni degli attributi del fornitore.
export WORKLOAD_IMAGE_DIGEST=$(gcloud artifacts docker images describe ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG --format="value(image_summary.digest)" --project ${PRIMUS_PROJECT_ID})
gcloud config set project $SECUNDUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $SECUNDUS_WIP_PROVIDER \
--location="global" \
--workload-identity-pool="$SECUNDUS_WORKLOAD_IDENTITY_POOL" \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject='assertion.sub'" \
--attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
'STABLE' in assertion.submods.confidential_space.support_attributes &&
assertion.submods.container.image_digest == '${WORKLOAD_IMAGE_DIGEST}' &&
assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
Esegui workload
Nell'ambito di questo passaggio, Secundus Bank eseguirà il carico di lavoro su Confidential Space. Questo workload riceverà i token di accesso dal pool di identità del workload di Primus e dal pool di identità del workload di Secundus per leggere e decriptare i dati dei clienti rispettivamente di Primus Bank e Secundus Bank.
Gli argomenti TEE obbligatori vengono passati utilizzando il flag dei metadati. Gli argomenti per il container del workload vengono passati utilizzando la parte "tee-cmd" del flag. Il risultato dell'esecuzione del workload verrà pubblicato in $SECUNDUS_RESULT_STORAGE_BUCKET.
Esegui il primo workload
Nell'ambito della prima esecuzione del workload, il workload conterà i clienti di Primus Bank dalla località fornita negli argomenti del container del workload. Come mostrato di seguito, il primo workload eseguirà il comando "count-location" e il risultato verrà memorizzato in $SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result.
gcloud compute instances create ${WORKLOAD_VM1} \
--project=${SECUNDUS_PROJECT_ID} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"count-location\",\"Seattle\",\"gs://${SECUNDUS_RESULT_STORAGE_BUCKET}/seattle-result\"]""
Visualizza risultati
Nel progetto Secundus, visualizza i risultati del primo workload. Attendi 3-5 minuti affinché il workload completi l'esecuzione e il risultato sia disponibile nel bucket Cloud Storage.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
Il risultato dovrebbe essere 3, in quanto questo è il numero di persone di Seattle elencate nel file primus_customer_list.csv.
Esegui il secondo workload
Nell'ambito della seconda esecuzione del workload, troveremo i clienti comuni di Primus Bank e Secundus Bank. Come mostrato di seguito, il secondo workload eseguirà il comando "list-common-customers" e il risultato verrà memorizzato in $SECUNDUS_RESULT_STORAGE_BUCKET/list-common-count.
gcloud compute instances create ${WORKLOAD_VM2} \
--project=${SECUNDUS_PROJECT_ID} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""
Visualizza risultati
Nel progetto Secundus, visualizza i risultati del secondo workload. Attendi 3-5 minuti affinché il workload completi l'esecuzione e il risultato sia disponibile nel bucket Cloud Storage.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
Il risultato dovrebbe essere il seguente elenco, in quanto si tratta dei clienti comuni di Primus e Secundus Bank.
Output:
Eric
Clinton
Ashley
Cooper
Esegui carico di lavoro non autorizzato
Il contratto di Primus Bank che consente a Secundus Bank di accedere ai suoi dati scade. Pertanto, Primus Bank aggiorna la condizione dell'attributo per consentire le VM con il service account del suo nuovo partner, Tertius Bank.
Primus Bank modifica il provider pool Workload Identity
In $PRIMUS_PROJECT_ID, aggiorna la condizione dell'attributo per il provider di identità del verificatore dell'attestazione per autorizzare i workload in una nuova posizione.
- Imposta il progetto su $PRIMUS_PROJECT_ID.
gcloud config set project $PRIMUS_PROJECT_ID
- Esporta l'ID progetto GCP di Tertius Bank utilizzando il comando riportato di seguito. In seguito, Primus Bank utilizzerà questo valore per aggiornare la condizione dell'attributo del provider del pool di identità del workload. Primus Bank non interromperà l'autorizzazione dei service account del workload di Secundus Bank. Ora consentirà gli account di servizio del carico di lavoro di Tertius Bank.
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
- Aggiorna il provider OIDC nel pool di identità del workload. Qui
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accountsviene modificato in'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts.. Invece di autorizzare il service account del carico di lavoro di Secundus Bank, ora verrà autorizzato il service account del carico di lavoro di Tertius Bank.
gcloud iam workload-identity-pools providers update-oidc $PRIMUS_WIP_PROVIDER \
--location="global" \
--workload-identity-pool="$PRIMUS_WORKLOAD_IDENTITY_POOL" \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject='assertion.sub'" \
--attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
'STABLE' in assertion.submods.confidential_space.support_attributes &&
assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
Esegui nuovamente il workload
Quando Secundus Bank tenta di eseguire il workload originale, l'operazione non va a buon fine. Per visualizzare l'errore, elimina il file dei risultati originale e l'istanza VM, quindi prova a eseguire di nuovo il workload.
Elimina il file dei risultati e l'istanza VM esistenti
- Imposta il progetto sul progetto
$SECUNDUS_PROJECT_ID.
gcloud config set project $SECUNDUS_PROJECT_ID
- Elimina il file dei risultati.
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
- Elimina l'istanza Confidential VM.
gcloud compute instances delete ${WORKLOAD_VM2} --zone=${SECUNDUS_PROJECT_ZONE}
Esegui il carico di lavoro non autorizzato:
gcloud compute instances create ${WORKLOAD_VM2} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE}\
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""
Visualizza errore
Al posto dei risultati del workload, viene visualizzato un errore (The given credential is rejected by the attribute condition).
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
Analogamente, se Primus Bank modifica segretamente il workload per inviare l'intero elenco di clienti di Secundus Bank a un bucket di proprietà di Primus Bank, il tentativo non andrà a buon fine perché il digest del workload dannoso sarà diverso dal digest dell'immagine autorizzato nel pool di identità per i workload di Secundus Bank.
5. Esegui la pulizia
Qui trovi lo script che può essere utilizzato per pulire le risorse che abbiamo creato nell'ambito di questo codelab. Nell'ambito di questa pulizia, verranno eliminate le seguenti risorse:
- Bucket Cloud Storage di input di Primus Bank (
$PRIMUS_INPUT_STORAGE_BUCKET). - Un service account di Primus Bank (
$PRIMUS_SERVICE_ACCOUNT). - Un registro degli artefatti della Primus Bank che contiene le firme delle immagini (
$PRIMUS_COSIGN_REPOSITORY). - Un pool di identità del workload di Primus Bank(
$PRIMUS_WORKLOAD_IDENTITY_POOL). - Un service account del workload della banca Secundus (
$WORKLOAD_SERVICE_ACCOUNT). - Bucket Cloud Storage di input della banca Secundus (
$SECUNDUS_INPUT_STORAGE_BUCKET). - Un service account della Secundus Bank (
$SECUNDUS_SERVICE_ACCOUNT). - Un registro degli artefatti di Secundus Bank che contiene le firme delle immagini (
$SECUNDUS_COSIGN_REPOSITORY). - Un pool di identità del workload di Secundus Bank(
$SECUNDUS_WORKLOAD_IDENTITY_POOL). - Un service account del workload di Secundus Bank (
$WORKLOAD_SERVICE_ACCOUNT). - Istanze di calcolo del workload.
- Il bucket di archiviazione dei risultati di Secundus Bank (
$SECUNDUS_RESULT_STORAGE_BUCKET). - Un repository di artefatti di Primus Bank (
$PRIMUS_ARTIFACT_REPOSITORY).
./cleanup.sh
Se hai terminato l'esplorazione, valuta la possibilità di eliminare il progetto.
- Vai alla console Cloud Platform.
- Seleziona il progetto che vuoi chiudere, quindi fai clic su "Elimina" in alto: il progetto viene pianificato per l'eliminazione.
Congratulazioni
Congratulazioni, hai completato il codelab.
Hai imparato a proteggere i dati condivisi mantenendone la riservatezza utilizzando Confidential Space.
Passaggi successivi
Dai un'occhiata ad alcuni di questi codelab simili…
- Codelab sull'immagine container firmata
- Come eseguire transazioni di asset digitali con il calcolo a parti multiple e gli spazi confidenziali
- Analizzare i dati riservati con gli spazi confidenziali
Further reading
- Ti senti isolato? Confidential Computing in soccorso
- Confidential Computing su GCP
- Confidential Space: il futuro della collaborazione incentrata sulla tutela della privacy
- In che modo Google e Intel rendono più sicuro Confidential Computing
- Privacy vs. Progress - Advancing Security with Google Cloud Confidential Computing