1. Présentation
Confidential Space permet le partage et la collaboration sécurisés de données entre plusieurs parties, tout en permettant aux organisations de préserver la confidentialité de leurs données. Cela signifie que les organisations peuvent collaborer entre elles tout en gardant le contrôle de leurs données et en les protégeant contre les accès non autorisés.
Confidential Space permet de dégager mutuellement de la valeur en agrégeant et en analysant des données sensibles, souvent réglementées, tout en conservant un contrôle total dessus. Avec Confidential Space, les entreprises peuvent dégager mutuellement de la valeur en agrégeant et en analysant des données sensibles telles que les informations permettant d'identifier personnellement les utilisateurs, les données de santé protégées, les droits de propriété intellectuelle et les secrets cryptographiques, tout en gardant un contrôle total dessus.
Prérequis
- Un projet Google Cloud Platform
- Un navigateur tel que Chrome ou Firefox
- Connaissances de base de Google Compute Engine ( atelier de programmation), Confidential VM, Conteneurs et dépôts distants
- Connaissances de base de Cloud KMS ( atelier de programmation)
- Connaissances de base des comptes de service, de la fédération d'identité de charge de travail et des conditions d'attributs.
Points abordés
- Configurer les ressources Cloud nécessaires pour exécuter Confidential Space
- Exécuter la charge de travail dans une Confidential VM exécutant l'image de VM Confidential Space
- Comment autoriser l'accès aux ressources protégées en fonction des attributs du code de la charge de travail (quoi), de l'environnement Confidential Space (où) et du compte qui exécute la charge de travail (qui).
Dans cet atelier de programmation, vous allez configurer un espace confidentiel entre Primus et Secundus Bank pour identifier leurs clients communs sans partager l'intégralité de leurs listes de comptes. Voici les étapes à suivre :
- Étape 1 : Configurez les ressources cloud requises pour les banques Primus et Secundus. Ces ressources cloud incluent des buckets Cloud Storage, des clés KMS, des pools d'identités de charge de travail et des comptes de service pour les banques Primus et Secundus. Les banques Primus et Secundus stockent les données de leurs clients dans des buckets Cloud Storage et les chiffrent à l'aide de clés Cloud Key Management Service.
- Étape 2 : Créez un compte de service de charge de travail qui sera utilisé par la VM de charge de travail. Secundus Bank, qui sera l'opérateur de la charge de travail, lancera la VM de charge de travail. Primus Bank est l'auteur du code de charge de travail.
- Étape 3 : Créez une charge de travail qui inclut deux commandes CLI, l'une pour compter les clients de l'emplacement fourni et l'autre pour trouver les clients communs de Primus et Secundus Bank. La charge de travail sera créée par Primus Bank et packagée sous forme d'image Docker. Cette image Docker sera publiée dans Artifact Registry.
- Étape 4 : Autorisez une charge de travail. Primus Bank utiliserait un pool d'identités de charge de travail pour autoriser les charges de travail à accéder à ses données client en fonction des attributs de l'utilisateur qui exécute la charge de travail, de ce que fait la charge de travail et de l'endroit où elle s'exécute.
- Étape 5 : Lorsque la charge de travail s'exécute, elle demande l'accès aux ressources cloud des collaborateurs de données (Primus Bank et Secundus Bank) en proposant un jeton Attestation Verifier service avec des revendications de charge de travail et d'environnement. Si les revendications de mesure de la charge de travail dans le jeton correspondent à la condition d'attribut dans les pools d'identités de charge de travail des banques Primus et Secundus, le jeton d'accès au compte de service autorisé à accéder aux ressources cloud respectives est renvoyé. Les ressources cloud ne seront accessibles qu'à la charge de travail exécutée dans Confidential Space.
- Étape 5(a) : Exécutez la première charge de travail qui compte les clients de Primus Bank provenant de lieux spécifiques. Pour cette charge de travail, Primus Bank serait un collaborateur de données et un auteur de charge de travail, qui fournirait la liste des clients chiffrée à la charge de travail s'exécutant dans Confidential Space. La banque Secundus est un opérateur de charge de travail qui exécute la charge de travail dans un espace confidentiel.
- Étape 5(b) : Exécutez la deuxième charge de travail, qui recherche les clients communs aux banques Primus et Secundus. Pour cette charge de travail, Primus Bank et Secundus Bank seraient toutes deux des collaborateurs de données. Ils fournissent les listes de clients chiffrées à la charge de travail exécutée dans Confidential Space. Secundus Bank serait à nouveau un opérateur de charge de travail. Cette charge de travail serait également autorisée par Secundus Bank, car elle doit également accéder aux listes de clients chiffrées de Secundus Bank pour trouver les clients communs. Dans ce cas, Secundus Bank autoriserait la charge de travail à accéder à ses données client en fonction des attributs de la personne qui exécute la charge de travail, de ce que fait la charge de travail et de l'endroit où elle s'exécute, comme indiqué à l'étape 4 pour Primus Bank.

