1. Descripción general
Confidencial Space ofrece colaboración y uso compartido de datos seguros entre varias partes, al tiempo que permite a las organizaciones preservar la confidencialidad de sus datos. Esto significa que las organizaciones pueden colaborar entre sí y, al mismo tiempo, mantener el control sobre sus datos y protegerlos del acceso no autorizado.
Confidential Space abre situaciones en las que deseas obtener valor mutuo a partir de la agregación y el análisis de datos sensibles, a menudo regulados, y, al mismo tiempo, conservar el control total sobre ellos. Con Confidential Space, las organizaciones pueden obtener valor mutuo a partir de la agregación y el análisis de datos sensibles, como información de identificación personal (PII), información de salud protegida (PHI), propiedad intelectual y secretos criptográficos, y, al mismo tiempo, conservar el control total sobre ellos.
Requisitos
- Un proyecto de Google Cloud Platform
- Un navegador como Chrome o Firefox
- Conocimientos básicos de Google Compute Engine ( codelab), VM confidencial, contenedores y repositorios remotos
- Conocimientos básicos de Cloud KMS ( codelab)
- Conocimientos básicos de cuentas de servicio, federación de identidades de cargas de trabajo y condiciones de atributos.
Qué aprenderás
- Cómo configurar los recursos de Cloud necesarios para ejecutar Confidential Space
- Cómo ejecutar la carga de trabajo en una Confidential VM que ejecuta la imagen de VM de Confidential Space
- Cómo autorizar el acceso a recursos protegidos según los atributos del código de la carga de trabajo (qué), el entorno de Confidential Space (dónde) y la cuenta que ejecuta la carga de trabajo (quién).
En este codelab, configurarás un espacio confidencial entre Primus y Secundus Bank para determinar sus clientes comunes sin compartir listas de cuentas completas entre sí. Implica los siguientes pasos:
- Paso 1: Configura los recursos de nube necesarios para los bancos Primus y Secundus. Estos recursos de nube incluyen buckets de almacenamiento en la nube, claves de KMS, grupos de identidad de cargas de trabajo y cuentas de servicio para los bancos Primus y Secundus. Primus Bank y Secundus Bank almacenan los datos de sus clientes en buckets de Cloud Storage y los encriptan con claves de Cloud Key Management Service.
- Paso 2: Crea una cuenta de servicio de la carga de trabajo que usará la VM de la carga de trabajo. Secundus Bank, que será el operador de la carga de trabajo, iniciará la VM de la carga de trabajo. Primus Bank sería el autor del código de la carga de trabajo.
- Paso 3: Crea una carga de trabajo que incluya dos comandos de CLI, uno para contar los clientes de la ubicación proporcionada y otro para encontrar clientes comunes de Primus y Secundus Bank. Primus Bank sería el autor de la carga de trabajo, que se empaquetaría como una imagen de Docker. Esta imagen de Docker se publicará en Artifact Registry.
- Paso 4: Otorga autorización a una carga de trabajo. Primus Bank usaría un grupo de identidades para cargas de trabajo para autorizar que las cargas de trabajo accedan a sus datos de clientes según los atributos de quién ejecuta la carga de trabajo, qué hace y dónde se ejecuta.
- Paso 5: Cuando se ejecutara la carga de trabajo, solicitaría acceso a los recursos de la nube de los colaboradores de datos (Primus Bank y Secundus Bank) ofreciendo un token de servicio de verificador de certificación con reclamos de carga de trabajo y entorno. Si los reclamos de medición de cargas de trabajo en el token coinciden con la condición de atributo en los grupos de identidades para cargas de trabajo de los bancos Primus y Secundus, se muestra el token de acceso de la cuenta de servicio que tiene permiso para acceder a los recursos de nube correspondientes. Solo la carga de trabajo que se ejecute dentro de Confidential Space podrá acceder a los recursos de la nube.
- Paso 5(a): Ejecuta la primera carga de trabajo que cuenta a los clientes del Banco Primus de ubicaciones específicas. En el caso de esta carga de trabajo, Primus Bank sería un colaborador de datos y autor de la carga de trabajo, que proporcionaría la lista de clientes encriptada a la carga de trabajo que se ejecuta en Confidential Space. Secundus Bank sería un operador de cargas de trabajo y ejecutaría la carga de trabajo en un espacio confidencial.
- Paso 5(b): Ejecuta la segunda carga de trabajo que encuentra los clientes comunes de los bancos Primus y Secundus. Para esta carga de trabajo, Primus Bank y Secundus Bank serían colaboradores de datos. Proporcionarían las listas de clientes encriptadas a la carga de trabajo que se ejecuta en Confidential Space. Secundus Bank volvería a ser un operador de cargas de trabajo. Secundus Bank también autorizaría esta carga de trabajo porque necesita acceder a las listas de clientes encriptadas del banco para encontrar a los clientes comunes. En este caso, el Banco Secundus autorizaría a la carga de trabajo a acceder a los datos de sus clientes según los atributos de quién ejecuta la carga de trabajo, qué hace y dónde se ejecuta, como se mencionó en el paso 4 para el Banco Primus.
2. Configura recursos de Cloud
Antes de comenzar
- Clona este repositorio con el siguiente comando para obtener las secuencias de comandos necesarias que se usan como parte de este codelab.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
- Cambia el directorio de este codelab.
cd confidential-space/codelabs/bank_data_analysis_codelab/scripts
- Asegúrate de haber configurado las variables de entorno del proyecto requeridas como se muestra a continuación. Para obtener más información sobre cómo crear un proyecto de GCP, consulta este codelab. Puedes consultar este artículo para obtener detalles sobre cómo recuperar el ID del proyecto y en qué se diferencia del nombre y el número del proyecto.
export PRIMUS_PROJECT_ID=<GCP project id of Primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus bank>
- Habilita la facturación para tus proyectos.
- Habilita la API de Confidential Computing y las siguientes APIs para ambos proyectos.
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
- Con este comando, establece las variables para los nombres de los recursos como se menciona a continuación. Puedes anular los nombres de los recursos con estas variables (p. ej.,
export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket'
). - Puedes configurar las siguientes variables con nombres de recursos de nube existentes en el proyecto Primus. Si se configura la variable, se usará el recurso de nube existente correspondiente del proyecto Primus. Si no se establece la variable, el nombre del recurso de nube se generará a partir de project-name y se creará un nuevo cloud-resource como parte de lo siguiente:
| Es el bucket que almacena el archivo de datos de clientes del Primus Bank. |
| El grupo de identidades para cargas de trabajo (WIP) de Primus Bank que valida los reclamos |
| El proveedor del grupo de Workload Identity de Primus Bank, que incluye la condición de autorización que se usará para los tokens firmados por el servicio de Verificador de Certificación |
| La cuenta de servicio de Primus Bank que usa |
| La clave de KMS que se usa para encriptar los datos almacenados en |
| El llavero de KMS que se usará para crear la clave de encriptación |
| Es el repositorio de artefactos al que se enviará la imagen de Docker de la carga de trabajo. |
- Puedes configurar las siguientes variables con nombres de recursos de Cloud existentes en el proyecto Secundus. Si se configura la variable, se usará el recurso de nube existente correspondiente del proyecto Secundus. Si no se configura la variable, el nombre del recurso de nube se generará a partir de project-name y se creará un nuevo cloud-resource como parte de lo siguiente:
| El bucket que almacena el archivo de datos del cliente del Banco Secundus |
| El grupo de Workload Identity (WIP) del Banco Secundus que valida los reclamos |
| El proveedor del grupo de Workload Identity del Banco Secundus, que incluye la condición de autorización que se usará para los tokens firmados por el servicio de verificación de certificación |
| Es la cuenta de servicio del Banco Secundus que |
| La clave de KMS que se usa para encriptar los datos almacenados en |
| El llavero de KMS que se usa para crear la clave de encriptación |
| Es el bucket que almacena los resultados de la carga de trabajo. |
| Es el nombre de la imagen del contenedor de la carga de trabajo. |
| Es la etiqueta de la imagen del contenedor de la carga de trabajo. |
| La cuenta de servicio que tiene permiso para acceder a la VM confidencial que ejecuta la carga de trabajo. |
- Hay algunos artefactos que se usan como parte de este codelab, como se menciona a continuación:
primus_customer_list.csv
: Es el archivo que contiene los datos de los clientes del Primus Bank. Este es el archivo de muestra que se usa en este codelab.secundus_customer_list.csv
: Es el archivo que contiene los datos del cliente del Banco Secundus. Este es el archivo de muestra que se usa en este codelab.- Necesitarás ciertos permisos para estos dos proyectos:
- Para
$PRIMUS_PROJECT_ID
, necesitarás los roles de administrador de Cloud KMS, administrador de almacenamiento, administrador del registro de artefactos, administrador de cuentas de servicio y administrador de grupos de Workload Identity de IAM. - Para
$SECUNDUS_PROJECT_ID
, necesitarás los roles de administrador de Compute, administrador de almacenamiento, administrador de cuentas de servicio, administrador de Cloud KMS, administrador de grupos de Workload Identity de IAM y administrador de seguridad (opcional). - Ejecuta la siguiente secuencia de comandos para establecer los nombres de las variables restantes en valores basados en el ID de tu proyecto para los nombres de los recursos.
source config_env.sh
Configura recursos de la nube para Primus Bank
Se requieren los siguientes recursos de la nube para el Banco Primus. Ejecuta esta secuencia de comandos para configurar los recursos de Primus Bank:
- Bucket de almacenamiento en la nube (
$PRIMUS_INPUT_STORAGE_BUCKET
) para almacenar el archivo de datos de clientes encriptados del Banco Primus. - Clave de encriptación (
$PRIMUS_ENC_KEY
) y llavero ($PRIMUS_ENC_KEYRING
) en KMS para encriptar el archivo de datos del cliente del Banco Primus. - Grupo de Workload Identity (
$PRIMUS_WORKLOAD_IDENTITY_POOL
) para validar los reclamos en función de las condiciones de los atributos configurados en su proveedor - La cuenta de servicio (
$PRIMUS_SERVICE_ACCOUNT
) adjunta al grupo de identidades de cargas de trabajo ($PRIMUS_WORKLOAD_IDENTITY_POOL
) mencionado anteriormente tiene acceso para desencriptar datos con la clave de KMS (con el rolroles/cloudkms.cryptoKeyDecrypter
), leer datos del bucket de Cloud Storage (con el rolobjectViewer
) y conectar la cuenta de servicio al grupo de identidades de cargas de trabajo (conroles/iam.workloadIdentityUser
).
./setup_primus_bank_resources.sh
Configura recursos de la nube para Secundus Bank
Para el Banco Secundus, se requieren los siguientes recursos de la nube. Ejecuta esta secuencia de comandos para configurar los recursos de Secundus Bank. Como parte de estos pasos, se crearán los siguientes recursos:
- Bucket de almacenamiento en la nube (
$SECUNDUS_INPUT_STORAGE_BUCKET
) para almacenar el archivo de datos de clientes encriptados del Banco Secundus. - Clave de encriptación (
$SECUNDUS_ENC_KEY
) y llavero ($SECUNDUS_ENC_KEYRING
) en KMS para encriptar el archivo de datos del Banco Secundus - Grupo de Workload Identity (
$SECUNDUS_WORKLOAD_IDENTITY_POOL
) para validar los reclamos en función de las condiciones de los atributos configurados en su proveedor - La cuenta de servicio (
$SECUNDUS_SERVICE_ACCOUNT
) adjunta al grupo de identidades de cargas de trabajo mencionado anteriormente ($SECUNDUS_WORKLOAD_IDENTITY_POOL
) tiene acceso para desencriptar datos con la clave de KMS (con el rolroles/cloudkms.cryptoKeyDecrypter
), leer datos del bucket de Cloud Storage (con el rolobjectViewer
) y conectar la cuenta de servicio al grupo de identidades de cargas de trabajo (con el rolroles/iam.workloadIdentityUser
). - Bucket de Cloud Storage (
$SECUNDUS_RESULT_STORAGE_BUCKET
) para almacenar el resultado de la ejecución de la carga de trabajo de Secundus Bank.
./setup_secundus_bank_resources.sh
3. Crear carga de trabajo
Crea una cuenta de servicio de la carga de trabajo
Ahora, crearás una cuenta de servicio para la carga de trabajo con los roles y permisos necesarios, como se menciona a continuación. Ejecuta la siguiente secuencia de comandos para crear una cuenta de servicio de carga de trabajo en el proyecto de Secundus Bank. La VM que ejecuta la carga de trabajo usaría esta cuenta de servicio.
Esta cuenta de servicio de la carga de trabajo ($WORKLOAD_SERVICE_ACCOUNT
) tendrá los siguientes roles:
- Otorga el rol
confidentialcomputing.workloadUser
a la cuenta de servicio de la carga de trabajo . Esto permitirá que la cuenta de usuario genere un token de certificación. - Otorga el rol
logging.logWriter
al permiso de la cuenta de servicio de la carga de trabajo. Esto permite que el entorno de Confidential Space escriba registros en Cloud Logging, además de la consola en serie, de modo que los registros estén disponibles después de que se cierre la VM. objectViewer
para leer datos del bucket de Cloud Storage$PRIMUS_INPUT_STORAGE_BUCKET
.objectViewer
para leer datos del bucket de Cloud Storage$SECUNDUS_INPUT_STORAGE_BUCKET
.objectAdmin
para escribir el resultado de la carga de trabajo en el bucket de Cloud Storage$SECUNDUS_RESULT_STORAGE_BUCKET
.
./create_workload_service_account.sh
Crea una carga de trabajo
Como parte de este paso, crearás una imagen de Docker para la carga de trabajo que se usa en este codelab. La carga de trabajo es una aplicación GoLang simple que hace lo siguiente:
- Cuenta los clientes en una ubicación geográfica especificada.
- Encuentra clientes comunes de Primus y Secundus Bank a partir de las listas de clientes almacenadas en sus respectivos buckets de almacenamiento en la nube.
Ejecuta la siguiente secuencia de comandos para crear una carga de trabajo en la que se realicen los siguientes pasos:
- Crea Artifact Registry (
$PRIMUS_ARTIFACT_REPOSITORY
) propiedad de Primus Bank, donde se publicará la carga de trabajo. - Genera el código y actualízalo con los nombres de recursos requeridos. Puedes encontrar el código de la carga de trabajo que se usa en este codelab aquí.
- Compila el código y empaqueta en una imagen de Docker. Puedes encontrar el Dockerfile correspondiente aquí.
- Publica la imagen de Docker en Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY
) que pertenece a Primus Bank. - Otorga permiso de lectura a la cuenta de servicio
$WORKLOAD_SERVICE_ACCOUNT
para Artifact Registry ($PRIMUS_ARTIFACT_REGISTRY
).
./create_workload.sh
4. Autoriza y ejecuta cargas de trabajo
Autoriza la carga de trabajo
Primus Bank quiere autorizar cargas de trabajo para que accedan a los datos de sus clientes según los atributos de los siguientes recursos:
- Qué: Código que se verifica
- Dónde: Un entorno seguro
- Who: Un operador de confianza
Primus usa la federación de Workload Identity para aplicar una política de acceso según estos requisitos.
La federación de identidades para cargas de trabajo te permite especificar condiciones de atributos. Estas condiciones restringen qué identidades pueden autenticarse con el grupo de identidades de carga de trabajo (WIP). Puedes agregar el servicio de verificador de certificación a WIP como proveedor de grupos de identidades para cargas de trabajo para presentar mediciones y aplicar la política.
El grupo de Workload Identity ya se creó antes como parte del paso de configuración de recursos en la nube. Ahora, Primus Bank creará un nuevo proveedor de grupos de identidades de cargas de trabajo de OIDC. El --attribute-condition
especificado autoriza el acceso al contenedor de la carga de trabajo. Requiere lo siguiente:
- Qué:
$WORKLOAD_IMAGE_NAME
más reciente subido al repositorio$PRIMUS_ARTIFACT_REPOSITORY
- Dónde: El entorno de ejecución confiable de Confidential Space se ejecuta en la imagen de VM de Confidential Space totalmente compatible.
- Quién: Cuenta de servicio
$WORKLOAD_SERVICE_ACCOUNT
del Banco 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"
Al igual que el WIP creado para Primus Bank, Secundus Bank quiere autorizar cargas de trabajo para que accedan a los datos de sus clientes en función de lo siguiente:
- Qué: La carga de trabajo.
- Dónde: El entorno de Confidential Space.
- Quién: La cuenta (
$WORKLOAD_SERVICE_ACCOUNT
) que ejecuta la carga de trabajo.
Primus Bank usa el reclamo image_reference
, que incluye la etiqueta de imagen, para determinar si debe autorizar el acceso. Controlan el repositorio remoto, por lo que pueden asegurarse de etiquetar solo las imágenes que no filtren sus datos.
En comparación, Secundus Bank no controla el repositorio desde el que obtiene la imagen, por lo que no puede hacer esa suposición de forma segura. En su lugar, elige autorizar el acceso a la carga de trabajo según su image_digest
. A diferencia de image_reference
, que Primus Bank podría cambiar para que apunte a una imagen diferente, Primus Bank no podría hacer que image_digest
haga referencia a una imagen que no sea la que Secundus Bank auditó en el paso anterior.
Antes de crear proveedores de grupos de identidades para cargas de trabajo, recopilaríamos el image_digest
para la imagen del contenedor de la carga de trabajo que se usaría en las condiciones de atributo del proveedor.
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"
Ejecuta cargas de trabajo
Como parte de este paso, Secundus Bank ejecutará la carga de trabajo en Confidential Space. Esta carga de trabajo obtendrá los tokens de acceso del grupo de identidades para cargas de trabajo de Primus y del grupo de identidades para cargas de trabajo de Secundus para leer y desencriptar los datos de los clientes del Banco Primus y del Banco Secundus, respectivamente.
Los argumentos de TEE obligatorios se pasan con la marca de metadatos. Los argumentos del contenedor de la carga de trabajo se pasan con la parte "tee-cmd
" de la marca. El resultado de la ejecución de la carga de trabajo se publicará en $SECUNDUS_RESULT_STORAGE_BUCKET
.
Ejecuta la primera carga de trabajo
Como parte de la primera ejecución de la carga de trabajo, esta contará los clientes del Primus Bank desde la ubicación proporcionada en los argumentos del contenedor de la carga de trabajo. Como se muestra a continuación, la primera carga de trabajo ejecutará el comando "count-location
" y el resultado se almacenará en $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\"]""
Ver resultados
En el proyecto Secundus, consulta los resultados de la primera carga de trabajo. Espera entre 3 y 5 minutos para que la carga de trabajo complete la ejecución y el resultado esté disponible en el bucket de Cloud Storage.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
El resultado debe ser 3
, ya que esta es la cantidad de personas de Seattle que aparecen en el archivo primus_customer_list.csv
.
Ejecuta la segunda carga de trabajo
Como parte de la segunda ejecución de la carga de trabajo, buscaremos los clientes comunes del Primus Bank y el Secundus Bank. Como se muestra a continuación, la segunda carga de trabajo ejecutará el comando "list-common-customers
" y el resultado se almacenará en $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\"]""
Ver resultados
En el proyecto Secundus, consulta los resultados de la segunda carga de trabajo. Espera entre 3 y 5 minutos para que la carga de trabajo complete la ejecución y el resultado esté disponible en el bucket de Cloud Storage.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
El resultado debería ser la siguiente lista, ya que estos son los clientes comunes entre Primus y Secundus Bank.
Resultado:
Eric
Clinton
Ashley
Cooper
Ejecuta una carga de trabajo no autorizada
Vence el contrato del Banco Primus que permite el acceso del Banco Secundus a sus datos. Por lo tanto, el Banco Primus actualiza su condición de atributo para permitir las VMs con la cuenta de servicio de su nuevo socio, el Banco Tertius.
Primus Bank modifica el proveedor del grupo de Workload Identity
En $PRIMUS_PROJECT_ID
, actualiza la condición de atributo del proveedor de identidades del verificador de certificación para autorizar cargas de trabajo en una ubicación nueva.
- Establece el proyecto en $PRIMUS_PROJECT_ID.
gcloud config set project $PRIMUS_PROJECT_ID
- Exporta el ID de proyecto de GCP de Tertius Bank con el siguiente comando. Más adelante, Primus Bank usará esto para actualizar la condición de atributo del proveedor de grupos de identidades de carga. El banco Primus no dejará de autorizar las cuentas de servicio de la carga de trabajo del banco Secundus. Ahora, se permitirán las cuentas de servicio de la carga de trabajo del Banco Tertius.
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
- Actualiza el proveedor de OIDC en el grupo de identidades para cargas de trabajo. Aquí,
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts
se cambia a'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts.
. En lugar de autorizar la cuenta de servicio de la carga de trabajo del Banco Secundus, ahora se autorizará la cuenta de servicio de la carga de trabajo del Banco Tertius.
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"
Vuelve a ejecutar la carga de trabajo
Cuando el Banco Secundus intenta ejecutar la carga de trabajo original, falla. Para ver el error, borra el archivo de resultados original y la instancia de VM, y, luego, intenta volver a ejecutar la carga de trabajo.
Borra el archivo de resultados y la instancia de VM existentes
- Establece el proyecto en
$SECUNDUS_PROJECT_ID
.
gcloud config set project $SECUNDUS_PROJECT_ID
- Borra el archivo de resultados.
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
- Borra la instancia de Confidential VM.
gcloud compute instances delete ${WORKLOAD_VM2} --zone=${SECUNDUS_PROJECT_ZONE}
Ejecuta la carga de trabajo no autorizada:
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\"]""
Ver error
En lugar de los resultados de la carga de trabajo, verás un error (The given credential is rejected by the attribute condition
).
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
De manera similar, si Primus Bank modifica en secreto la carga de trabajo para enviar toda la lista de clientes de Secundus Bank a un bucket que pertenece a Primus Bank, ese intento fallará, ya que el resumen de la carga de trabajo maliciosa sería diferente del resumen de la imagen que se autorizó en el grupo de Workload Identity de Secundus Bank.
5. Realiza una limpieza
Aquí tienes la secuencia de comandos que se puede usar para limpiar los recursos que creamos como parte de este codelab. Como parte de esta limpieza, se borrarán los siguientes recursos:
- Bucket de entrada de Cloud Storage del Banco Primus (
$PRIMUS_INPUT_STORAGE_BUCKET)
. - Una cuenta de servicio del Banco Primus (
$PRIMUS_SERVICE_ACCOUNT
). - Un registro de artefactos del Banco Primus que contiene firmas de imagen (
$PRIMUS_COSIGN_REPOSITORY
). - Un grupo de identidades para cargas de trabajo del Banco Primus(
$PRIMUS_WORKLOAD_IDENTITY_POOL
). - Una cuenta de servicio de carga de trabajo del Banco Secundus (
$WORKLOAD_SERVICE_ACCOUNT
). - Bucket de entrada de Cloud Storage del Banco Secundus (
$SECUNDUS_INPUT_STORAGE_BUCKET)
. - Una cuenta de servicio del Banco Secundus (
$SECUNDUS_SERVICE_ACCOUNT
). - Un registro de artefactos del Banco Secundus que contiene firmas de imágenes (
$SECUNDUS_COSIGN_REPOSITORY
). - Un grupo de identidades para cargas de trabajo del Banco Secundus(
$SECUNDUS_WORKLOAD_IDENTITY_POOL
). - Una cuenta de servicio de carga de trabajo del Banco Secundus (
$WORKLOAD_SERVICE_ACCOUNT
). - Instancias de procesamiento de cargas de trabajo
- El bucket de almacenamiento de resultados del Banco Secundus (
$SECUNDUS_RESULT_STORAGE_BUCKET
). - Un repositorio de artefactos de Primus Bank (
$PRIMUS_ARTIFACT_REPOSITORY
).
./cleanup.sh
Si ya terminaste de explorar, considera borrar tu proyecto.
- Ve a Cloud Platform Console.
- Selecciona el proyecto que deseas cerrar y, luego, haz clic en "Borrar" en la parte superior. De esta manera, se programará la eliminación del proyecto.
Felicitaciones
¡Felicitaciones! Completaste el codelab correctamente.
Aprendiste a proteger los datos compartidos y, al mismo tiempo, mantener su confidencialidad con el Espacio confidencial.
¿Qué sigue?
Consulta algunos de estos codelabs similares…
- Codelab de imagen de contenedor firmada
- Cómo realizar transacciones de recursos digitales con computación de varias partes y espacios confidenciales
- Analiza datos confidenciales con espacios confidenciales
Lecturas adicionales
- ¿Te sientes aislado? La computación confidencial al rescate
- Procesamiento confidencial en GCP
- Confidential Space: El futuro de la colaboración que preserva la privacidad
- Cómo Google e Intel hacen que el procesamiento confidencial sea más seguro
- Privacidad contra progreso: Avanza en la seguridad con la computación confidencial de Google Cloud