À propos de cet atelier de programmation
1. Présentation
Confidential Space offre un partage et une collaboration de données sécurisés entre plusieurs parties, tout en permettant aux entreprises de préserver la confidentialité de leurs données. Cela signifie que les entreprises peuvent collaborer tout en gardant le contrôle de leurs données et en les protégeant contre tout accès non autorisé.
Confidential Space vous 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 des informations permettant d'identifier personnellement l'utilisateur, des données de santé protégées, des droits de propriété intellectuelle et des 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), des VM Confidential, des conteneurs et des dépôts distants
- Connaissances de base sur Cloud KMS ( atelier de programmation)
- Connaissances de base sur les comptes de service, la fédération d'identité de charge de travail et les conditions d'attribut.
Points abordés
- Configurer les ressources Cloud nécessaires pour exécuter Confidential Space
- Exécuter la charge de travail dans une VM Confidential exécutant l'image de VM Confidential Space
- 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 afin de déterminer leurs clients communs sans partager leurs listes de comptes complètes. Il comprend les étapes suivantes:
- É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. Primus Bank et Secundus Bank stockent leurs données client 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. La banque Secundus, qui sera l'opérateur de la charge de travail, lancera la VM de charge de travail. Primus Bank serait l'auteur du code de la charge de travail.
- Étape 3: Créez une charge de travail qui comprend deux commandes de ligne de commande, l'une pour compter les clients de l'emplacement fourni et l'autre pour trouver les clients communs de Primus et de Secundus Bank. La charge de travail sera créée par Primus Bank et empaqueté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 son objectif et de son emplacement.
- É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 de service de validation des attestations 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 du 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 la Primus Bank dans des zones géographiques spécifiques. Pour cette charge de travail, Primus Bank serait un collaborateur de données et un auteur de la charge de travail, qui fournirait la liste de clients chiffrée à la charge de travail exécutée dans Confidential Space. Secundus Bank est un opérateur de charge de travail et 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 des banques Primus et Secundus. Pour ce volume de travail, Primus Bank et Secundus Bank sont tous deux des collaborateurs de données. Il fournirait 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 la banque Secundus, car elle doit également accéder aux listes de clients chiffrées de la banque pour trouver les clients communs. Dans ce cas, la banque Secundus autoriserait la charge de travail à accéder à ses données client en fonction des attributs de l'utilisateur qui exécute la charge de travail, de son objectif et de son emplacement, comme indiqué à l'étape 4 pour la banque Primus.
2. Configurer des 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 de 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 de projet et en quoi il diffère du nom et du numéro de 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 des 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 de project-name et une nouvelle ressource cloud est créée dans le cadre des éléments suivants:
| Bucket qui stocke le fichier de données client de Primus Bank. |
| Pool d'identités de charge de travail (WIP) de Primus Bank qui valide les revendications. |
| Le 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 des attestations. |
| 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 des 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 de project-name et une nouvelle ressource cloud est créée dans le cadre des éléments suivants:
| Ensemble de données qui stocke le fichier de données client de la banque Secundus |
| Le pool d'identités de charge de travail (WIP) de la banque Secundus qui valide les revendications. |
| Le fournisseur de pool d'identités de charge de travail de la banque Secundus, qui inclut la condition d'autorisation à utiliser pour les jetons signés par le service de validation d'attestation. |
| Compte de service de la banque Secundus utilisé par |
| Clé KMS utilisée pour chiffrer les données stockées dans |
| Le trousseau de 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 Confidential qui exécute la charge de travail. |
- Cet atelier de programmation utilise quelques artefacts, comme indiqué ci-dessous:
primus_customer_list.csv
: fichier contenant les données client de Primus Bank. Voici l'exemple de fichier utilisé dans cet atelier de programmation.secundus_customer_list.csv
: fichier contenant les données client de la banque Secundus. Voici 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 du registre d'artefacts, Administrateur du compte de service et Administrateur du pool d'identités de charge de travail IAM. - Pour
$SECUNDUS_PROJECT_ID
, vous avez besoin des rôles Administrateur Compute, Administrateur Storage, Administrateur de compte de service, Administrateur Cloud KMS, Administrateur de pool Workload Identity IAM et Administrateur de sécurité (facultatif). - Exécutez le script suivant pour définir les noms de variable restants sur des valeurs basées sur votre ID de projet pour les noms de ressources.
source config_env.sh
Configurer des ressources cloud pour Primus Bank
Les ressources cloud suivantes sont requises pour la 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 ($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 dans son fournisseur. - Le compte de service (
$PRIMUS_SERVICE_ACCOUNT
) associé au pool d'identités de charges de travail ($PRIMUS_WORKLOAD_IDENTITY_POOL
) mentionné ci-dessus a accès au déchiffrement des données à l'aide de la clé KMS (à l'aide du rôleroles/cloudkms.cryptoKeyDecrypter
), à la lecture des données du bucket Cloud Storage (à l'aide du rôleobjectViewer
) et à la connexion du compte de service au pool d'identités de charges de travail (à l'aide deroles/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 la banque Secundus. Les ressources suivantes seront créées au cours de ces étapes:
- Bucket Cloud Storage (
$SECUNDUS_INPUT_STORAGE_BUCKET
) pour stocker le fichier de données client chiffré de la banque Secundus. - Clé de chiffrement (
$SECUNDUS_ENC_KEY
) et trousseau de clés ($SECUNDUS_ENC_KEYRING
) dans KMS pour chiffrer le fichier de données de la banque Secundus. - Pool d'identités de charge de travail (
$SECUNDUS_WORKLOAD_IDENTITY_POOL
) pour valider les revendications en fonction des conditions d'attributs configurées dans son fournisseur. - Le compte de service (
$SECUNDUS_SERVICE_ACCOUNT
) associé au pool d'identités de charge de travail ($SECUNDUS_WORKLOAD_IDENTITY_POOL
) mentionné ci-dessus a accès au déchiffrement des données à l'aide de la clé KMS (à l'aide du rôleroles/cloudkms.cryptoKeyDecrypter
), à la lecture des données du bucket Cloud Storage (à l'aide du rôleobjectViewer
) et à la connexion du compte de service au pool d'identités de charge de travail (à l'aide du 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 de charge de travail
Vous allez maintenant créer un compte de service pour la charge de travail avec les rôles et les 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 de la banque Secundus. La VM qui exécute la charge de travail utilisera 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.workloadUser
au compte de service de la charge de travail . Le compte utilisateur pourra ainsi générer un jeton d'attestation. - Attribuez le rôle
logging.logWriter
à l'autorisation du compte de service de la 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 ainsi disponibles une fois la VM arrêtée. objectViewer
pour lire les données du bucket Cloud Storage$PRIMUS_INPUT_STORAGE_BUCKET
.objectViewer
pour lire les données du bucket Cloud Storage$SECUNDUS_INPUT_STORAGE_BUCKET
.objectAdmin
pour é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
Au cours de 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.
- Recherche les clients communs de Primus et de 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, où la charge de travail sera publiée. - Générez le code et remplacez-le par les noms de ressources requis. Vous trouverez le code de la charge de travail utilisé dans cet atelier de programmation sur cette page.
- Créez le code et empaquetez-le dans une image Docker. Le Dockerfile correspondant est disponible sur cette page.
- Publiez l'image Docker dans Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY
) appartenant à Primus Bank. - Accordez au compte de service
$WORKLOAD_SERVICE_ACCOUNT
l'autorisation de lecture pour Artifact Registry ($PRIMUS_ARTIFACT_REGISTRY
).
./create_workload.sh
4. Autoriser et exécuter une ou plusieurs 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ù: environnement sécurisé
- Who: opérateur de confiance
Primus utilise la fédération d'identité de charge de travail pour appliquer une stratégie 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 pouvant s'authentifier avec le pool d'identités de charge de travail (WIP). Vous pouvez ajouter le service de validation des attestations au WIP 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 crée maintenant un fournisseur de pool d'identités de charge de travail OIDC. L'--attribute-condition
spécifié autorise l'accès au conteneur de la charge de travail. Cela nécessite :
- Description: dernière
$WORKLOAD_IMAGE_NAME
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
$WORKLOAD_SERVICE_ACCOUNT
de la banque 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"
Comme pour le WIP 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ù: dans l'environnement Confidential Space.
- Who: compte (
$WORKLOAD_SERVICE_ACCOUNT
) qui exécute la charge de travail.
Primus Bank utilise la revendication image_reference
, qui inclut la balise d'image, pour déterminer si elle doit autoriser l'accès. Ils contrôlent le dépôt distant et peuvent ainsi s'assurer de ne taguer que les images qui ne divulguent pas leurs données.
En revanche, la banque Secundus 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, il choisit d'autoriser l'accès à la charge de travail en fonction de son image_digest
. Contrairement à image_reference
, que Primus Bank peut modifier pour qu'il pointe vers une autre image, Primus Bank ne peut pas faire en sorte que image_digest
fasse référence à une autre image 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 l'image_digest
de l'image du conteneur de charge de travail qui sera utilisée 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
Au cours de cette étape, Secundus Bank exécutera la charge de travail sur 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 compte 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é dans $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 pour 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 originaires de Seattle listées dans le fichier primus_customer_list.csv
.
Exécuter une deuxième charge de travail
Lors de la deuxième exécution de la charge de travail, nous trouverons les clients communs de la Primus Bank et de la 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é dans $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 pour 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 devrait être la liste suivante, car il s'agit des clients communs entre Primus et Secundus Bank.
Sortie :
Eric
Clinton
Ashley
Cooper
Exécuter une charge de travail non autorisée
Le contrat de la banque Primus permettant à la banque Secundus d'accéder à ses données expire. Primus Bank met donc à jour sa condition d'attribut pour autoriser les VM avec le compte de service de son nouveau partenaire, Tertius Bank.
Primus Bank modifie le fournisseur du pool 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 à un nouvel emplacement.
- 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 l'utilisera plus tard pour mettre à jour la condition d'attribut du fournisseur de pool d'identités de charge de travail. La banque Primus ne cessera pas d'autoriser les comptes de service de la charge de travail de la banque Secundus. Il autorisera désormais les comptes de service de charge de travail de la 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_accounts
est 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 la charge de travail de la banque Secundus, le compte de service de la charge de travail de la banque Tertius sera 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 la banque Secundus tente d'exécuter la charge de travail d'origine, elle échoue. Pour afficher l'erreur, supprimez le fichier de résultats d'origine et l'instance de VM, puis réessayez d'exécuter 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 de VM Confidential.
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 dans un bucket appartenant à la banque Primus, cette tentative échouera, car le récapitulatif de la charge de travail malveillante sera différent du récapitulatif de l'image autorisé dans le pool d'identités de charge de travail de la banque Secundus.
5. Effectuer un nettoyage
Voici le script que vous pouvez utiliser pour nettoyer les ressources que nous avons créées dans cet atelier de programmation. Lors de ce nettoyage, les ressources suivantes seront supprimées:
- Bucket Cloud Storage de la Primus Bank (
$PRIMUS_INPUT_STORAGE_BUCKET)
. - Un compte de service de la Primus Bank (
$PRIMUS_SERVICE_ACCOUNT
). - Un registre d'artefacts de la Primus Bank qui contient des signatures d'image (
$PRIMUS_COSIGN_REPOSITORY
). - Un pool d'identités de charge de travail de la Primus Bank(
$PRIMUS_WORKLOAD_IDENTITY_POOL
). - Un compte de service de charge de travail de la banque Secundus (
$WORKLOAD_SERVICE_ACCOUNT
). - Bucket Cloud Storage de la banque Secundus (
$SECUNDUS_INPUT_STORAGE_BUCKET)
. - Compte de service de la banque Secundus (
$SECUNDUS_SERVICE_ACCOUNT
). - Un registre d'artefacts de la banque Secundus qui contient des signatures d'image (
$SECUNDUS_COSIGN_REPOSITORY
). - Pool d'identités de charge de travail de la banque Secundus(
$SECUNDUS_WORKLOAD_IDENTITY_POOL
). - Compte de service de charge de travail de la banque Secundus (
$WORKLOAD_SERVICE_ACCOUNT
). - Instances de calcul de charge de travail
- Bucket de stockage des résultats de la banque Secundus (
$SECUNDUS_RESULT_STORAGE_BUCKET
). - Dépôt d'artefacts de Primus Bank (
$PRIMUS_ARTIFACT_REPOSITORY
).
./cleanup.sh
Si vous avez terminé votre exploration, envisagez de 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 être supprimé.
Félicitations
Félicitations, vous avez terminé l'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 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 Confidential Space
- Analyser des données confidentielles avec Confidential Space
Complément d'informations
- Vous vous sentez isolé ? L'informatique confidentielle à la rescousse
- Informatique confidentielle dans GCP
- Confidential Space: l'avenir de la collaboration protégeant la confidentialité
- Comment Google et Intel renforcent la sécurité du calcul confidentiel
- Confidentialité et progrès : améliorer la sécurité avec l'informatique confidentielle Google Cloud