2. Configurer les ressources cloud
Avant de commencer
- Clonez ce dépôt à l'aide de la commande ci-dessous pour obtenir les scripts requis utilisés dans cet atelier de programmation.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
- Accédez au répertoire de cet atelier de programmation.
cd confidential-space/codelabs/bank_data_analysis_codelab/scripts
- Assurez-vous d'avoir défini les variables d'environnement du projet requises, comme indiqué ci-dessous. Pour en savoir plus sur la création d'un projet GCP, consultez cet atelier de programmation. Pour savoir comment récupérer l'ID d'un projet et en quoi il diffère du nom et du numéro du projet, consultez cette page.
export PRIMUS_PROJECT_ID=<GCP project id of Primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus bank>
- Activez la facturation pour vos projets.
- Activez l'API Confidential Computing et les API suivantes pour les deux projets.
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
- Définissez les variables pour les noms de ressources comme indiqué ci-dessous à l'aide de cette commande. Vous pouvez remplacer les noms de ressources à l'aide de ces variables (par exemple,
export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket'). - Vous pouvez définir les variables suivantes avec les noms de ressources cloud existants dans le projet Primus. Si la variable est définie, la ressource cloud existante correspondante du projet Primus est utilisée. Si la variable n'est pas définie, le nom de la ressource cloud est généré à partir du nom du projet et une nouvelle ressource cloud est créée dans le cadre de ce qui suit :
| Bucket qui stocke le fichier de données client de Primus Bank. |
| Pool d'identités de charge de travail de Primus Bank qui valide les revendications. |
| Fournisseur de pool d'identités de charge de travail de Primus Bank, qui inclut la condition d'autorisation à utiliser pour les jetons signés par le service de validation d'attestation. |
| Compte de service de Primus Bank utilisé par |
| Clé KMS utilisée pour chiffrer les données stockées dans |
| Trousseau de clés KMS qui sera utilisé pour créer la clé de chiffrement |
| Dépôt d'artefacts dans lequel l'image Docker de la charge de travail sera transférée. |
- Vous pouvez définir les variables suivantes avec les noms de ressources cloud existants dans le projet Secundus. Si la variable est définie, la ressource cloud existante correspondante du projet Secundus est utilisée. Si la variable n'est pas définie, le nom de la ressource cloud est généré à partir du nom du projet et une nouvelle ressource cloud est créée comme suit :
| Bucket qui stocke le fichier de données client de Secundus Bank |
| Pool d'identités de charge de travail de Secundus Bank qui valide les revendications. |
| Fournisseur de pool d'identités de charge de travail de Secundus Bank, qui inclut la condition d'autorisation à utiliser pour les jetons signés par le service de validation d'attestation. |
| Compte de service de Secundus Bank utilisé par |
| Clé KMS utilisée pour chiffrer les données stockées dans |
| Porte-clés KMS utilisé pour créer la clé de chiffrement |
| Bucket qui stocke les résultats de la charge de travail. |
| Nom de l'image du conteneur de charge de travail. |
| Tag de l'image du conteneur de charge de travail. |
| Compte de service autorisé à accéder à la VM confidentielle qui exécute la charge de travail. |
- Vous trouverez ci-dessous quelques artefacts utilisés dans cet atelier de programmation :
primus_customer_list.csv: fichier contenant les données client de Primus Bank. Cliquez ici pour accéder à l'exemple de fichier utilisé dans cet atelier de programmation.secundus_customer_list.csv: fichier contenant les données client de Secundus Bank. Cliquez ici pour accéder à l'exemple de fichier utilisé dans cet atelier de programmation.- Vous aurez besoin de certaines autorisations pour ces deux projets :
- Pour
$PRIMUS_PROJECT_ID, vous aurez besoin des rôles Administrateur Cloud KMS, Administrateur Storage, Administrateur Artifact Registry, Administrateur de compte de service et Administrateur IAM de pools d'identités de charge de travail. - Pour
$SECUNDUS_PROJECT_ID, vous aurez besoin des rôles Administrateur Compute, Administrateur Storage, Administrateur de compte de service, Administrateur Cloud KMS, Administrateur de pools Workload Identity et Administrateur de la sécurité (facultatif). - Exécutez le script suivant pour définir les noms de variables restants sur des valeurs basées sur l'ID de votre projet pour les noms de ressources.
source config_env.sh
Configurer des ressources cloud pour Primus Bank
Les ressources cloud suivantes sont requises pour Primus Bank. Exécutez ce script pour configurer les ressources de Primus Bank :
- Bucket Cloud Storage (
$PRIMUS_INPUT_STORAGE_BUCKET) pour stocker le fichier de données client chiffré de Primus Bank. - Clé de chiffrement (
$PRIMUS_ENC_KEY) et trousseau de clés ($PRIMUS_ENC_KEYRING) dans KMS pour chiffrer le fichier de données client de Primus Bank. - Pool d'identités de charge de travail (
$PRIMUS_WORKLOAD_IDENTITY_POOL) pour valider les revendications en fonction des conditions d'attributs configurées sous son fournisseur. - Le compte de service (
$PRIMUS_SERVICE_ACCOUNT) associé au pool d'identités de charge de travail mentionné ci-dessus ($PRIMUS_WORKLOAD_IDENTITY_POOL) a accès au déchiffrement des données à l'aide de la clé KMS (avec le rôleroles/cloudkms.cryptoKeyDecrypter), à la lecture des données du bucket Cloud Storage (avec le rôleobjectViewer) et à la connexion du compte de service au pool d'identités de charge de travail (avec le rôleroles/iam.workloadIdentityUser).
./setup_primus_bank_resources.sh
Configurer des ressources cloud pour Secundus Bank
Pour la banque Secundus, les ressources cloud suivantes sont requises. Exécutez ce script pour configurer les ressources de Secundus Bank. Les ressources mentionnées ci-dessous seront créées au cours de ces étapes :
- Bucket Cloud Storage (
$SECUNDUS_INPUT_STORAGE_BUCKET) pour stocker le fichier de données client chiffrées de Secundus Bank. - Clé de chiffrement (
$SECUNDUS_ENC_KEY) et trousseau de clés ($SECUNDUS_ENC_KEYRING) dans KMS pour chiffrer le fichier de données de Secundus Bank. - Pool d'identités de charge de travail (
$SECUNDUS_WORKLOAD_IDENTITY_POOL) pour valider les revendications en fonction des conditions d'attributs configurées sous son fournisseur. - Le compte de service (
$SECUNDUS_SERVICE_ACCOUNT) associé au pool d'identités de charge de travail mentionné ci-dessus ($SECUNDUS_WORKLOAD_IDENTITY_POOL) a accès au déchiffrement des données à l'aide de la clé KMS (avec le rôleroles/cloudkms.cryptoKeyDecrypter), à la lecture des données du bucket Cloud Storage (avec le rôleobjectViewer) et à la connexion du compte de service au pool d'identités de charge de travail (avec le rôleroles/iam.workloadIdentityUser). - Bucket Cloud Storage (
$SECUNDUS_RESULT_STORAGE_BUCKET) pour stocker le résultat de l'exécution de la charge de travail par Secundus Bank.
./setup_secundus_bank_resources.sh
3. Créer une charge de travail
Créer un compte de service pour la charge de travail
Vous allez maintenant créer un compte de service pour la charge de travail avec les rôles et autorisations requis, comme indiqué ci-dessous. Exécutez le script suivant pour créer un compte de service de charge de travail dans le projet Secundus Bank. La VM qui exécute la charge de travail utiliserait ce compte de service.
Ce compte de service de charge de travail ($WORKLOAD_SERVICE_ACCOUNT) disposera des rôles suivants :
- Attribuez le rôle
confidentialcomputing.workloadUserau compte de service de charge de travail . Cela permettra au compte utilisateur de générer un jeton d'attestation. - Attribuez le rôle
logging.logWriterà l'autorisation du compte de service de charge de travail. Cela permet à l'environnement Confidential Space d'écrire des journaux dans Cloud Logging en plus de la console série. Les journaux sont donc disponibles une fois la VM arrêtée. objectViewerpour lire les données du bucket Cloud Storage$PRIMUS_INPUT_STORAGE_BUCKET.objectViewerpour lire les données du bucket Cloud Storage$SECUNDUS_INPUT_STORAGE_BUCKET.objectAdminpour écrire le résultat de la charge de travail dans le bucket Cloud Storage$SECUNDUS_RESULT_STORAGE_BUCKET.
./create_workload_service_account.sh
Créer une charge de travail
Dans cette étape, vous allez créer une image Docker pour la charge de travail utilisée dans cet atelier de programmation. La charge de travail est une application GoLang simple qui :
- Compte les clients dans une zone géographique spécifiée.
- Trouve les clients communs de Primus et Secundus Bank à partir des listes de clients stockées dans leurs buckets Cloud Storage respectifs.
Exécutez le script suivant pour créer une charge de travail dans laquelle les étapes suivantes sont effectuées :
- Créez un dépôt Artifact Registry (
$PRIMUS_ARTIFACT_REPOSITORY) appartenant à Primus Bank, dans lequel la charge de travail sera publiée. - Générez le code et mettez-le à jour avec les noms de ressources requis. Le code de charge de travail utilisé dans cet atelier de programmation est disponible ici.
- Créez le code et packagez-le dans une image Docker. Le Dockerfile correspondant est disponible ici.
- Publiez l'image Docker dans le registre Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY) appartenant à Primus Bank. - Accordez au compte de service l'autorisation de lecture
$WORKLOAD_SERVICE_ACCOUNTpour Artifact Registry ($PRIMUS_ARTIFACT_REGISTRY).
./create_workload.sh
4. Autoriser et exécuter des charges de travail
Autoriser la charge de travail
Primus Bank souhaite autoriser les charges de travail à accéder à ses données client en fonction des attributs des ressources suivantes :
- Quoi : code validé
- Où : un environnement sécurisé
- Qui : un opérateur de confiance
Primus utilise la fédération d'identité de charge de travail pour appliquer une règle d'accès basée sur ces exigences.
La fédération d'identité de charge de travail vous permet de spécifier des conditions d'attribut. Ces conditions limitent les identités qui peuvent s'authentifier avec le pool d'identités de charge de travail. Vous pouvez ajouter le service de validation d'attestation au pool d'identités de charge de travail en tant que fournisseur de pool d'identités de charge de travail pour présenter les mesures et appliquer la stratégie.
Le pool d'identités de charge de travail a déjà été créé lors de l'étape de configuration des ressources cloud. Primus Bank va maintenant créer un fournisseur de pools d'identités de charge de travail OIDC. Le --attribute-condition spécifié autorise l'accès au conteneur de charge de travail. Cela nécessite :
- Description : la dernière version de
$WORKLOAD_IMAGE_NAMEa été importée dans le dépôt$PRIMUS_ARTIFACT_REPOSITORY. - Où : l'environnement d'exécution sécurisé Confidential Space s'exécute sur l'image de VM Confidential Space entièrement compatible.
- Qui : compte de service Secundus Bank
$WORKLOAD_SERVICE_ACCOUNT.
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"
Comme pour le pool d'identités de charge de travail créé pour Primus Bank, Secundus Bank souhaite autoriser les charges de travail à accéder à ses données client en fonction des éléments suivants :
- Quoi : la charge de travail.
- Où : environnement Confidential Space.
- Qui : compte (
$WORKLOAD_SERVICE_ACCOUNT) qui exécute la charge de travail.
Primus Bank utilise la revendication image_reference, qui inclut le tag d'image, pour déterminer s'il doit autoriser l'accès. Ils contrôlent le dépôt distant et peuvent donc s'assurer de n'étiqueter que les images qui ne divulguent pas leurs données.
En comparaison, Secundus Bank ne contrôle pas le dépôt à partir duquel elle obtient l'image. Elle ne peut donc pas faire cette hypothèse en toute sécurité. Au lieu de cela, ils choisissent d'autoriser l'accès à la charge de travail en fonction de son image_digest. Contrairement à image_reference, que Primus Bank pourrait modifier pour pointer vers une autre image, Primus Bank ne pourrait pas faire en sorte que image_digest fasse référence à une image autre que celle que Secundus Bank a auditée à l'étape précédente.
Avant de créer des fournisseurs de pool d'identités de charge de travail, nous collectons le image_digest pour l'image de conteneur de charge de travail qui sera utilisé dans les conditions d'attribut du fournisseur.
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"
Exécuter une ou plusieurs charges de travail
Dans cette étape, Secundus Bank exécutera la charge de travail dans Confidential Space. Cette charge de travail obtiendra les jetons d'accès du pool d'identités de charge de travail de Primus et du pool d'identités de charge de travail de Secundus pour lire et déchiffrer les données client de Primus Bank et de Secundus Bank, respectivement.
Les arguments TEE requis sont transmis à l'aide de l'indicateur de métadonnées. Les arguments du conteneur de charge de travail sont transmis à l'aide de la partie "tee-cmd" de l'indicateur. Le résultat de l'exécution de la charge de travail sera publié dans $SECUNDUS_RESULT_STORAGE_BUCKET.
Exécuter la première charge de travail
Lors de la première exécution de la charge de travail, celle-ci comptabilise les clients de Primus Bank à partir de l'emplacement fourni dans les arguments du conteneur de charge de travail. Comme indiqué ci-dessous, la première charge de travail exécutera la commande "count-location" et le résultat sera stocké à l'emplacement $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\"]""
Afficher les résultats
Dans le projet Secundus, affichez les résultats de la première charge de travail. Attendez trois à cinq minutes que la charge de travail termine l'exécution et que le résultat soit disponible dans le bucket Cloud Storage.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
Le résultat doit être 3, car il s'agit du nombre de personnes de Seattle listées dans le fichier primus_customer_list.csv.
Exécuter la deuxième charge de travail
Lors de la deuxième exécution de la charge de travail, nous trouverons les clients communs de Primus Bank et Secundus Bank. Comme indiqué ci-dessous, la deuxième charge de travail exécutera la commande "list-common-customers" et le résultat sera stocké à l'emplacement $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\"]""
Afficher les résultats
Dans le projet Secundus, affichez les résultats de la deuxième charge de travail. Attendez trois à cinq minutes que la charge de travail termine l'exécution et que le résultat soit disponible dans le bucket Cloud Storage.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
Le résultat doit être la liste suivante, car il s'agit des clients communs à Primus et Secundus Bank.
Résultat :
Eric
Clinton
Ashley
Cooper
Exécuter une charge de travail non autorisée
Le contrat de Primus Bank autorisant Secundus Bank à accéder à ses données expire. La banque Primus met donc à jour la condition d'attribut pour autoriser les VM avec le compte de service de son nouveau partenaire, la banque Tertius.
Primus Bank modifie le fournisseur de pools d'identités de charge de travail
Dans $PRIMUS_PROJECT_ID, mettez à jour la condition d'attribut du fournisseur d'identité Attestation Verifier pour autoriser les charges de travail dans un nouveau lieu.
- Définissez le projet sur $PRIMUS_PROJECT_ID.
gcloud config set project $PRIMUS_PROJECT_ID
- Exportez l'ID de projet GCP de Tertius Bank à l'aide de la commande ci-dessous. Primus Bank utilisera ensuite cette valeur pour mettre à jour la condition d'attribut du fournisseur de pool d'identités de charge de travail. La banque Primus n'arrêtera pas d'autoriser les comptes de service de charge de travail de la banque Secundus. Il autorisera désormais les comptes de service de charge de travail de Tertius Bank.
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
- Mettez à jour le fournisseur OIDC dans le pool d'identités de charge de travail. Ici,
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accountsest remplacé par'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts.. Au lieu d'autoriser le compte de service de charge de travail de Secundus Bank, le compte de service de charge de travail de Tertius Bank sera désormais autorisé.
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"
Réexécuter la charge de travail
Lorsque Secundus Bank tente d'exécuter la charge de travail d'origine, l'opération échoue. Pour afficher l'erreur, supprimez le fichier de résultats et l'instance de VM d'origine, puis essayez d'exécuter à nouveau la charge de travail.
Supprimer le fichier de résultats et l'instance de VM existants
- Définissez le projet sur le projet
$SECUNDUS_PROJECT_ID.
gcloud config set project $SECUNDUS_PROJECT_ID
- Supprimez le fichier de résultats.
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
- Supprimez l'instance Confidential VM.
gcloud compute instances delete ${WORKLOAD_VM2} --zone=${SECUNDUS_PROJECT_ZONE}
Exécutez la charge de travail non autorisée :
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\"]""
Afficher l'erreur
Au lieu des résultats de la charge de travail, une erreur (The given credential is rejected by the attribute condition) s'affiche.
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
De même, si la banque Primus modifie secrètement la charge de travail pour envoyer l'intégralité de la liste de clients de la banque Secundus à un bucket appartenant à la banque Primus, cette tentative échouera, car le résumé de la charge de travail malveillante sera différent de celui de l'image autorisée dans le pool d'identité de charge de travail de la banque Secundus.
5. Effectuer un nettoyage
Voici le script qui peut être utilisé pour nettoyer les ressources que nous avons créées dans cet atelier de programmation. Dans le cadre de ce nettoyage, les ressources suivantes seront supprimées :
- Bucket Cloud Storage d'entrée de la banque Primus (
$PRIMUS_INPUT_STORAGE_BUCKET)). - Un compte de service de la banque Primus (
$PRIMUS_SERVICE_ACCOUNT). - Registre d'artefacts de la banque Primus contenant les signatures d'images (
$PRIMUS_COSIGN_REPOSITORY). - Pool d'identités de charge de travail de la banque Primus(
$PRIMUS_WORKLOAD_IDENTITY_POOL). - Compte de service de charge de travail de la banque Secundus (
$WORKLOAD_SERVICE_ACCOUNT). - Bucket Cloud Storage d'entrée de la banque Secundus (
$SECUNDUS_INPUT_STORAGE_BUCKET)). - Un compte de service de la banque Secundus (
$SECUNDUS_SERVICE_ACCOUNT). - Un registre d'artefacts de la banque Secundus contenant des signatures d'images (
$SECUNDUS_COSIGN_REPOSITORY). - Pool d'identités de charge de travail de Secundus Bank(
$SECUNDUS_WORKLOAD_IDENTITY_POOL). - Compte de service de charge de travail de Secundus Bank (
$WORKLOAD_SERVICE_ACCOUNT). - Instances de calcul de charge de travail.
- Bucket de stockage des résultats de Secundus Bank (
$SECUNDUS_RESULT_STORAGE_BUCKET). - Dépôt d'artefacts de Primus Bank (
$PRIMUS_ARTIFACT_REPOSITORY).
./cleanup.sh
Si vous avez terminé l'exploration, pensez à supprimer votre projet.
- Accédez à la console Cloud Platform.
- Sélectionnez le projet que vous souhaitez arrêter, puis cliquez sur "Supprimer" en haut de la page. Le projet sera alors programmé pour suppression.
Félicitations
Bravo ! Vous avez terminé cet atelier de programmation.
Vous avez appris à sécuriser les données partagées tout en préservant leur confidentialité à l'aide de Confidential Space.
Et ensuite ?
Découvrez quelques-uns de ces ateliers de programmation similaires :
- Atelier de programmation sur les images de conteneur signées
- Réaliser des transactions sur des actifs numériques avec le calcul multipartite et les espaces confidentiels
- Analyser des données confidentielles avec les espaces confidentiels
Complément d'informations
- Vous vous sentez isolé ? L'informatique confidentielle à la rescousse
- Informatique confidentielle sur GCP
- Confidential Space : l'avenir de la collaboration respectueuse de la confidentialité
- Comment Google et Intel renforcent la sécurité de l'informatique confidentielle
- Confidentialité vs progrès : améliorer la sécurité avec le Confidential Computing de Google Cloud