I collaboratori dei dati devono configurare le seguenti risorse per consentire l'accesso ai dati riservati da parte di un workload:
Dati criptati, archiviati in Google Cloud.
Un pool di identità del workload (WIP) per autorizzare il workload. Dopo che un workload è stato autorizzato da un WIP, può accedere ai dati riservati dei collaboratori e utilizzarli.
Inoltre, i collaboratori dei dati devono scegliere dove archiviare i risultati del workload di Confidential Space e se questi risultati sono univoci per ogni collaboratore o condivisi. Ad esempio, puoi scegliere di inviare lo stesso risultato a più bucket Cloud Storage appartenenti a ciascun collaboratore ai dati.
Archivia i dati criptati
Puoi utilizzare qualsiasi servizio Google Cloud che archivia i dati per ospitare i tuoi dati riservati. Ad esempio, puoi utilizzare uno dei seguenti servizi:
Assicurati che questi dati siano criptati at-rest, utilizzando le funzionalità integrate o con uno strumento come Cloud Key Management Service (Cloud KMS).
Autorizza il workload con un WIP
Un WIP è il meccanismo utilizzato da Confidential Space per consentire a un workload esterno di accedere e utilizzare i tuoi dati riservati come identità federata. Un'identità federata è un'entità esterna che viene trattata come se fosse un'entità all'interno del tuo progetto, consentendoti di concederle ruoli IAM per dare accesso a risorse specifiche o di simulare l'identità dei service account per fare lo stesso.
In qualità di collaboratore dei dati, configuri un provider all'interno di un WIP che imposta le regole per le entità che si autenticano come identità federata. Per Confidential Space, devi definire quanto segue in un provider:
Un servizio di attestazione: questo servizio verifica che il workload sia un'istanza Confidential VM e, infine, restituisce un token di attestazione OpenID Connect (OIDC) al provider WIP. L'operatore del workload imposta il servizio di attestazione utilizzato, che deve corrispondere al servizio di attestazione aggiunto al provider WIP per concedere l'accesso.
Mappature degli attributi: attributi nei token di accesso di Security Token Service mappati alle asserzioni effettuate dall'entità di autenticazione, in questo caso l'istanza VM che esegue il workload. Le asserzioni vengono effettuate dall'istanza VM stessa, dall'immagine Confidential Space e dal container del workload e vengono passate al provider WIP dal workload. Questi attributi vengono utilizzati per elementi come le tracce di audit in Cloud Logging e per concedere ruoli tramite IAM in base alle asserzioni dell'entità di autenticazione, come i digest dei container delle immagini dei workload. Scopri di più sulle mappature degli attributi.
Una policy di attestazione: una serie di condizioni che le entità di autenticazione devono superare per ottenere l'accesso, in base alle asserzioni che fanno.
Quando un workload viene avviato, l'Avvio applicazioni di Confidential Space invia il report di attestazione a un servizio di attestazione definito dall'operatore del workload, che verifica l'istanza Confidential VM e restituisce un token di attestazione OIDC. Questo token dura un'ora e viene aggiornato automaticamente.
Il token di attestazione viene quindi passato al provider WIP dal workload e il provider lo utilizza per verificare che le asserzioni superino la policy di attestazione definita nel provider. In caso affermativo, il workload può accedere alle risorse riservate.
Accesso al workload esterno
Prima di configurare un provider e un pool di identità per i workload, devi scegliere in che modo il workload accederà alle tue risorse: accesso diretto alle risorse o simulazione dell'identità dei account di servizio.
Accesso diretto alle risorse
Per i workload, consigliamo il metodo di accesso diretto alle risorse.
Questo metodo prevede la configurazione di un'identità federata in un provider WIP collegato alle asserzioni di un'entità di autenticazione. In questo modo, un workload può essere autorizzato ad accedere alle risorse direttamente tramite le associazioni IAM, in base ad attributi come il digest dell'immagine container del workload.
L'accesso diretto alle risorse presenta i seguenti vantaggi:
La configurazione di un ambiente Confidential Space richiede meno passaggi, poiché i collaboratori dei dati non devono configurare service account per consentire la simulazione dell'identità da parte di un service account del workload.
Il workload può accedere solo a risorse specifiche, come stabilito da IAM. Questo metodo è più sicuro rispetto alla simulazione dell'identità dei account di servizio, in cui i service account con autorizzazioni eccessive o i diritti di simulazione dell'identità potrebbero fornire a un malintenzionato un accesso maggiore del previsto.
Ogni accesso alle risorse viene registrato con l'identità federata di un'istanza VM del workload, anziché con l'identità di un account di servizio account che potrebbe essere condiviso da più workload. L'identità di un'istanza VM del workload può includere dettagli come il digest dell'immagine di un container, il numero di progetto da cui opera il workload e l'ID dell'istanza VM che esegue il workload, fornendo una traccia di audit più dettagliata.
Non è necessario mappare la proprietà dell'istanza VM
selfLinkall'attributogoogle.subjectin un provider WIP. I valoriselfLinkmolto lunghi possono superare il limite di 127 byte di questo attributo, causando l'errore di autenticazione del provider WIP.
Simulazione dell'identità dei service account
Il metodo di simulazione dell'identità dei account di servizio prevede che ogni collaboratore ai dati configuri un account di servizio per decriptare i propri dati privati e poi lo colleghi al proprio WIP. Inoltre, specificano il account di servizio del workload nel provider WIP, consentendo al account di servizio del workload di simulare l'identità dei service account dei collaboratori ai dati in modo da poter recuperare e utilizzare i loro dati riservati.
La simulazione dell'identità dei service account deve essere utilizzata solo nei seguenti scenari:
Quando devi utilizzare le firme delle immagini come credenziali di autenticazione, poiché la sintassi utilizzata dalle firme non funziona con le mappature degli attributi.
Quando accedi ad API che non supportano le identità federate.
Il metodo di simulazione dell'identità dei account di servizio potrebbe non riuscire ad autenticarsi con un provider WIP se un'istanza VM ha una proprietà selfLink molto lunga. Questo perché l'attestazione sub nel token di attestazione, che è impostata sul valore selfLink, è mappata nel provider WIP all'attributo google.subject, che ha un limite di 127 byte.
Per i valori selfLink dell'istanza VM che superano i 127 byte, devi rinominare le istanze VM per abbreviare selfLink o utilizzare il metodo di accesso diretto alle risorse.
Configura un WIP e un provider
I passaggi per la configurazione di un provider cambiano a seconda che tu utilizzi l'accesso diretto alle risorse o la simulazione dell'identità dei account di servizio.
Accesso diretto alle risorse
Il metodo di accesso diretto alle risorse prevede la configurazione di un WIP e di un provider, quindi la configurazione dei ruoli IAM in base a un digest dell'immagine container del workload specifico.
Configura un WIP e un provider
Per configurare un WIP e un provider, completa le seguenti istruzioni:
Crea il WIP:
gcloud iam workload-identity-pools create DATA_COLLABORATOR_POOL_NAME \ --location=globalCrea un provider OIDC nel 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"Questo esempio utilizza i seguenti valori:
Un
issuer-uriche corrisponde al servizio di attestazione che stai utilizzando:Google Cloud Attestation:
https://confidentialcomputing.googleapis.comIntel Trust Authority:
https://portal.trustauthority.intel.com
allowed-audiencesdihttps://sts.googleapis.com. Si tratta del Security Token Service di Google, che scambia le credenziali con i token di accesso.Un
attribute-mappingdigoogle.subject, con il seguente valore:\"gcpcs::\"+assertion.submods.container.image_digest+\"::\"+assertion.submods.gce.project_number+\"::\"+assertion.submods.gce.instance_id,attribute.image_digest=assertion.submods.container.image_digestQuesto valore viene creato utilizzando il Common Expression Language (CEL). I seguenti valori vengono assegnati all'attributo
gcpcse vengono visualizzati in Cloud Logging ogni volta che il workload accede alle risorse:assertion.submods.container.image_digest: il digest dell'immagine container del workload.assertion.submods.gce.project_number: il numero di progetto dell'istanza VM.assertion.submods.gce.instance_id: l'ID dell'istanza VM.
Inoltre,
attribute.image_digestè impostato suassertion.submods.container.image_digest, il digest dell'immagine container del workload. Questo attributo è mappato in modo da poter concedere i ruoli IAM dell'identità federata in base a un digest dell'immagine specifico.Puoi mappare qualsiasi asserzione del workload disponibile, purché la lunghezza totale del valore
google.subjectsia inferiore a 127 byte.I seguenti
attribute-conditions, che formano una policy di attestazione. Se queste condizioni corrispondono alle asserzioni del workload, quest'ultimo è autorizzato ad accedere alle risorse riservate come identità federata:assertion.swname == 'CONFIDENTIAL_SPACE': verifica che Confidential Space sia il software in esecuzione sulla VM, con tutte le sue garanzie di sicurezza integrate.'STABLE' in assertion.submods.confidential_space.support_attributes: verifica che venga utilizzata l'immagine Confidential Space di produzione e che abbia l'STABLEattributo di supporto.
Per altre condizioni degli attributi che puoi utilizzare, consulta Crea una policy di attestazione.
Concedi i ruoli IAM dell'identità federata
Dopo aver creato un provider WIP, puoi concedere all'identità federata un ruolo IAM in base alla corrispondenza del digest del container dell'immagine del workload dell'identità con un valore previsto.
L'esempio seguente mostra come concedere a un'identità federata la possibilità di decriptare una chiave Cloud Key Management Service specifica:
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
Simulazione dell'identità dei service account
Il metodo di simulazione dell'identità dei account di servizio prevede quanto segue:
Creare service account in ciascuno dei progetti dei collaboratori ai dati e concedere loro l'autorizzazione per decriptare i dati riservati.
Creazione di WIP in ciascuno dei progetti dei collaboratori ai dati, quindi collegamento del account di servizio appena creato di ciascun progetto al relativo WIP.
Creazione di provider WIP in ogni WIP, che specificano il service account del workload come account autorizzato a simulare l'identità dei service account dei collaboratori ai dati.
Configura i service account per decriptare i dati riservati
Crea i service account nei progetti dei collaboratori ai dati:
gcloud iam service-accounts create DATA_COLLABORATOR_SERVICE_ACCOUNT_NAMEConcedi ai service account le autorizzazioni necessarie per decriptare i dati riservati. Ad esempio, potresti criptare i file riservati in Cloud Storage con Cloud KMS, quindi devi concedere al account di servizio l'autorizzazione per decriptare i dati:
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
Configura un WIP e un provider
Per configurare un WIP e un provider, completa le seguenti istruzioni in ogni progetto di collaboratore ai dati:
Crea il WIP:
gcloud iam workload-identity-pools create DATA_COLLABORATOR_POOL_NAME \ --location=globalCollega il account di servizio di cui verrà simulata l'identità al WIP, con il ruolo
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.workloadIdentityUserCrea un provider OIDC nel WIP e definisci il service account del workload al suo interno in modo che possa impersonare il service account del collaboratore ai dati:
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"Questo esempio utilizza i seguenti valori:
Un
issuer-uridihttps://confidentialcomputing.googleapis.com/, il che significa che Google Cloud Attestation viene utilizzato come servizio di attestazione.allowed-audiencesdihttps://sts.googleapis.com. Si tratta del Security Token Service di Google, che scambia le credenziali con i token di accesso.Un
attribute-mappingdigoogle.subject, con il valoreassertion.sub. Si tratta diselfLinkdell'istanza VM, come definito nella rivendicazionesubnel token di attestazione.L'istanza VM
selfLinkviene visualizzata in Cloud Logging ogni volta che il workload accede alle risorse.I seguenti
attribute-conditions, che formano una policy di attestazione. Se queste condizioni corrispondono alle asserzioni del workload, quest'ultimo è autorizzato ad accedere alle risorse come identità federata:assertion.submods.container.image_digest == 'WORKLOAD_CONTAINER_IMAGE_DIGEST': verifica che il digest dell'immagine container del workload corrisponda al valore previsto.'WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts: verifica che il account di servizio collegato al workload corrisponda al account di servizio previsto, quindi lo utilizza per simulare l'identità del account di servizio del collaboratore ai dati.assertion.swname == 'CONFIDENTIAL_SPACE': verifica che Confidential Space sia il software in esecuzione sulla VM, con tutte le sue garanzie di sicurezza integrate.'STABLE' in assertion.submods.confidential_space.support_attributes: verifica che venga utilizzata l'immagine Confidential Space di produzione e che abbia l'STABLEattributo di supporto.
Per altre condizioni degli attributi che puoi utilizzare, consulta Crea una policy di attestazione.
Crea una policy di attestazione
Durante la creazione di un WIP, devi creare una policy di attestazione. Le asserzioni di un'entità di autenticazione devono corrispondere alla tua policy per poter accedere ai tuoi dati.
Le policy sono scritte in Common Expression Language (CEL) e sono costituite da una serie di istruzioni che possono essere concatenate con l'operatore &&.
Le istruzioni utilizzano le asserzioni dell'immagine Confidential Space, dell'immagine container del workload o dell'istanza VM come variabili e il valore specificato come espressione.
Ad esempio, ecco una policy che impone che il workload utilizzi Confidential Space, che utilizzi un'immagine Confidential Space STABLE e che la zona in cui viene eseguita l'istanza VM del workload sia us-central1-a:
assertion.swname == 'CONFIDENTIAL_SPACE' \
&& 'STABLE' in assertion.submods.confidential_space.support_attributes" \
&& assertion.submods.gce.zone == "us-central1-a"
Per saperne di più, consulta Asserzioni di attestazione.
Asserzioni di attestazione
Le asserzioni disponibili per creare una policy di attestazione sono descritte nella tabella seguente. Le policy possono convalidare le asserzioni effettuate dall'immagine Confidential Space, dal container del workload e dall'istanza VM.
Asserzioni di immagini
| Asserzione | Tipo | Descrizione | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Interazione con:
|
Enumerazione |
Verifica che l'immagine Confidential Space sia la versione di debug o di produzione. I valori validi sono i seguenti:
EsempiIl seguente codice verifica che venga utilizzata la versione di debug dell'immagine Confidential Space: Il seguente codice verifica che venga utilizzata la versione di produzione dell'immagine Confidential Space: |
||||||||||
assertion.submods.confidential_space.support_attributes
|
Array di stringhe |
Verifica che la versione di sicurezza del TEE sia un'immagine Confidential Space di produzione. Le immagini Confidential Space di debug non hanno un attributo di supporto impostato. La tabella seguente descrive gli attributi di supporto presenti nelle immagini Confidential Space di produzione.
Ti consigliamo di mantenere aggiornata l'immagine di Confidential Space. Per scoprire come aggiornare l'immagine di Confidential Space, consulta Aggiorna le immagini di Confidential Space. EsempioIl seguente codice verifica che venga utilizzata una versione stabile dell'immagine di Confidential Space: |
||||||||||
assertion.swname |
Enumerazione |
Verifica il software in esecuzione sull'entità di attestazione. Il valore è sempre Esempio |
||||||||||
assertion.swversion |
Array di stringhe |
Verifica la versione software dell'immagine Confidential Space. Ti consigliamo di utilizzare Esempio |
Asserzioni del container
| Asserzione | Tipo | Descrizione |
|---|---|---|
|
Interazione con:
|
Array di stringhe |
Verifica i comandi e i parametri CMD utilizzati nell'immagine del workload. EsempiIl seguente codice verifica che il CMD dell'immagine del workload non sia stato sovrascritto:
Il seguente codice verifica che |
|
Interazione con:
|
Oggetto JSON |
Verifica che le variabili di ambiente e i relativi valori siano stati passati esplicitamente al container. Esempio
Il codice seguente verifica che la variabile di ambiente |
|
Interazione con:
|
Stringa |
Verifica se l'operatore del workload ha sovrascritto le variabili di ambiente nel container. Esempi
Il codice seguente verifica che l'operatore del workload non abbia eseguito l'override della variabile di ambiente Il codice seguente verifica che l'operatore del workload non abbia sovrascritto alcuna variabile di ambiente: |
assertion.submods.container.image_digest |
Stringa |
Verifica il digest dell'immagine del container del workload. La specifica di questa condizione consente a più parti di concordare un workload autorizzato che può accedere ai loro dati. Esempio |
assertion.submods.container.image_id |
Stringa |
Verifica l'ID immagine del container del workload. Esempio |
|
Interazione con:
|
Stringa |
Verifica la località del container del workload in esecuzione sull'immagine Confidential Space. Esempio |
|
Interazione con:
|
Oggetto JSON |
Verifica che l'immagine abbia una determinata firma o sia firmata da una chiave pubblica e da un algoritmo di firma. La specifica di questa condizione consente a più parti di concordare un workload autorizzato che può accedere ai loro dati. L'asserzione può includere i seguenti elementi:
Esempio |
|
Interazione con:
|
Enumerazione |
Verifica la policy di riavvio dell'utilità di avvio dei container per quando il workload si arresta. I valori validi sono i seguenti:
Esempio |
Asserzioni VM
| Asserzione | Tipo | Descrizione |
|---|---|---|
|
Interazione con:
|
Array di stringhe |
Verifica che un account di servizio specificato sia connesso alla VM che esegue il workload o che sia stato elencato utilizzando Esempio |
assertion.hwmodel |
Stringa |
Verifica la tecnologia di Confidential Computing sottostante. Le piattaforme supportate sono le seguenti:
Esempio |
|
Interazione con:
|
Booleano |
Verifica lo stato del monitoraggio sull'entità di attestazione. Esempio |
assertion.submods.gce.instance_id |
Stringa |
Verifica l'ID istanza VM. Esempio |
assertion.submods.gce.instance_name |
Stringa |
Verifica il nome dell'istanza VM. Esempio |
assertion.submods.gce.project_id |
Stringa |
Verifica che la VM esegua un progetto Google Cloud con l'ID progetto specificato. Esempio |
assertion.submods.gce.project_number |
Stringa |
Verifica che la VM sia in esecuzione in un progetto Google Cloud con il numero di progetto specificato. Esempio |
|
Interazione con:
|
Stringa |
Verifica che la VM sia in esecuzione nella zona specificata. Esempio |
|
Interazione con:
|
Enumerazione |
Verifica le funzionalità di Confidential Computing supportate da una GPU NVIDIA. In Confidential Space è supportata solo la modalità single GPU passthrough (SPT), pertanto il valore è sempre Per ulteriori informazioni sul supporto di NVIDIA Confidential Computing, consulta NVIDIA Trusted Computing Solutions (PDF). Esempio |
|
Interazione con:
|
Enumerazione |
Verifica lo stato del driver Confidential Computing di NVIDIA. I valori validi sono i seguenti:
Esempio |
|
Interazione con:
|
Array di oggetti |
Verifica le attestazioni per ogni GPU NVIDIA con attestazione. Confidential Space supporta una sola richiesta di GPU. Un oggetto { "hwmodel": "GCP_NVIDIA_H100", "ueid": "490457405999046854973671575630853621547794591064", "l4_serial_number": "1216669666319372030078", "driver_version": "570.00", "vbios_version": "96.00.9F.00.01" } EsempiIl seguente codice verifica che il primo modello di hardware GPU sia un NVIDIA H100 in esecuzione su Google Cloud: Il seguente codice verifica che l'attestazione contenga claim relativi alla GPU: |