I collaboratori dei dati devono configurare le seguenti risorse per consentire a un workload di accedere ai dati riservati:
Dati criptati, archiviati in Google Cloud.
Un pool di identità del workload (WIP) per autorizzare il workload. Dopo che un carico di lavoro è stato autorizzato da un WIP, può accedere ai dati riservati dei collaboratori e utilizzarli.
Inoltre, i collaboratori dei dati devono scegliere dove vengono archiviati i risultati del carico di lavoro di Confidential Space e se questi risultati sono univoci per ogni collaboratore o condivisi. Ad esempio, potresti scegliere di restituire lo stesso risultato a più bucket Cloud Storage appartenenti a ogni collaboratore dei dati.
Memorizzare i dati criptati
Puoi utilizzare qualsiasi Google Cloud servizio che memorizza i dati per ospitare i tuoi dati confidenziali. Ad esempio, potresti utilizzare uno dei seguenti servizi:
Devi assicurarti che questi dati siano criptati at-rest, sia utilizzando funzionalità integrate sia con un servizio come Cloud Key Management Service (Cloud KMS).
Autorizza il workload con un WIP
Un WIP è il meccanismo che Confidential Space utilizza per consentire a un carico di lavoro esterno di accedere ai tuoi dati confidenziali e di utilizzarli come identità federata. Un'identità federata è un'entità esterna che viene trattata come se fosse un principal all'interno del tuo progetto, consentendoti di concedere ruoli IAM per dare accesso a risorse specifiche o per rappresentare 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 l'autenticazione delle entità 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 VM confidenziale e restituisce infine un token di attestazione OpenID Connect (OIDC) al provider WIP. L'operatore del workload imposta il servizio di attestazione utilizzato, che deve corrispondere a quello aggiunto al fornitore WIP per concedere l'accesso.
Mappature degli attributi: attributi nei token di accesso del servizio token di sicurezza che vengono mappati alle asserzioni effettuate dall'entità di autenticazione, in questo caso l'istanza VM che esegue il workload. Le asserzioni vengono eseguite 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 controllo in Cloud Logging e per concedere ruoli tramite IAM in base alle asserzioni dell'entità di autenticazione, ad esempio i digest dei container delle immagini dei workload. Scopri di più sulle mappature degli attributi.
Un criterio 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, Confidential Space Launcher 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 trasmesso al provider WIP dal carico di lavoro e il provider lo utilizza per verificare che le asserzioni superino il criterio di attestazione definito nel provider. In questo caso, il carico di lavoro può accedere alle risorse riservate.
Accesso al workload esterno
Prima di configurare un WIP e un fornitore, devi scegliere in che modo il carico di lavoro accederà alle tue risorse: accesso diretto alle risorse o rappresentazione dell'account di servizio.
Accesso diretto alle risorse
Consigliamo il metodo di accesso diretto alle risorse per i workload.
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 carico di lavoro può essere autorizzato ad accedere alle risorse direttamente tramite i binding IAM, in base ad attributi come il digest dell'immagine container del carico di lavoro.
L'accesso diretto alle risorse presenta i seguenti vantaggi:
La configurazione di un ambiente Confidential Space richiede meno passaggi, in quanto i collaboratori dei dati non devono configurare service account da impersonare per un service account del workload.
Il workload può accedere solo a risorse specifiche come determinato da IAM. Questo metodo è più sicuro della rappresentazione del account di servizio, in cui service account con autorizzazioni eccessive o diritti di rappresentazione potrebbero fornire a un malintenzionato più accesso di quanto 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 rappresentato 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 un audit trail più dettagliato.
Non devi mappare la proprietà dell'istanza VM
selfLink
all'attributogoogle.subject
in un provider WIP. I valoriselfLink
molto lunghi possono superare il limite di 127 byte di questo attributo, causando l'autenticazione del fornitore WIP non riuscita.
Simulazione dell'identità dei service account
Il metodo di rappresentazione dell'account di servizio prevede che ogni collaboratore dei dati configuri un account di servizio per decriptare i propri dati privati e poi lo colleghi al proprio WIP. Specificano anche l'account di servizio del carico di lavoro nel proprio fornitore WIP, il che consente all'account di servizio del carico di lavoro di simulare l'identità degli account di servizio del collaboratore dei dati in modo da poter recuperare e utilizzare i loro dati riservati.
La simulazione dell'identità del service account deve essere utilizzata solo nei seguenti scenari:
Quando devi utilizzare le firme delle immagini come credenziale di autenticazione, la sintassi utilizzata dalle firme non funziona con le mappature degli attributi.
Quando accedi alle API che non supportano le identità federate.
Il metodo di rappresentazione del account di servizio potrebbe non riuscire a eseguire l'autenticazione in un provider WIP se un'istanza VM ha una proprietà selfLink
molto lunga. Questo perché l'attestazione sub
nel token di attestazione, impostata sul valore selfLink
, viene 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.
Configurare un WIP e un fornitore
I passaggi per configurare un fornitore variano a seconda che utilizzi l'accesso diretto alle risorse o la simulazione dell'identità delaccount di serviziot.
Accesso diretto alle risorse
Il metodo di accesso diretto alle risorse prevede la configurazione di un WIP e di un fornitore, quindi la configurazione dei ruoli IAM in base a un digest specifico dell'immagine container del carico di lavoro.
Configurare un WIP e un fornitore
Per configurare un WIP e un fornitore, completa le seguenti istruzioni:
Crea il WIP:
gcloud iam workload-identity-pools create DATA_COLLABORATOR_POOL_NAME \ --location=global
Crea 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="https://confidentialcomputing.googleapis.com/" \ --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-uri
dihttps://confidentialcomputing.googleapis.com/
, il che significa che Google Cloud Attestation viene utilizzato come servizio di attestazione.Un
allowed-audiences
dihttps://sts.googleapis.com
. Si tratta del servizio di token di sicurezza di Google, che scambia le credenziali con i token di accesso.Un
attribute-mapping
digoogle.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_digest
Questo valore viene creato utilizzando Common Expression Language (CEL). I seguenti valori vengono assegnati all'attributo
gcpcs
e 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 del container del workload. Questo attributo è mappato in modo da poter concedere ruoli IAM all'identità federata in base a un digest dell'immagine specifico.Puoi mappare una qualsiasi delle asserzioni del carico di lavoro disponibili, a condizione che la lunghezza totale del valore
google.subject
sia inferiore a 127 byte.I seguenti
attribute-conditions
, che formano una policy di attestazione. Se queste condizioni corrispondono alle asserzioni del workload, allora al workload è consentito 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'STABLE
attributo di supporto.
Per altre condizioni degli attributi che puoi utilizzare, consulta Creare un criterio 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 al fatto che il digest del container dell'immagine del carico di lavoro dell'identità corrisponda a un valore previsto.
Il seguente esempio 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 rappresentazione del account di servizio prevede quanto segue:
Creazione di service account in ciascuno dei progetti dei collaboratori dei dati e concessione dell'autorizzazione per decriptare i dati riservati.
Creazione di WIP in ciascuno dei progetti dei collaboratori dei dati e poi allegare a ogni WIP l'account di servizio del progetto appena creato.
Creazione di provider WIP in ogni WIP che specificano l'account di servizio del workload come account autorizzato a simulare l'identità degli account di servizio dei collaboratori dei dati.
Configurare i service account per decriptare i dati riservati
Crea i service account nei progetti dei collaboratori dei dati:
gcloud iam service-accounts create DATA_COLLABORATOR_SERVICE_ACCOUNT_NAME
Concedi ai service account le autorizzazioni necessarie per decriptare i dati confidenziali. Ad esempio, potresti criptare file riservati in Cloud Storage con Cloud KMS, quindi devi concedere alaccount di serviziont l'autorizzazione per decriptare questi 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
Configurare un WIP e un fornitore
Per configurare un WIP e un fornitore, completa le seguenti istruzioni in ogni progetto di collaboratore dei dati:
Crea il WIP:
gcloud iam workload-identity-pools create DATA_COLLABORATOR_POOL_NAME \ --location=global
Collega il account di servizio che verrà rappresentato 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.workloadIdentityUser
Crea un provider OIDC nel WIP e definisci il service account del workload in modo che possa rappresentare il service account del collaboratore dei 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-uri
dihttps://confidentialcomputing.googleapis.com/
, il che significa che Google Cloud Attestation viene utilizzato come servizio di attestazione.Un
allowed-audiences
dihttps://sts.googleapis.com
. Si tratta del servizio di token di sicurezza di Google, che scambia le credenziali con i token di accesso.Un
attribute-mapping
digoogle.subject
, con il valoreassertion.sub
. Si tratta dell'selfLink
dell'istanza VM, come definito nell'attestazionesub
nel token di attestazione.L'istanza VM
selfLink
viene 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, allora al workload è consentito accedere alle risorse come identità federata:assertion.submods.container.image_digest == 'WORKLOAD_CONTAINER_IMAGE_DIGEST'
: Verifica che il digest dell'immagine del container del carico di lavoro 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 e lo utilizza per rappresentare il account di servizio del collaboratore dei 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'STABLE
attributo di supporto.
Per altre condizioni degli attributi che puoi utilizzare, consulta Creare un criterio di attestazione.
Crea una policy di attestazione
Durante la creazione di un WIP, devi creare una norma di attestazione. Le asserzioni di un'entità di autenticazione devono corrispondere ai tuoi criteri per poter accedere ai tuoi dati.
I criteri sono scritti in
Common Expression Language
(CEL) e sono costituiti da una serie di istruzioni che possono essere concatenate
con l'operatore &&
.
Le istruzioni utilizzano asserzioni dall'immagine Confidential Space, dall'immagine container del workload o dall'istanza VM come variabili e il valore specificato come espressione.
Ad esempio, ecco una policy che impone che il workload utilizzi
Confidential Space, deve utilizzare un'STABLE
immagine Confidential Space
e che la zona in cui viene eseguita l'istanza VM del workload deve essere
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 le asserzioni di attestazione.
Asserzioni di attestazione
Le asserzioni disponibili per creare una policy di attestazione sono descritte in dettaglio nella tabella seguente. I criteri possono convalidare le asserzioni fatte dall'immagine Confidential Space, dal container del workload e dall'istanza VM.
Affermazioni relative alle immagini
Asserzione | Tipo | Descrizione |
---|---|---|
Interazione con:
|
Stringa definita |
Verifica che l'immagine di Confidential Space sia la versione di debug o di produzione. I valori validi sono:
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 di debug di Confidential Space non hanno l'attributo di supporto impostato. Esistono tre attributi di supporto:
EsempioIl seguente codice verifica che venga utilizzata una versione stabile dell'immagine di Confidential Space:
|
assertion.swname |
Stringa definita |
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
|
Assert di contenitore
Asserzione | Tipo | Descrizione |
---|---|---|
Interazione con:
|
Array di stringhe |
Verifica i CMD comandi e parametri 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. EsempioIl seguente codice verifica che la variabile di ambiente
|
Interazione con:
|
Stringa |
Verifica se l'operatore del carico di lavoro ha sovrascritto le variabili di ambiente nel container. EsempiIl 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 carico di lavoro non abbia sovrascritto alcuna variabile di ambiente:
|
assertion.submods.container.image_digest |
Stringa |
Verifica il digest dell'immagine del container del carico di lavoro. La specifica di questa condizione consente a più parti di concordare un carico di lavoro autorizzato che può accedere ai loro dati. Esempio
|
assertion.submods.container.image_id |
Stringa |
Verifica l'ID immagine del container del carico di lavoro. Esempio
|
Interazione con:
|
Stringa |
Verifica la posizione del container del workload in esecuzione sopra l'immagine di Confidential Space. Esempio
|
Interazione con:
|
Oggetto JSON |
Verifica che l'immagine abbia una determinata firma o sia firmata da una chiave pubblica e un algoritmo di firma. La specifica di questa condizione consente a più parti di concordare un carico di lavoro autorizzato che può accedere ai loro dati. L'asserzione può includere i seguenti elementi:
Esempio
|
Interazione con:
|
Stringa definita |
Verifica la policy di riavvio del launcher del container per quando il workload si arresta. I valori validi sono:
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 sia stato elencato utilizzando
Esempio
|
assertion.hwmodel |
Stringa |
Verifica la tecnologia Confidential Computing sottostante. Le piattaforme supportate sono le seguenti:
Esempio
|
Interazione con:
|
Booleano |
Verifica lo stato di monitoraggio dell'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 Google Cloud progetto con l'ID progetto specificato. Esempio
|
assertion.submods.gce.project_number |
Stringa |
Verifica che la VM sia in esecuzione in un progetto con il numero di progetto specificato. Google Cloud Esempio
|
Interazione con:
|
Stringa |
Verifica che la VM sia in esecuzione nella zona specificata. Esempio
|
Interazione con:
|
Stringa definita |
Verifica lo stato del driver Confidential Computing di NVIDIA. I valori validi sono:
Esempio
|