Partager via


Programmabilité de Registre confidentiel Azure (ACL)

La programmabilité est une nouvelle fonctionnalité de Registre confidentiel qui permet aux clients d’exécuter du code personnalisé dans la même base de calcul approuvée (TCB) que les transactions normales de Registre confidentiel Azure (ACL, Azure Confidential Ledger). L’avantage de l’exécution du code personnalisé et des transactions dans la base de calcul approuvée (TCB) est qu’elle offre les mêmes garanties de confidentialité et d’intégrité au code personnalisé et aux transactions produites par celui-ci. La programmabilité prend également en charge le contrôle d’accès en fonction du rôle (RBAC) via des rôles personnalisés définis dans la liste de contrôle d’accès et utilisés dans le code.

Voici quelques scénarios qui sont rendus possibles via la programmabilité :

  • Agrégation et analyse des données : les informations sensibles peuvent être analysées dans la base de calcul approuvée (TCB) et seules les informations agrégées peuvent être partagées avec les parties prenantes.
  • Attestation : des informations sensibles telles que des informations personnelles, des scores de crédit et des informations médicales peuvent être partagées avec des charges de travail qui s’exécutent sur d’autres offres de capacité de calcul confidentielles, comme ACI confidentiel Azure (Azure Confidential ACI) et Machine virtuelle confidentielle après attestation.

Prérequis

  • Propriétaire de l’abonnement : un registre confidentiel ne peut être créé que par les utilisateurs disposant d’autorisations de type Propriétaire dans le cadre de l’abonnement Azure. Vérifiez que vous disposez de l’accès approprié avant de poursuivre ce démarrage rapide.

Ce tutoriel part du principe que vous avez créé une instance de Registre confidentiel. Vous pouvez créer un Registre confidentiel avec le portail Azure, Azure CLI ou Azure PowerShell.

Développement et déploiement d’applications

Les applications sont développées en utilisant TypeScript et déployées dans un pack JavaScript. Pour plus d’informations sur le processus de développement, reportez-vous à la documentation Confidential Consortium Framework (CCF).

Important

Seuls les utilisateurs administrateurs peuvent déployer des applications et gérer le contrôle RBAC personnalisé dans Registre confidentiel. Le reste de la section suppose qu’un administrateur effectue les étapes suivantes.

