Los colaboradores de datos deben configurar los siguientes recursos para que una carga de trabajo pueda acceder a sus datos confidenciales:
Los datos encriptados, almacenados en Google Cloud
Cuentas de servicio que pueden desencriptar esos datos
Validación de la certificación con un grupo de identidades para cargas de trabajo (WIP). Después de que el WIP autoriza una carga de trabajo, esta puede suplantar cuentas de servicio en el proyecto de un colaborador de datos para recuperar datos confidenciales.
Además, los colaboradores de datos deben elegir dónde se almacenan los resultados de la carga de trabajo de Confidential Space y si los datos presentados son únicos o compartidos. Por ejemplo, podrías generar el mismo resultado en varios buckets de Cloud Storage que pertenezcan a cada colaborador de datos.
Almacena tus datos
Puedes usar cualquier servicio Google Cloud que almacene datos para alojar tus datos confidenciales. Por ejemplo, puedes usar uno de los siguientes servicios:
Debes asegurarte de que estos datos estén encriptados en reposo, ya sea con funciones integradas o con algo como Cloud Key Management Service (Cloud KMS).
Crea una cuenta de servicio para desencriptar datos confidenciales
Pones tus datos confidenciales a disposición de las cargas de trabajo de Confidential Space y reduces la exposición humana a esos datos a través de cuentas de servicio.
Por ejemplo, puedes encriptar archivos confidenciales en Cloud Storage con Cloud KMS y, luego, crear una cuenta de servicio que tenga permiso para acceder a esos datos y a la clave para desencriptarlos.
Luego, conecta esa cuenta de servicio a un WIP. Luego, una carga de trabajo autorizada de Confidential Space basada en otro proyecto puede usar ese WIP para suplantar la identidad de la cuenta de servicio que desencripta los datos, recuperar los datos desencriptados y procesarlos.
Dado que las cuentas de servicio se usan tanto para desencriptar los datos confidenciales como para procesarlos, la visibilidad de los datos confidenciales se restringe a sus propietarios. Dado que la carga de trabajo se ejecuta en una Confidential VM, su encriptación de memoria basada en hardware garantiza que tus datos permanezcan privados mientras se usan. SSH también está inhabilitado en las VMs de carga de trabajo que usan la imagen de Confidential Space de producción, lo que significa que nadie puede acceder a la VM mientras se ejecuta.
Consulta Crea tu primer entorno de Confidential Space para ver un ejemplo de esto.
Crea un WIP y un proveedor para la validación de la certificación
Para ayudar a proteger los datos de un operador de carga de trabajo no confiable, Confidential Space implementa un proceso de certificación que detecta modificaciones en una imagen de carga de trabajo o su TEE. El proceso se basa en el inicio medido de la VM protegida y las mediciones extendidas del entorno de ejecución, y captura las mediciones de la secuencia de inicio en un registro protegido de solo extensión en el dispositivo del módulo de plataforma segura virtual (vTPM).
El servicio de certificación de Confidential Space genera tokens de OpenID Connect (OIDC) que incluyen estas certificaciones de vTPM en un formato que puede validar un WIP, que los compara con las políticas agregadas como condiciones de atributos a un proveedor. Estos tokens están firmados por Google, duran una hora y se actualizan automáticamente.
Si el WIP autoriza la carga de trabajo, esta puede suplantar la identidad de cuentas de servicio en el proyecto para desencriptar y recuperar datos confidenciales.
Para configurar un WIP y un proveedor, completa las siguientes instrucciones:
Conecta tu cuenta de servicio de desencriptación al WIP con el rol
iam.workloadIdentityUser
.Crea un proveedor de OIDC con los siguientes detalles:
Un URI de la entidad emisora de
https://confidentialcomputing.googleapis.com/
.Es un público permitido de
https://sts.googleapis.com
.Es una asignación de atributos del proveedor de
google.subject
, con un valor deassertion.sub
.Son las condiciones de atributo que se usan para validar las certificaciones de la carga de trabajo. Consulta Crea una política de certificación para conocer las opciones disponibles.
Crea una política de certificación
Como parte de la creación de un WIP, agregas condiciones de atributos, es decir, condiciones que una carga de trabajo debe cumplir para poder acceder a tus datos. En Confidential Space, estas condiciones de atributos forman tu política de certificación.
Las políticas se escriben en Common Expression Language (CEL) y se componen de una serie de aserciones que se pueden encadenar con el operador &&
.
A continuación, se muestra un ejemplo de cómo agregar un proveedor a un grupo de Workload Identity con gcloud CLI, junto con la opción attribute-condition
que define las políticas:
gcloud iam workload-identity-pools providers create-oidc attestation-verifier \
--location=global \
--workload-identity-pool=user-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 =='sha256:837ccb607e312b170fac7383d7ccfd61fa5072793f19a25e75fbacb56539b86b' \
&& 'service-account@my-project.iam.gserviceaccount.com' in assertion.google_service_accounts \
&& assertion.swname == 'CONFIDENTIAL_SPACE' \
&& 'STABLE' in assertion.submods.confidential_space.support_attributes"
En este ejemplo, una identidad externa que intenta suplantar una cuenta de servicio conectada al grupo de Workload Identity debe certificar los siguientes detalles y hacer que coincidan:
Resumen de la imagen del contenedor de la carga de trabajo
Dirección de la cuenta de servicio conectada a la VM de la carga de trabajo
Ese
CONFIDENTIAL_SPACE
es el software que se ejecuta en la VM, con todas sus garantías de seguridad integradas.El atributo de asistencia de la imagen de Confidential Space de producción
Aserciones de certificación
En la siguiente tabla, se detallan las aserciones disponibles para construir una política de certificación. Pueden validar las aserciones realizadas por la imagen de Confidential Space, el contenedor de carga de trabajo y la VM.
Aserciones de imágenes
Aserción | Tipo | Descripción |
---|---|---|
Interactúa con:
|
Cadena definida |
Verifica que la imagen de Confidential Space sea la versión de depuración o de producción. Los valores válidos son los siguientes:
EjemplosEl siguiente código verifica que se esté usando la versión de depuración de la imagen de Confidential Space:
El siguiente código verifica que se esté usando la versión de producción de la imagen de Confidential Space:
|
assertion.submods.confidential_space.support_attributes |
Matriz de string |
Verifica que la versión de seguridad del TEE sea una imagen de Confidential Space de producción. Las imágenes de depuración de Confidential Space no tienen ningún atributo de asistencia establecido. Existen tres atributos de asistencia:
EjemploEl siguiente código verifica que se esté usando una versión estable de la imagen de Confidential Space:
|
assertion.swname |
Cadena definida |
Verifica el software que se ejecuta en la entidad que certifica. El valor siempre es Ejemplo
|
assertion.swversion |
Matriz de string |
Verifica la versión de software de la imagen de Confidential Space. Te
recomendamos que uses
Ejemplo
|
Aserciones de contenedores
Aserción | Tipo | Descripción |
---|---|---|
Interactúa con:
|
Matriz de string |
Verifica los comandos y parámetros de CMD que se usan en la imagen de la carga de trabajo. EjemplosEl siguiente código verifica que no se haya reemplazado el CMD de la imagen de carga de trabajo:
El siguiente código verifica que
|
Interactúa con:
|
Objeto JSON |
Verifica que las variables de entorno y sus valores se hayan pasado de forma explícita al contenedor. EjemploEl siguiente código verifica que la variable de entorno
|
Interactúa con:
|
String |
Verifica si el operador de carga de trabajo reemplazó las variables de entorno en el contenedor. EjemplosEl siguiente código verifica que el operador de cargas de trabajo no haya anulado la variable de entorno
El siguiente código verifica que el operador de cargas de trabajo no haya sobrescrito ninguna variable de entorno:
|
assertion.submods.container.image_digest |
String |
Verifica el resumen de la imagen del contenedor de la carga de trabajo. Especificar esta condición permite que varias partes acuerden una carga de trabajo autorizada que pueda acceder a sus datos. Ejemplo
|
assertion.submods.container.image_id |
String |
Verifica el ID de la imagen del contenedor de la carga de trabajo. Ejemplo
|
Interactúa con:
|
String |
Verifica la ubicación del contenedor de carga de trabajo que se ejecuta sobre la imagen de Confidential Space. Ejemplo
|
Interactúa con:
|
Objeto JSON |
Verifica que la imagen tenga una firma determinada o que esté firmada por una clave pública y un algoritmo de firma. Especificar esta condición permite que varias partes acuerden una carga de trabajo autorizada que pueda acceder a sus datos. La aserción puede incluir los siguientes elementos:
Ejemplo
|
Interactúa con:
|
Cadena definida |
Verifica la política de reinicio del iniciador de contenedores cuando se detiene la carga de trabajo. Los valores válidos son los siguientes:
Ejemplo
|
Aserciones de VM
Aserción | Tipo | Descripción |
---|---|---|
Interactúa con:
|
Matriz de string |
Verifica que una cuenta de servicio especificada esté conectada a la VM que ejecuta la carga de trabajo o que se haya incluido en la lista con Ejemplo
|
assertion.hwmodel |
String |
Verifica la tecnología subyacente de Confidential Computing. Las plataformas compatibles son las siguientes:
Ejemplo
|
Interactúa con:
|
Booleano |
Verifica el estado de supervisión en la entidad certificadora. Ejemplo
|
assertion.submods.gce.instance_id |
String |
Verifica el ID de la instancia de VM. Ejemplo
|
assertion.submods.gce.instance_name |
String |
Verifica el nombre de la instancia de VM. Ejemplo
|
assertion.submods.gce.project_id |
String |
Verifica que la VM ejecute un proyecto Google Cloud con el ID del proyecto especificado. Ejemplo
|
assertion.submods.gce.project_number |
String |
Verifica que la VM se ejecute en un proyecto Google Cloud con el número de proyecto especificado. Ejemplo
|
Interactúa con:
|
String |
Verifica que la VM se esté ejecutando en la zona especificada. Ejemplo
|