Informazioni su questo codelab
1. Panoramica
Confidential Space offre collaborazione e condivisione di dati tra più parti in modo sicuro, consentendo al contempo 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, mantenendone 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, mantenendone il pieno controllo.
Che cosa ti serve
- Un progetto Google Cloud
- Un browser, ad esempio Chrome o Firefox
- Conoscenze di base di Google Compute Engine ( codelab), Confidential VM, Container e repository remoti
- Conoscenze di base di Cloud KMS ( codelab)
- Conoscenze di base su account di servizio, Federazione delle identità per i carichi di lavoro e condizioni degli attributi.
Cosa imparerai a fare
- Come configurare le risorse Cloud necessarie per l'esecuzione di Spazio riservato
- Come eseguire il workload in una VM Confidential 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 riservato tra la banca Primus e la banca Secundus per determinare i clienti comuni senza condividere tra loro elenchi completi degli account. che prevede i seguenti passaggi:
- Passaggio 1: configura le risorse cloud necessarie per le banche Primus e Secundus. Queste risorse cloud includono bucket di archiviazione cloud, chiavi KMS, pool di Workload Identity e account di servizio 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 di Cloud Key Management Service.
- Passaggio 2: crea un account di servizio per il carico di lavoro che verrà utilizzato dalla VM del carico di lavoro. La banca Secundus, che sarà l'operatore del carico di lavoro, avvierà la VM del carico di lavoro. Primus Bank sarà l'autore del codice del workload.
- Passaggio 3: crea un carico di lavoro che includa due comandi CLI, uno per conteggiare i clienti della località indicata e un altro per trovare i clienti comuni di Primus e Secundus Bank. Il carico di lavoro 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 utilizzerà un pool di identità per i carichi di lavoro per autorizzare i carichi di lavoro ad accedere ai dati dei clienti in base agli attributi di chi esegue il carico di lavoro, a cosa serve e dove viene eseguito.
- Passaggio 5: quando il carico di lavoro viene eseguito, richiede l'accesso alle risorse cloud dei collaboratori dei dati (Primus Bank e Secundus Bank) offrendo un token del servizio di verifica dell'attestazione con claim di carico di lavoro e 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 delle banche Primus e Secundus, viene restituito il token di accesso all'account di servizio che ha l'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 5(a): esegui il primo carico di lavoro che conteggia i clienti della Primus Bank in località specifiche. Per questo carico di lavoro, Primus Bank sarebbe un collaboratore dei dati e autore del carico di lavoro, che fornirà l'elenco dei clienti criptati al carico di lavoro in esecuzione in Confidential Space. Secundus Bank sarà un operatore di carichi di lavoro ed eseguirà il carico di lavoro in uno spazio riservato.
- Passaggio 5(b): esegui il secondo carico di lavoro che trova i clienti comuni delle banche Primus e Secundus. Per questo carico di lavoro, Primus Bank e Secundus Bank sono entrambi collaboratori di dati. Forniranno gli elenchi dei clienti criptati al carico di lavoro in esecuzione in Spazio riservato. La banca Secundus sarà di nuovo un operatore di carichi di lavoro. Questo workload verrebbe autorizzato anche dalla Banca Secundus perché deve accedere anche agli elenchi dei clienti criptati della Banca Secundus per trovare i clienti comuni. In questo caso, la Banca Secundus autorizzerà il carico di lavoro ad accedere ai dati dei propri clienti in base agli attributi di chi esegue il carico di lavoro, a cosa serve e dove viene eseguito, come indicato nel passaggio 4 per la Banca Primus.
2. Configurare le risorse cloud
Prima di iniziare
- Clona questo repository utilizzando il comando seguente per ottenere gli script richiesti utilizzati nell'ambito di questo codelab.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
- Modifica 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. Consulta questa pagina per informazioni dettagliate su come recuperare l'ID progetto e su come si differenzia 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>
- Attiva la fatturazione per i tuoi progetti.
- Abilita l'API Confidential Computing e le API seguenti 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, verrà utilizzata la risorsa cloud esistente corrispondente del progetto Primus. Se la variabile non è impostata, il nome della risorsa cloud viene generato da project-name e la nuova risorsa cloud viene creata come parte di quanto segue:
| Il bucket che memorizza il file dei dati dei clienti di Primus Bank. |
| Il pool di identità del workload (WIP) di Primus Bank che convalida i claim. |
| Il fornitore del 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. |
| L'account di servizio di Primus Bank utilizzato da |
| La chiave KMS utilizzata per criptare i dati archiviati in |
| Il portachiavi KMS che verrà utilizzato per creare la chiave di crittografia |
| Il repository di artefatti in cui verrà inviata l'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, verrà utilizzata la risorsa cloud esistente corrispondente del progetto Secundus. Se la variabile non è impostata, il nome della risorsa cloud verrà generato da project-name e la nuova risorsa cloud verrà creata come parte di quanto segue:
| Il bucket che archivia il file di dati dei clienti della Banca Secundus |
| Il pool di identità del workload (WIP) della Banca Secundus che convalida le rivendicazioni. |
| Il fornitore del 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. |
| L'account di servizio della Banca Secundus utilizzato da |
| La chiave KMS utilizzata per criptare i dati archiviati in |
| Il portachiavi KMS utilizzato per creare la chiave di crittografia |
| Il bucket in cui vengono archiviati i risultati del carico di lavoro. |
| Il nome dell'immagine container del workload. |
| Il tag dell'immagine container del carico di lavoro. |
| L'account di servizio che ha l'autorizzazione per accedere alla VM con accesso riservato che esegue il workload. |
- In questo codelab vengono utilizzati alcuni elementi, come indicato di seguito:
primus_customer_list.csv
: il file che contiene i dati dei clienti di Primus Bank. Qui puoi trovare il file di esempio utilizzato in questo codelab.secundus_customer_list.csv
: il file che contiene i dati dei clienti della Banca Secundus. Qui puoi trovare il file di esempio utilizzato in questo codelab.- Per questi due progetti sono necessarie autorizzazioni specifiche:
- Per
$PRIMUS_PROJECT_ID
, sono necessari i ruoli Amministratore Cloud KMS, Amministratore archiviazione, Amministratore Registry degli elementi, Amministratore account di servizio, Amministratore pool Workload Identity IAM. - Per
$SECUNDUS_PROJECT_ID
, sono necessari i ruoli Amministratore di Compute, Amministratore di archiviazione, Amministratore account di servizio, 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
Configurare le risorse cloud per Primus Bank
Le seguenti risorse cloud sono obbligatorie per Primus Bank. Esegui questo script per configurare le risorse per Primus Bank:
- Bucket Cloud Storage (
$PRIMUS_INPUT_STORAGE_BUCKET
) per archiviare il file dei dati dei clienti criptati di Primus Bank. - Chiave di crittografia (
$PRIMUS_ENC_KEY
) e portachiavi ($PRIMUS_ENC_KEYRING
) in KMS per criptare il file dei dati dei clienti della Primus Bank. - Pool di identità del workload (
$PRIMUS_WORKLOAD_IDENTITY_POOL
) per convalidare i claim in base alle condizioni degli attributi configurate nel relativo provider. - L'account di servizio (
$PRIMUS_SERVICE_ACCOUNT
) associato al pool di identità di lavoro ($PRIMUS_WORKLOAD_IDENTITY_POOL
) sopra indicato ha accesso alla decrittografia dei dati utilizzando la chiave KMS (utilizzando il ruoloroles/cloudkms.cryptoKeyDecrypter
), alla lettura dei dati dal bucket di archiviazione sul cloud (utilizzando il ruoloobjectViewer
) e alla connessione dell'account di servizio al pool di identità di lavoro (utilizzandoroles/iam.workloadIdentityUser
).
./setup_primus_bank_resources.sh
Configurare le risorse cloud per la Banca Secundus
Per la Banca Secundus sono necessarie le seguenti risorse cloud. Esegui questo script per configurare le risorse della Banca Secundus. Nell'ambito di questi passaggi verranno create le risorse indicate di seguito:
- Bucket Cloud Storage (
$SECUNDUS_INPUT_STORAGE_BUCKET
) per archiviare il file dei dati dei clienti criptati della Banca Secundus. - Chiave di crittografia (
$SECUNDUS_ENC_KEY
) e portachiavi ($SECUNDUS_ENC_KEYRING
) in KMS per criptare il file di dati della Banca Secundus. - Pool di identità del workload (
$SECUNDUS_WORKLOAD_IDENTITY_POOL
) per convalidare i claim in base alle condizioni degli attributi configurate nel relativo provider. - L'account di servizio (
$SECUNDUS_SERVICE_ACCOUNT
) associato al pool di identità di carico di lavoro ($SECUNDUS_WORKLOAD_IDENTITY_POOL
) sopra indicato ha accesso alla decrittografia dei dati utilizzando la chiave KMS (utilizzando il ruoloroles/cloudkms.cryptoKeyDecrypter
), alla lettura dei dati dal bucket di archiviazione sul cloud (utilizzando il ruoloobjectViewer
) e alla connessione dell'account di servizio al pool di identità di carico di lavoro (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 account di servizio per il workload
Ora crea un account di servizio per il carico di lavoro con i ruoli e le autorizzazioni richiesti, come indicato di seguito. Esegui il seguente script per creare un account di servizio per il carico di lavoro nel progetto della Banca Secundus. La VM che esegue il carico di lavoro utilizzerà questo account di servizio.
Questo account di servizio del carico di lavoro ($WORKLOAD_SERVICE_ACCOUNT
) avrà i seguenti ruoli:
- Concedi il ruolo
confidentialcomputing.workloadUser
all'account di servizio del carico di lavoro . In questo modo l'account utente potrà generare un token di attestazione. - Concedi il ruolo
logging.logWriter
all'autorizzazione dell'account di servizio del carico di lavoro. In questo modo, l'ambiente dello spazio riservato può scrivere i log in Cloud Logging, oltre che nella console seriale, in modo che siano disponibili dopo l'interruzione della VM. objectViewer
per leggere i dati dal bucket Cloud Storage$PRIMUS_INPUT_STORAGE_BUCKET
.objectViewer
per leggere i dati dal bucket Cloud Storage$SECUNDUS_INPUT_STORAGE_BUCKET
.objectAdmin
per scrivere il risultato del carico di lavoro nel bucket Cloud Storage$SECUNDUS_RESULT_STORAGE_BUCKET
.
./create_workload_service_account.sh
Crea workload
In 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 località geografica specificata.
- Trova i clienti comuni di Primus 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 impacchettalo 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
$WORKLOAD_SERVICE_ACCOUNT
l'autorizzazione di lettura per Artifact Registry ($PRIMUS_ARTIFACT_REGISTRY
).
./create_workload.sh
4. Autorizza ed esegui i carichi di lavoro
Autorizza il workload
Primus Bank vuole autorizzare i carichi di lavoro ad accedere ai dati dei propri clienti in base agli attributi delle seguenti risorse:
- Che cosa: codice verificato
- Dove: un ambiente sicuro
- Chi: un operatore attendibile
Primus utilizza la federazione delle identità per i carichi di lavoro per applicare un criterio di accesso in base a questi requisiti.
La federazione delle identità per i carichi di lavoro ti consente di specificare le 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 WIP 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 durante il passaggio di configurazione delle risorse cloud. Ora Primus Bank creerà un nuovo provider del pool di identità del workload OIDC. Il --attribute-condition
specificato autorizza l'accesso al contenitore del carico di lavoro. Richiede:
- Che cosa:
$WORKLOAD_IMAGE_NAME
più recente caricato nel repository$PRIMUS_ARTIFACT_REPOSITORY
. - Dove: l'ambiente di esecuzione attendibile Confidential Space è in esecuzione sull'immagine VM Confidential Space completamente supportata.
- Chi: service account
$WORKLOAD_SERVICE_ACCOUNT
della Banca Secundus.
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 propri clienti in base a:
- Che cosa: il carico di lavoro.
- Dove: l'ambiente Confidential Space.
- Chi: l'account (
$WORKLOAD_SERVICE_ACCOUNT
) su cui viene eseguito il carico di lavoro.
Primus Bank utilizza il claim image_reference
, che include il tag immagine, per determinare se deve autorizzare l'accesso. Controllano il repository remoto, quindi possono assicurarsi di taggare solo le immagini che non divulgano i loro dati.
Al contrario, la Banca Secundus non controlla il repository da cui ottiene l'immagine, pertanto non può fare questa supposizione in tutta sicurezza. Sceglie invece di autorizzare l'accesso al workload in base al relativo image_digest
. A differenza di image_reference
, che Primus Bank potrebbe modificare in modo che rimandi a un'immagine diversa, Primus Bank non può fare in modo che image_digest
rimandi a un'immagine diversa da quella sottoposta a controllo da parte di Secundus Bank nel passaggio precedente.
Prima di creare i fornitori di pool di identità del workload, raccogliamo il image_digest
per l'immagine del contenitore del workload che verrà utilizzato 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 in Spazio riservato. Questo carico di lavoro riceverà i token di accesso dal pool di identità per i carichi di lavoro di Primus e dal pool di identità per i carichi di lavoro 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 contenitore 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 carico di lavoro
Nell'ambito della prima esecuzione, il carico di lavoro conteggia i clienti di Primus Bank dalla posizione fornita negli argomenti del contenitore del carico di lavoro. Come mostrato di seguito, il primo carico di lavoro 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 carico di lavoro. Attendi 3-5 minuti affinché il carico di lavoro completi l'esecuzione e il risultato sia disponibile nel bucket di Cloud Storage.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
Il risultato dovrebbe essere 3
, poiché questo è il numero di persone di Seattle elencate nel file primus_customer_list.csv
.
Esegui il secondo carico di lavoro
Nell'ambito dell'esecuzione del secondo carico di lavoro, troveremo i clienti comuni di Primus Bank e Secundus Bank. Come mostrato di seguito, il secondo carico di lavoro 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 carico di lavoro. Attendi 3-5 minuti affinché il carico di lavoro completi l'esecuzione e il risultato sia disponibile nel bucket di 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 della Banca Primus che consente alla Banca Secundus di accedere ai suoi dati scade. Di conseguenza, Primus Bank aggiorna la condizione dell'attributo per consentire le VM con l'account di servizio del nuovo partner, Tertius Bank.
Primus Bank modifica il provider del pool di identità per i carichi di lavoro
In $PRIMUS_PROJECT_ID
, aggiorna la condizione dell'attributo per il provider di identità Attestation Verifier in modo da 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 Google Cloud di Tertius Bank utilizzando il comando seguente. In seguito, Primus Bank lo utilizzerà per aggiornare la condizione dell'attributo del provider del pool di identità di lavoro. La banca Primus non smetterà di autorizzare gli account di servizio del workload della banca Secundus. Ora saranno consentiti gli account di servizio del carico di lavoro della Tertius Bank.
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
- Aggiorna il provider OIDC nel pool di identità del carico di lavoro. Qui
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts
viene modificato in'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts.
. Anziché autorizzare l'account di servizio del carico di lavoro di Secundus Bank, ora verrà autorizzato l'account di servizio 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 carico di lavoro
Quando la Banca Secundus tenta di eseguire il carico di lavoro originale, l'operazione non va a buon fine. Per visualizzare l'errore, elimina il file dei risultati originale e l'istanza VM, quindi riprova a eseguire il carico di lavoro.
Elimina il file dei risultati esistente e l'istanza VM
- 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
Invece dei risultati del carico di lavoro, viene visualizzato un errore (The given credential is rejected by the attribute condition
).
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
In modo simile, se la banca Primus modifica segretamente il carico di lavoro per inviare l'intero elenco dei clienti della banca Secundus a un bucket di sua proprietà, il tentativo non andrà a buon fine perché il digest del carico di lavoro dannoso sarà diverso dal digest dell'immagine autorizzato nel pool di identità per i workload della banca Secundus.
5. Esegui la pulizia
Qui è riportato lo script che può essere utilizzato per ripulire le risorse che abbiamo creato nell'ambito di questo codelab. Nell'ambito di questa operazione di pulizia, verranno eliminate le seguenti risorse:
- Bucket Cloud Storage di input della Banca Primus (
$PRIMUS_INPUT_STORAGE_BUCKET)
. - Un account di servizio della Primus Bank (
$PRIMUS_SERVICE_ACCOUNT
). - Un registry di elementi della Primus Bank che contiene le firme delle immagini (
$PRIMUS_COSIGN_REPOSITORY
). - Un pool di identità del workload della Primus Bank(
$PRIMUS_WORKLOAD_IDENTITY_POOL
). - Un account di servizio per i carichi di lavoro della Banca Secundus (
$WORKLOAD_SERVICE_ACCOUNT
). - Inserisci il bucket di archiviazione sul cloud della Banca Secundus (
$SECUNDUS_INPUT_STORAGE_BUCKET)
. - Un account di servizio della Banca Secundus (
$SECUNDUS_SERVICE_ACCOUNT
). - Un registry di elementi della Banca Secundus che contiene le firme delle immagini (
$SECUNDUS_COSIGN_REPOSITORY
). - Un pool di identità del workload di Secundus Bank(
$SECUNDUS_WORKLOAD_IDENTITY_POOL
). - Un account di servizio del workload della Banca Secundus (
$WORKLOAD_SERVICE_ACCOUNT
). - Istanze di calcolo del workload.
- Il bucket di archiviazione dei risultati della Banca Secundus (
$SECUNDUS_RESULT_STORAGE_BUCKET
). - Un repository di elementi di Primus Bank (
$PRIMUS_ARTIFACT_REPOSITORY
).
./cleanup.sh
Se hai finito di esplorare, valuta la possibilità di eliminare il progetto.
- Vai alla console della piattaforma Cloud.
- Seleziona il progetto che vuoi arrestare e fai clic su "Elimina" in alto per pianificarne l'eliminazione.
Congratulazioni
Complimenti, 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 riservati
- Analizzare i dati riservati con gli spazi riservati
Letture aggiuntive
- Ti senti isolato? Confidential Computing accorre in soccorso
- Confidential Computing su Google Cloud
- Confidential Space: il futuro della collaborazione incentrata sulla tutela della privacy
- In che modo Google e Intel rendono più sicuro il Confidential Computing
- Privacy e progresso: migliorare la sicurezza con il Confidential Computing di Google Cloud