La section suivante suppose que l’application est prête pour le déploiement. Pour illustrer le processus de déploiement, nous utilisons l’exemple d’application bancaire disponible dans le référentiel azureconfidentialledger-app-samples (https://github.com/microsoft/azureconfidentialledger-app-samples).

Remarque

L’application montre comment les cas d’usage bancaires courants, comme l’ouverture de comptes, le dépôt et le transfert de fonds, peuvent être réalisés via une application JavaScript déployée sur une instance de Registre confidentiel. Il montre également comment les rôles personnalisés et le contrôle RBAC peuvent être utilisés pour autoriser les actions utilisateur.

Connexion à Azure

Remarque

Registre confidentiel prend en charge Microsoft Entra tel quel. Aucune configuration n’est requise. Si votre application utilise des jetons JWT émis par d’autres fournisseurs d’identité, contactez le support technique pour le configurer sur l’instance de Registre confidentiel.

Obtenez un jeton Microsoft Entra pour vous authentifier auprès de l’instance de Registre confidentiel.

az login --use-device-code
az account get-access-token --resource https://confidential-ledger.azure.com

Copiez la valeur du jeton brut depuis la sortie de la commande.

Télécharger l’identité du Registre

Chaque instance de Registre confidentiel est associée à une identité unique représentée par un certificat appelé « certificat de service. Il est nécessaire d’établir une connexion sécurisée à l’instance. Téléchargez-le et enregistrez-le dans servicer_cert.pem.

Remarque

contoso est le nom de l’instance de Registre confidentiel. Remplacez-le par le nom de votre instance.

curl https://identity.confidential-ledger.core.azure.com/ledgerIdentity/contoso --silent | jq ' .ledgerTlsCertificate' | xargs echo -e > service_cert.pem

Déployer l’application

Déployez le pack d’applications JavaScript en appelant /app/userDefinedEndpoints.

apiVersion="2024-08-22-preview"
content_type_application_json="Content-Type: application/json"
bundle="/path/to/bundle.json"
authorization="Authorization: Bearer raw_token_value"
server_identity="--cacert service_cert.pem"

# Deploy the application
#
curl $server_identity -X PUT "https://contoso.confidential-ledger.azure.com/app/userDefinedEndpoints?api-version=$apiVersion" -H "$content_type_application_json" -H "$authorization" -d @$bundle

# View the application
#
curl $server_identity "https://contoso.confidential-ledger.azure.com/app/userDefinedEndpoints?api-version=$apiVersion" -H "$authorization"

Créer des rôles personnalisés et des utilisateurs

L’application bancaire implique deux personnages : un « responsable » et un « guichetier ». Nous créons deux rôles et deux utilisateurs pour représenter les personnages.

Remarque

L’utilisateur est représenté par un certificat unique.

Remarque

Les utilisateurs d’application peuvent se voir attribuer des rôles intégrés : Administrateur, Contributeur et Lecteur. Les rôles personnalisés respectent la casse et les rôles intégrés ne la respectent pas. Un utilisateur peut se voir attribuer plusieurs rôles.

apiVersion="2024-08-22-preview"
content_type_application_json="Content-Type: application/json"
content_type_merge_patch_json="Content-Type: application/merge-patch+json"
authorization="Authorization: Bearer raw_token_value"
curve="secp384r1"
server_identity="--cacert service_cert.pem"

# These actions must match (case-sensitive) the values defined in the application.
#
role_actions='{"roles":[{"role_name":"manager","role_actions":["/banking/accounts/post","/banking/accounts/put","/banking/accounts/get","/banking/accounts/patch"]},{"role_name":"teller","role_actions":["/banking/accounts/put","/banking/accounts/get","/banking/accounts/patch"]}]}'

# Create the roles.
#
curl $server_identity -X PUT "https://contoso.confidential-ledger.azure.com/app/roles?api-version=$apiVersion" -H "$content_type_application_json" -H "$authorization" -d $role_actions

# View the roles
#
curl $server_identity "https://contoso.confidential-ledger.azure.com/app/roles?api-version=$apiVersion" -H "$authorization"

# Create a certificate for the manager user.
#
openssl ecparam -out "manager_privk.pem" -name "$curve" -genkey
openssl req -new -key "manager_privk.pem" -x509 -nodes -days 365 -out "manager_cert.pem" -sha384 -subj=/CN="manager"
manager_cert_fingerprint=$(openssl x509 -in "manager_cert.pem" -noout -fingerprint -sha256 | cut -d "=" -f 2)
manager_user="{\"user_id\":\"$manager_cert_fingerprint\",\"assignedRoles\":[\"manager\"]}"

# Create a certificate for the teller user.
#
openssl ecparam -out "teller_privk.pem" -name "$curve" -genkey
openssl req -new -key "teller_privk.pem" -x509 -nodes -days 365 -out "teller_cert.pem" -sha384 -subj=/CN="teller"
teller_cert_fingerprint=$(openssl x509 -in "teller_cert.pem" -noout -fingerprint -sha256 | cut -d "=" -f 2)
teller_user="{\"user_id\":\"$teller_cert_fingerprint\",\"assignedRoles\":[\"teller\"]}"

# Create the manager user.
#
curl $server_identity -X PATCH "https://contoso.confidential-ledger.azure.com/app/ledgerUsers/$manager_cert_fingerprint?api-version=$apiVersion" -H "$content_type_merge_patch_json" -H "$authorization" -d $manager_user

# Create the teller user.
#
curl $server_identity -X PATCH "https://contoso.confidential-ledger.azure.com/app/ledgerUsers/$teller_cert_fingerprint?api-version=$apiVersion" -H "$content_type_merge_patch_json" -H "$authorization" -d $teller_user

# View the users
#
curl $server_identity "https://contoso.confidential-ledger.azure.com/app/ledgerUsers?api-version=$apiVersion" -H "$authorization"

Mettre à jour la configuration du runtime (facultatif)

La configuration du runtime JavaScript peut être mise à jour en appelant le point de terminaison /app/userDefinedEndpoints/runTimeOptions. Pour le montrer, nous allons définir la durée d’exécution maximale sur 2 000 ms.

apiVersion="2024-08-22-preview"
content_type_merge_patch_json="Content-Type: application/merge-patch+json"
authorization="Authorization: Bearer raw_token_value"
runtime_options="{\"max_heap_bytes\":1024,\"max_stack_bytes\":1024,\"max_execution_time_ms\":2000,\"log_exception_details\":false,\"return_exception_details\":false,\"max_cached_interpreters\":1024}"
server_identity="--cacert service_cert.pem"

# Patch the runtime options
#
curl $server_identity -X PATCH "https://contoso.confidential-ledger.azure.com/app/userDefinedEndpoints/runTimeOptions?api-version=$apiVersion" -H "$content_type_merge_patch_json" -H "$authorization" -d $runtime_options

# View the runtime options
#
curl $server_identity "https://contoso.confidential-ledger.azure.com/app/userDefinedEndpoints/runTimeOptions?api-version=$apiVersion" -H "$authorization"

Vous êtes maintenant prêt à appeler les points de terminaison d’application et à soumettre des transactions.

Nettoyer les ressources

D’autres guides de démarrage rapide et didacticiels de cette collection reposent sur ce guide. Si vous prévoyez d’utiliser d’autres démarrages rapides et didacticiels, il peut être utile de conserver ces ressources.

Quand vous n’en avez plus besoin, vous pouvez utiliser la commande Azure CLI az group delete pour supprimer le groupe de ressources ainsi que toutes les ressources associées :

az group delete --name "myResourceGroup"

Étapes suivantes

Dans ce tutoriel, vous avez déployé une application JavaScript personnalisée dans une instance de Registre confidentiel. Pour en savoir plus sur le registre confidentiel Azure et sur la manière de l’intégrer à vos applications, poursuivez avec ces articles.